.macro outword, rd
strh \rd, [r0]
mov \rd, \rd, lsr
strh \rd, [r0]
mov lr, \rd, lsr
strh lr, [r0]
strh \rd, [r0]
.endm
.Loutsw_align: movs ip, r1, lsl
bne .Loutsw_noalign
ldrh r3, [r1],
sub r2, r2,
strh r3, [r0]
ENTRY(__raw_writesw)
teq r2,
reteq lr
ands r3, r1,
bne .Loutsw_align
stmfd sp!, {r4, r5, lr}
subs r2, r2,
bmi .Lno_outsw_8
.Loutsw_8_lp: ldmia r1!, {r3, r4, r5, ip}
subs r2, r2,
outword r3
outword r4
outword r5
outword ip
bpl .Loutsw_8_lp
.Lno_outsw_8: tst r2,
beq .Lno_outsw_4
ldmia r1!, {r3, ip}
outword r3
outword ip
.Lno_outsw_4: movs r2, r2, lsl
bcc .Lno_outsw_2
ldr r3, [r1],
outword r3
.Lno_outsw_2: ldrhne r3, [r1]
strhne r3, [r0]
ldmfd sp!, {r4, r5, pc}
.Loutsw_noalign:
ARM( ldr r3, [r1, -r3]! )
THUMB( rsb r3, r3,
THUMB( ldr r3, [r1, r3] )
THUMB( sub r1, r3 )
subcs r2, r2,
bcs 2f
subs r2, r2,
bmi 3f
1: mov ip, r3, lsr
strh ip, [r0]
2: mov ip, r3, pull_hbyte0
ldr r3, [r1,
subs r2, r2,
orr ip, ip, r3, push_hbyte1
strh ip, [r0]
bpl 1b
tst r2,
3: movne ip, r3, lsr
strhne ip, [r0]
ret lr
ENDPROC(__raw_writesw)