.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