23 lines
443 B
ArmAsm
23 lines
443 B
ArmAsm
|
.sect .text
|
||
|
|
||
|
! Exchange top two values on stack.
|
||
|
! Stack: ( a b size -- b a )
|
||
|
|
||
|
.define .exg
|
||
|
.exg:
|
||
|
lwz r3, 0(sp) ! r3 = size
|
||
|
srwi r7, r3, 2
|
||
|
mtspr ctr, r7 ! ctr = size / 4
|
||
|
mr r4, sp ! r4 = pointer before value b
|
||
|
add r5, r4, r3 ! r5 = pointer before value a
|
||
|
|
||
|
! Loop to swap each pair of words.
|
||
|
1: lwzu r6, 4(r4)
|
||
|
lwzu r7, 4(r5)
|
||
|
stw r6, 0(r5)
|
||
|
stw r7, 0(r4)
|
||
|
bdnz 1b ! loop ctr times
|
||
|
|
||
|
addi sp, sp, 4 ! drop size from stack
|
||
|
blr
|