37 lines
		
	
	
	
		
			502 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			502 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .global	csa
 | |
| 
 | |
| ECASE=20
 | |
| STACK_CLICK=4
 | |
| 
 | |
| csa:
 | |
| 		! jump table address in %o0
 | |
| 		! index in %o1
 | |
| 
 | |
| 	ld	[%o0], %o4		! default address
 | |
| 	ld	[%o0+4], %o2
 | |
| 	subcc	%o1, %o2, %o1		! index - lower bound
 | |
| 	bl	1f
 | |
| 	ld	[%o0+2*4], %o3
 | |
| 	cmp	%o1, %o3		! rel. index, upper - lower bound
 | |
| 	bgt	1f
 | |
| 	nop
 | |
| 	sll	%o1, 2, %o5
 | |
| 	add	%o0, %o5, %o3		! %o3 = @jump address
 | |
| 	ld	[%o3+12], %o2		! %o2 = jump address
 | |
| 	tst	%o2
 | |
| 	be	1f
 | |
| 	nop
 | |
| 	jmp	%o2
 | |
| 	nop
 | |
| 1:
 | |
| 	tst	%o4
 | |
| 	beq	2f
 | |
| 	nop
 | |
| 	jmp	%o4
 | |
| 	nop
 | |
| 2:
 | |
| 	mov	ECASE, %o0
 | |
| 	set	trp, %g1
 | |
| 	jmp	%g1
 | |
| 	nop
 | |
| .align 4
 |