40 lines
		
	
	
	
		
			439 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			439 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.global csb
 | 
						|
ECASE=20
 | 
						|
 | 
						|
csb:
 | 
						|
		! case descriptor in %o0
 | 
						|
		! index in %o1
 | 
						|
	ld	[%o0], %o2	! default jump address
 | 
						|
	ld	[%o0+4], %o3	! # entries
 | 
						|
	inc	8, %o0
 | 
						|
	tst	%o3
 | 
						|
	be	3f
 | 
						|
	nop
 | 
						|
	dec	%o3
 | 
						|
	set	0xffff, %o4
 | 
						|
	and	%o3, %o4, %o5
 | 
						|
	sll	%o5, 3, %o3
 | 
						|
1:
 | 
						|
	ld	[%o0+%o3], %o4
 | 
						|
	cmp	%o4, %o1
 | 
						|
	be	2f
 | 
						|
	nop
 | 
						|
	deccc	8, %o3
 | 
						|
	bge	1b
 | 
						|
	nop
 | 
						|
	b	3f
 | 
						|
	nop
 | 
						|
2:	
 | 
						|
	inc	4, %o3
 | 
						|
	ld	[%o0+%o3], %o2
 | 
						|
3:
 | 
						|
	tst	%o2
 | 
						|
	be	4f
 | 
						|
	nop
 | 
						|
	jmp	%o2
 | 
						|
	nop
 | 
						|
4:
 | 
						|
	set	ECASE, %o0
 | 
						|
	set	trp, %g1
 | 
						|
	jmp	%g1
 | 
						|
	nop
 |