29 lines
		
	
	
	
		
			842 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			842 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
 | |
| .define .strlb
 | |
| 
 | |
| 	! $Id$
 | |
| 	! revised version by CHL
 | |
| 	! Store the value that is on the stack in fp.
 | |
| 	! Compute ap.
 | |
| .strlb:
 | |
| 	movl	(sp)+,r3
 | |
| 	movl	(sp)+,fp
 | |
| 	pushl	r3
 | |
| 	movl	$20,ap		! Compute argumentbase from local base.
 | |
| 				! Distance is 5 longwords + the number of
 | |
| 				! registers saved.
 | |
| 	movl	4(fp),r3	! mask for saved registers
 | |
| 	movl	$16,r2		! position of first bit to test
 | |
| I4:
 | |
|         subl3   r2,$28,r1       ! remaining size of mask
 | |
|         ffs     r2,r1,r3,r2     ! find first bit set in mask
 | |
|         beql    I5              ! no more bits set
 | |
|         addl2   $4,ap           ! for each saved register
 | |
|         incl    r2
 | |
|         jbr     I4
 | |
| I5:
 | |
| 	extzv	$14,$2,6(fp),r3	! Now find out about the stack alignment
 | |
| 				! between fp and ap
 | |
| 	addl2	r3,ap		! add alignment
 | |
| 	addl2	fp,ap
 | |
| 	rsb
 |