55 lines
820 B
ArmAsm
55 lines
820 B
ArmAsm
|
#
|
||
|
! $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
|