33 lines
		
	
	
	
		
			848 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			848 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #
 | |
| /*
 | |
|  * VideoCore IV support library for the ACK
 | |
|  * © 2013 David Given
 | |
|  * This file is redistributable under the terms of the 3-clause BSD license.
 | |
|  * See the file 'Copying' in the root of the distribution for the full text.
 | |
|  */
 | |
| 
 | |
| #include "videocore.h"
 | |
| 
 | |
| .define	.csb
 | |
| .sect .data
 | |
| .csb:
 | |
| 	! on entry:
 | |
| 	!   r0 = un-fixed-up descriptor
 | |
| 	!   r1 = value
 | |
| 	add r0, gp               ! r0 = fixed up descriptor
 | |
| 
 | |
| 	adds8 r2, r0, #1         ! r2 = moving pointer
 | |
| 	ld r3, 4 (r0)            ! r3 = count
 | |
| 	adds8 r3, r0, r3         ! r3 = end ptr
 | |
| 
 | |
| loop:
 | |
| 	ld r4, (r2)++
 | |
| 	b.eq r4, r1, matched      ! r2 points at matching addr
 | |
| 	addcmpb.le r2, #4, r3, loop
 | |
| notmatched:
 | |
| 	mov r2, r0               ! r2 points at default jump
 | |
| matched:
 | |
| 	ld r2, (r2)              ! load destination address
 | |
|     add r2, gp               ! fix up r2
 | |
|     b r2                     ! ...and go
 | |
| 
 |