58 lines
805 B
ArmAsm
58 lines
805 B
ArmAsm
#
|
|
! $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
|