our RISV-CPU does not support unaligned mem access.
here is a part of asm code generated by clang:
addiw (c.addiw) s7, s7, 1
addi (c.addi) s0, s0, 1
lbu a0, 4095(s0)
bne (c.bnez) a0, 46430
j (c.j) 466b0
mv (c.mv) a0, s7
ld (c.ldsp) ra, 376(sp)
ld (c.ldsp) s0, 368(sp)
ld (c.ldsp) s1, 360(sp)
ld (c.ldsp) s2, 352(sp)
ld (c.ldsp) s3, 344(sp)
ld (c.ldsp) s4, 336(sp)
ld (c.ldsp) s5, 328(sp)
ld (c.ldsp) s6, 320(sp)
ld (c.ldsp) s7, 312(sp)
ld (c.ldsp) s8, 304(sp)
ld (c.ldsp) s9, 296(sp)
ld (c.ldsp) s10, 288(sp)
ld (c.ldsp) s11, 280(sp)
addi (c.addi16sp) sp, sp, 384
ret
bne (c.bnez) s0, 418d2
ld (c.ldsp) ra, 56(sp)
ld (c.ldsp) s0, 48(sp)
ld (c.ldsp) s1, 40(sp)
ld (c.ldsp) s2, 32(sp)
ld (c.ldsp) s3, 24(sp)
ld (c.ldsp) s4, 16(sp)
addi (c.addi16sp) sp, sp, 112
ret
ld a2, 0(s3)
addi (c.addi4spn) a1, sp, 48
mv (c.mv) a0, s10
li (c.li) a3, 0
jal ra, 41bb8
addi (c.addi16sp) sp, sp, -96
sd (c.sdsp) ra, 88(sp)
sd (c.sdsp) s0, 80(sp)
sd (c.sdsp) s1, 72(sp)
sd (c.sdsp) s2, 64(sp)
sd (c.sdsp) s3, 56(sp)
sd (c.sdsp) s4, 48(sp)
sd (c.sdsp) s5, 40(sp)
sd (c.sdsp) s6, 32(sp)
mv (c.mv) s4, a3
mv (c.mv) s1, a2
mv (c.mv) s2, a1
mv (c.mv) s0, a0
sd (c.sdsp) a2, 24(sp)
beq (c.beqz) a0, 41bdc
bne s2, zero, 22
li (c.li) a0, 2
bne s4, a0, 16
jal ra, 44c06
auipc a0, 0xfb
addi a0, a0, 1130
ld (c.ld) a0, 0(a0)
beq (c.beqz) a0, 44c24
auipc a0, 0xfb
addi a0, a0, 1126
ld (c.ld) a0, 0(a0)
sltiu a0, a0, 0x1
slli (c.slli) a0, a0, 1
ret
sltu a0, zero, a0
sltiu a1, s1, 0x1
or (c.or) a0, a0, a1’
bne (c.bnez) a0, 41c12
csrrci zero, 08, csr 768
addi s1, gp, -2024
ld (c.ld) a1, 0(s1)
addi a0, a1, 1
sd (c.sd) a0, 0(s1)
ld (c.ld) a2, 112(s0)
ld (c.ld) a3, 120(s0)
addi a4, s4, -2
sltiu s5, a4, 0x1
sltu a2, a2, a3
or a2, s5, a2
beq (c.beqz) a2, 41c74
ld s3, 112(s0)
ld (c.ld) a2, 128(s0)
beq a2, zero, 264
beq s4, zero, 276
ld (c.ld) a0, 8(s0)
mv (c.mv) a1, s2
jal ra, 46f1a
or a3, a0, a1
andi a4, a3, 0x7
beq (c.beqz) a4, 46f46
andi a6, a2, 0x7
beq a6, zero, 36
c.andi a2, zero, -48
bge zero, a2, 108
add a4, a0, a6
add (c.add) a2, a2, a4
add (c.add) a1, a1, a6
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
addi a5, a4, 1
sb a3, 0(a4)
mv (c.mv) a4, a5
bltu a5, a2, -16
lb a3, 0(a1)
addi (c.addi) a1, a1, 1
and generated assembly by gcc:
ld (c.ldsp) ra, 8(sp)
li (c.li) a0, 1
addi (c.addi) sp, sp, 16
ret
lw (c.lw) a5, 0(s0)
addi (c.addi) s1, s1, 1
addiw (c.addiw) a5, a5, 1
sw (c.sw) a5, 0(s0)
lbu a0, 0(s1)
bne a0, s3, -18
beq (c.beqz) a0, 40866
ld (c.ldsp) ra, 344(sp)
ld (c.ldsp) s0, 336(sp)
ld (c.ldsp) s1, 328(sp)
ld (c.ldsp) s2, 320(sp)
ld (c.ldsp) s3, 312(sp)
ld (c.ldsp) s4, 304(sp)
ld (c.ldsp) s5, 296(sp)
ld (c.ldsp) s6, 288(sp)
ld (c.ldsp) s7, 280(sp)
ld (c.ldsp) s8, 272(sp)
ld (c.ldsp) s9, 264(sp)
ld (c.ldsp) s10, 256(sp)
addi (c.addi16sp) sp, sp, 352
ret
ld (c.ldsp) ra, 24(sp)
c.lwsp a0, 12
addi (c.addi16sp) sp, sp, 32
ret
bne (c.bnez) s0, 444f2
ld (c.ldsp) ra, 56(sp)
ld (c.ldsp) s0, 48(sp)
ld (c.ldsp) s1, 40(sp)
ld (c.ldsp) s2, 32(sp)
ld (c.ldsp) s3, 24(sp)
ld (c.ldsp) s4, 16(sp)
addi (c.addi16sp) sp, sp, 112
ret
ld a2, 0(s3)
li (c.li) a3, 0
mv (c.mv) a1, sp
mv (c.mv) a0, s9
jal ra, 467c2
addi (c.addi16sp) sp, sp, -96
sd (c.sdsp) s0, 80(sp)
sd (c.sdsp) s3, 56(sp)
sd (c.sdsp) s5, 40(sp)
sd (c.sdsp) ra, 88(sp)
sd (c.sdsp) s1, 72(sp)
sd (c.sdsp) s2, 64(sp)
sd (c.sdsp) s4, 48(sp)
sd (c.sdsp) a2, 8(sp)
mv (c.mv) s0, a0
mv (c.mv) s5, a1
mv (c.mv) s3, a3
beq a0, zero, 394
beq s5, zero, 318
li (c.li) a5, 2
beq s3, a5, 298
jal ra, 43a42
auipc a5, 0xfc
ld a5, 1630(a5)
li (c.li) a0, 1
beq (c.beqz) a5, 43a5c
auipc a0, 0xfc
ld a0, 1562(a0)
sltiu a0, a0, 0x1
slli (c.slli) a0, a0, 1
ret
bne (c.bnez) a0, 467f4
csrrci zero, 08, csr 768
auipc s1, 0xfa
addi s1, s1, -2032
ld (c.ld) a4, 0(s1)
ld (c.ld) a2, 112(s0)
ld (c.ld) a3, 120(s0)
addi a5, a4, 1
sd (c.sd) a5, 0(s1)
bltu a2, a3, 152
ld (c.ld) a2, 128(s0)
ld s2, 112(s0)
bne (c.bnez) a2, 46934
bne s3, zero, 60
ld (c.ld) a0, 8(s0)
mv (c.mv) a1, s5
addi (c.addi) s2, s2, 1
jal ra, 40d74
or a5, a1, a0
andi a4, a5, 0x7
add a6, a0, a2
beq (c.beqz) a4, 40da2
andi t1, a2, 0x7
slli a7, t1, 3
add (c.add) a7, a7, a0
mv (c.mv) a5, a0
mv (c.mv) a4, a1
bgeu a0, a7, 18
add a5, a0, t1
add a7, a1, t1
bgeu a5, a6, 476
addi a4, t1, 1
add (c.add) a4, a4, a1
sub t1, a2, t1
sub a4, a5, a4
addi a3, t1, -1
sltiu a4, a4, 0x7
sltiu a3, a3, 0x8
xori a3, a3, 0x1
xori a4, a4, 0x1
and (c.and) a4, a4, a3’
andi a4, a4, 0xff
mv (c.mv) a3, a5
beq (c.beqz) a4, 40e8e
or a4, a5, a7
c.andi a4, zero, 54
bne (c.bnez) a4, 40e8e
andi a1, t1, 0x-8
mv (c.mv) a4, a7
add (c.add) a1, a1, a7
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)
addi (c.addi) a4, a4, 8
addi (c.addi) a3, a3, 8
sd a2, -8(a3)
bne a4, a1, -10
ld (c.ld) a2, 0(a4)