ack/mach/powerpc/libem/sts.s
2007-11-02 18:56:58 +00:00

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