123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #
- ! $Source$
- ! $State$
- ! $Revision$
- #include "powerpc.h"
-
- .sect .text
- ! Stores a variable-sized structure from the stack.
- !
- ! r3 = size
- ! r4 = address
- .define .sts
- .sts:
- ! These sizes are handled specially.
-
- lwz r5, 0(sp)
- 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
-
- srawi r3, r3, 2 ! convert size to the number of words
- mtspr ctr, r3
-
- 1:
- lwz r5, 0(sp)
- addi sp, sp, 4
- stw r5, 0(r4)
- addi r4, r4, 4
- bc DNZ, 0, 1b ! decrement CTR, jump if non-zero
- bclr ALWAYS, 0, 0
-
- size1:
- stb r5, 0(r4)
- b 1f
- size2:
- sth r5, 0(r4)
- b 1f
- size4:
- stw r5, 0(r4)
- 1:
- addi sp, sp, 4
- bclr ALWAYS, 0, 0
|