c578c495bb
Remove one addi instruction from some loops. These loops had
increased 2 pointers, they now increase 1 index. I must initialize
the index, so I add "li r6, 0" before each loop.
Change .zer to use subf instead of neg, add.
Change .xor to take the size on the real stack, as .and and .or have
done since 81c677d
.
23 lines
431 B
ArmAsm
23 lines
431 B
ArmAsm
.sect .text
|
|
|
|
! Set symmetric difference.
|
|
! Stack: ( b a size -- a/b )
|
|
|
|
.define .xor
|
|
.xor:
|
|
lwz r3, 0(sp) ! r3 = size
|
|
srwi r7, r3, 2
|
|
mtspr ctr, r7 ! ctr = size / 4
|
|
addi r4, sp, 4 ! r4 = ptr to set a
|
|
add r5, r4, r3 ! r5 = ptr to set b
|
|
li r6, 0 ! r6 = index
|
|
1:
|
|
lwzx r7, r4, r6
|
|
lwzx r8, r5, r6
|
|
xor r8, r7, r8 ! symmetric difference of words
|
|
stwx r8, r5, r6
|
|
addi r6, r6, 4
|
|
bdnz 1b ! loop ctr times
|
|
mr sp, r5
|
|
blr
|