#include <sys/syscall.h>
#define STDOUT_FILENO 1
#define SWP_MAGIC 0xffc0
#define SWPB_MAGIC 0xc0c0
.text
.file "swp_test.S"
.syntax unified
.globl main
.p2align 2
.type main,%function
.code 32
main:
sub sp, #0x04
mov r4, #0
movw r0, :lower16:.L.testheader
movt r0, :upper16:.L.testheader
ldr r1, =(.L.testheaderEnd - .L.testheader - 1)
bl print
mov r0, #0x03
str r0, [sp]
mov r0, sp
mov r1, #SWP_MAGIC
swp r0, r1, [r0]
cmp r0, #0x03
bne 1f
ldr r0, [sp]
mov r1, #SWP_MAGIC
cmp r0, r1
bne 1f
b 2f
1:
add r4, #1
movw r0, :lower16:.L.boknot
movt r0, :upper16:.L.boknot
ldr r1, =(.L.boknotEnd - .L.boknot - 1)
bl print
2:
movw r0, :lower16:.L.ok1
movt r0, :upper16:.L.ok1
ldr r1, =(.L.ok1End - .L.ok1 - 1)
bl print
movw r5, #SWPB_MAGIC
movt r5, #SWPB_MAGIC
mov r6, sp
sub r6, #1
3:
str r5, [sp]
add r6, #1
mov r0, r6
mov r1, #3
swpb r0, r1, [r0]
cmp r0, #0xc0
bne 6f
ldrb r0, [r6]
cmp r0, #0x03
bne 6f
mov r1, r6
sub r1, sp
mov r0, #0x00
4:
cmp r0, r1
beq 5f
ldrb r3, [sp, r0]
cmp r3, #0xc0
bne 6f
5:
add r0, #0x01
cmp r0, #0x04
beq 7f
b 4b
6:
add r4, #1
movw r0, :lower16:.L.boknot
movt r0, :upper16:.L.boknot
ldr r1, =(.L.boknotEnd - .L.boknot - 1)
bl print
7:
movw r0, :lower16:.L.bok
movt r0, :upper16:.L.bok
ldr r1, =(.L.bokEnd - .L.bok - 1)
bl print
mov r0, r6
sub r0, sp
add r0, #0x32
mov r1, #0x01
str r0, [sp]
mov r0, sp
bl print
movw r0, :lower16:.L.boklabel
movt r0, :upper16:.L.boklabel
ldr r1, =(.L.boklabelEnd - .L.boklabel - 1)
bl print
mov r0, r6
sub r0, sp
add r0, #0x30
str r0, [sp]
mov r0, sp
mov r1, #0x01
bl print
movw r0, :lower16:.L.bokterm
movt r0, :upper16:.L.bokterm
ldr r1, =(.L.boktermEnd - .L.bokterm - 1)
bl print
mov r0, sp
add r0, #0x3
cmp r0, r6
bne 3b
mov r0, r4
ldr r7, =SYS_exit
swi 0
.p2align 2
.type print,%function
.code 32
print:
mov r2, r1
mov r1, r0
ldr r0, =STDOUT_FILENO
ldr r7, =SYS_write
swi 0
bx lr
.L.testheader:
.asciz "1..5\n"
.L.testheaderEnd:
.size .L.testheader, .L.testheaderEnd - .L.testheader
.L.ok1:
.asciz "ok 1 - swp\n"
.L.ok1End:
.size .L.ok1, .L.ok1End - .L.ok1
.L.boknot:
.asciz "not "
.L.boknotEnd:
.size .L.boknot, .L.boknotEnd - .L.boknot
.L.bok:
.asciz "ok "
.L.bokEnd:
.size .L.bok, .L.bokEnd - .L.bok
.L.boklabel:
.asciz " - swpb["
.L.boklabelEnd:
.size .L.boklabel, .L.boklabelEnd - .L.boklabel
.L.bokterm:
.asciz "]\n"
.L.boktermEnd:
.size .L.bokterm, .L.boktermEnd - .L.bokterm