1	.globl		utrap_trap
2	.type		utrap_trap,#function
3utrap_trap:		/* %g3=handler,%g4=level */
4	TRAP_LOAD_THREAD_REG(%g6, %g1)
5	ldx		[%g6 + TI_UTRAPS], %g1
6	brnz,pt		%g1, invoke_utrap
7	 nop
8
9	ba,pt		%xcc, etrap
10	 rd		%pc, %g7
11	mov		%l4, %o1
12        call		bad_trap
13	 add		%sp, PTREGS_OFF, %o0
14	ba,pt		%xcc, rtrap
15	 nop
16
17invoke_utrap:
18	sllx		%g3, 3, %g3
19	ldx		[%g1 + %g3], %g1
20	save		%sp, -128, %sp
21	rdpr		%tstate, %l6
22	rdpr		%cwp, %l7
23	andn		%l6, TSTATE_CWP, %l6
24	wrpr		%l6, %l7, %tstate
25	rdpr		%tpc, %l6
26	rdpr		%tnpc, %l7
27	wrpr		%g1, 0, %tnpc
28	done
29	.size		utrap_trap,.-utrap_trap
30