123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #
- ! $Source$
- ! $State$
- ! $Revision$
- #include "powerpc.h"
-
- .sect .text
- ! Loads a variable-sized structure onto the stack.
- !
- ! r3 = size
- ! r4 = address
- .define .los
- .los:
- ! These sizes are handled specially.
-
- cmpi cr0, 0, r3, 1
- bc IFFALSE, GT, size1
-
- cmpi cr0, 0, r3, 2
- bc IFFALSE, GT, size2
-
- cmpi cr0, 0, r3, 4
- bc IFFALSE, GT, size4
-
- ! Variable-sized structure.
-
- addi r3, r3, 3
- andi. r3, r3, ~3 ! align size
-
- add r4, r4, r3 ! adjust address to top of block
- srawi r3, r3, 2 ! convert size to the number of words
- mtspr ctr, r3
-
- 1:
- lwzu r5, -4(r4)
- stwu r5, -4(sp)
- bc DNZ, 0, 1b ! decrement CTR, jump if non-zero
- bclr ALWAYS, 0, 0
-
- size1:
- lbz r3, 0(r4)
- b 1f
- size2:
- lhz r3, 0(r4)
- b 1f
- size4:
- lwz r3, 0(r4)
- 1:
- stwu r3, -4(sp)
- bclr ALWAYS, 0, 0
|