57 lines
		
	
	
	
		
			805 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			57 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
 |