.macro outword, rd
strb \rd, [r0]
mov \rd, \rd, lsr
strb \rd, [r0]
mov \rd, \rd, lsr
strb \rd, [r0]
mov \rd, \rd, lsr
strb \rd, [r0]
mov lr, \rd, lsr
strb lr, [r0]
mov lr, \rd, lsr
strb lr, [r0]
mov lr, \rd, lsr
strb lr, [r0]
strb \rd, [r0]
.endm
.Loutsb_align: rsb ip, ip,
cmp ip, r2
movgt ip, r2
cmp ip,
ldrb r3, [r1],
strb r3, [r0]
ldrgeb r3, [r1],
strgeb r3, [r0]
ldrgtb r3, [r1],
strgtb r3, [r0]
subs r2, r2, ip
bne .Loutsb_aligned
ENTRY(__raw_writesb)
teq r2,
moveq pc, lr
ands ip, r1,
bne .Loutsb_align
.Loutsb_aligned:
stmfd sp!, {r4, r5, lr}
subs r2, r2,
bmi .Loutsb_no_16
.Loutsb_16_lp: ldmia r1!, {r3, r4, r5, ip}
outword r3
outword r4
outword r5
outword ip
subs r2, r2,
bpl .Loutsb_16_lp
tst r2,
ldmeqfd sp!, {r4, r5, pc}
.Loutsb_no_16: tst r2,
beq .Loutsb_no_8
ldmia r1!, {r3, r4}
outword r3
outword r4
.Loutsb_no_8: tst r2,
beq .Loutsb_no_4
ldr r3, [r1],
outword r3
.Loutsb_no_4: ands r2, r2,
ldmeqfd sp!, {r4, r5, pc}
cmp r2,
ldrb r3, [r1],
strb r3, [r0]
ldrgeb r3, [r1],
strgeb r3, [r0]
ldrgtb r3, [r1]
strgtb r3, [r0]
ldmfd sp!, {r4, r5, pc}
ENDPROC(__raw_writesb)