.Linsw_bad_alignment:
adr r0, .Linsw_bad_align_msg
mov r2, lr
b panic
.Linsw_bad_align_msg:
.asciz "insw: bad buffer alignment (0x%p, lr=0x%08lX)\n"
.align
.Linsw_align: tst r1,
bne .Linsw_bad_alignment
ldr r3, [r0]
strb r3, [r1],
mov r3, r3, lsr
strb r3, [r1],
subs r2, r2,
moveq pc, lr
ENTRY(__raw_readsw)
teq r2,
moveq pc, lr
tst r1,
bne .Linsw_align
.Linsw_aligned: mov ip,
orr ip, ip, ip, lsl
stmfd sp!, {r4, r5, r6, lr}
subs r2, r2,
bmi .Lno_insw_8
.Linsw_8_lp: ldr r3, [r0]
and r3, r3, ip
ldr r4, [r0]
orr r3, r3, r4, lsl
ldr r4, [r0]
and r4, r4, ip
ldr r5, [r0]
orr r4, r4, r5, lsl
ldr r5, [r0]
and r5, r5, ip
ldr r6, [r0]
orr r5, r5, r6, lsl
ldr r6, [r0]
and r6, r6, ip
ldr lr, [r0]
orr r6, r6, lr, lsl
stmia r1!, {r3 - r6}
subs r2, r2,
bpl .Linsw_8_lp
tst r2,
ldmeqfd sp!, {r4, r5, r6, pc}
.Lno_insw_8: tst r2,
beq .Lno_insw_4
ldr r3, [r0]
and r3, r3, ip
ldr r4, [r0]
orr r3, r3, r4, lsl
ldr r4, [r0]
and r4, r4, ip
ldr r5, [r0]
orr r4, r4, r5, lsl
stmia r1!, {r3, r4}
.Lno_insw_4: tst r2,
beq .Lno_insw_2
ldr r3, [r0]
and r3, r3, ip
ldr r4, [r0]
orr r3, r3, r4, lsl
str r3, [r1],
.Lno_insw_2: tst r2,
ldrne r3, [r0]
strneb r3, [r1],
movne r3, r3, lsr
strneb r3, [r1]
ldmfd sp!, {r4, r5, r6, pc}