Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #ifndef _SPARC64_TTABLE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #define _SPARC64_TTABLE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #include <asm/utrap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #include <asm/pil.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #ifdef __ASSEMBLY__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <asm/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define BOOT_KERNEL b sparc64_boot; nop; nop; nop; nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) /* We need a "cleaned" instruction... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define CLEAN_WINDOW							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	rdpr	%cleanwin, %l0;		add	%l0, 1, %l0;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	wrpr	%l0, 0x0, %cleanwin;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	clr	%o0;	clr	%o1;	clr	%o2;	clr	%o3;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	clr	%o4;	clr	%o5;	clr	%o6;	clr	%o7;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	clr	%l0;	clr	%l1;	clr	%l2;	clr	%l3;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	clr	%l4;	clr	%l5;	clr	%l6;	clr	%l7;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	retry;								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define TRAP(routine)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	ba,pt	%xcc, etrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	 add	%sp, PTREGS_OFF, %o0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	ba,pt	%xcc, rtrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define TRAP_7INSNS(routine)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	ba,pt	%xcc, etrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	 add	%sp, PTREGS_OFF, %o0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	ba,pt	%xcc, rtrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	 nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define TRAP_SAVEFPU(routine)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	ba,pt	%xcc, do_fptrap;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	 add	%sp, PTREGS_OFF, %o0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	ba,pt	%xcc, rtrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define TRAP_NOSAVE(routine)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	ba,pt	%xcc, routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	nop; nop; nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define TRAP_NOSAVE_7INSNS(routine)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	ba,pt	%xcc, routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	nop; nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define TRAPTL1(routine)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	ba,pt	%xcc, etraptl1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	 add	%sp, PTREGS_OFF, %o0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	ba,pt	%xcc, rtrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define TRAP_ARG(routine, arg)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	ba,pt	%xcc, etrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	add	%sp, PTREGS_OFF, %o0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	 mov	arg, %o1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	ba,pt	%xcc, rtrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	 nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define TRAPTL1_ARG(routine, arg)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	ba,pt	%xcc, etraptl1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	add	%sp, PTREGS_OFF, %o0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	 mov	arg, %o1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	ba,pt	%xcc, rtrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	 nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define SYSCALL_TRAP(routine, systbl)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	rdpr	%pil, %g2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	mov	TSTATE_SYSCALL, %g3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	sethi	%hi(109f), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	ba,pt	%xcc, etrap_syscall;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 109:	 or	%g7, %lo(109b), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	sethi	%hi(systbl), %l7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	ba,pt	%xcc, routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	 or	%l7, %lo(systbl), %l7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define TRAP_UTRAP(handler,lvl)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	mov	handler, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	ba,pt	%xcc, utrap_trap;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	 mov	lvl, %g4;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #ifdef CONFIG_COMPAT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define	LINUX_32BIT_SYSCALL_TRAP SYSCALL_TRAP(linux_sparc_syscall32, sys_call_table32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define	LINUX_32BIT_SYSCALL_TRAP BTRAP(0x110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define LINUX_64BIT_SYSCALL_TRAP SYSCALL_TRAP(linux_sparc_syscall, sys_call_table64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define GETCC_TRAP TRAP(getcc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define SETCC_TRAP TRAP(setcc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define BREAKPOINT_TRAP TRAP(breakpoint_trap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #ifdef CONFIG_TRACE_IRQFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define TRAP_IRQ(routine, level)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	rdpr	%pil, %g2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	wrpr	%g0, PIL_NORMAL_MAX, %pil;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	sethi	%hi(1f-4), %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	ba,pt	%xcc, etrap_irq;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	 or	%g7, %lo(1f-4), %g7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	.subsection	2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 1:	call	trace_hardirqs_off;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	mov	level, %o0;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	 add	%sp, PTREGS_OFF, %o1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	ba,a,pt	%xcc, rtrap_irq;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	.previous;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define TRAP_IRQ(routine, level)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	rdpr	%pil, %g2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	wrpr	%g0, PIL_NORMAL_MAX, %pil;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	ba,pt	%xcc, etrap_irq;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	 rd	%pc, %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	mov	level, %o0;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	 add	%sp, PTREGS_OFF, %o1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	ba,a,pt	%xcc, rtrap_irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define TRAP_NMI_IRQ(routine, level)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	rdpr	%pil, %g2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	wrpr	%g0, PIL_NMI, %pil;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	ba,pt	%xcc, etrap_irq;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	 rd	%pc, %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	mov	level, %o0;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	call	routine;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	 add	%sp, PTREGS_OFF, %o1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	ba,a,pt	%xcc, rtrap_nmi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define TRAP_IVEC TRAP_NOSAVE(do_ivec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define BTRAP(lvl) TRAP_ARG(bad_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define BTRAPTL1(lvl) TRAPTL1_ARG(bad_trap_tl1, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define FLUSH_WINDOW_TRAP						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	ba,pt	%xcc, etrap;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	 rd	%pc, %g7;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	flushw;								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	ldx	[%sp + PTREGS_OFF + PT_V9_TNPC], %l1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	add	%l1, 4, %l2;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	stx	%l1, [%sp + PTREGS_OFF + PT_V9_TPC];			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	ba,pt	%xcc, rtrap;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	 stx	%l2, [%sp + PTREGS_OFF + PT_V9_TNPC];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #ifdef CONFIG_KPROBES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define KPROBES_TRAP(lvl) TRAP_IRQ(kprobe_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define KPROBES_TRAP(lvl) TRAP_ARG(bad_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #ifdef CONFIG_UPROBES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define UPROBES_TRAP(lvl) TRAP_ARG(uprobe_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define UPROBES_TRAP(lvl) TRAP_ARG(bad_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #ifdef CONFIG_KGDB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define KGDB_TRAP(lvl) TRAP_IRQ(kgdb_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define KGDB_TRAP(lvl) TRAP_ARG(bad_trap, lvl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define SUN4V_ITSB_MISS					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	ldxa	[%g0] ASI_SCRATCHPAD, %g2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	ldx	[%g2 + HV_FAULT_I_ADDR_OFFSET], %g4;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	ldx	[%g2 + HV_FAULT_I_CTX_OFFSET], %g5;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	srlx	%g4, 22, %g6;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	ba,pt	%xcc, sun4v_itsb_miss;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define SUN4V_DTSB_MISS					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	ldxa	[%g0] ASI_SCRATCHPAD, %g2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	ldx	[%g2 + HV_FAULT_D_ADDR_OFFSET], %g4;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	ldx	[%g2 + HV_FAULT_D_CTX_OFFSET], %g5;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	srlx	%g4, 22, %g6;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	ba,pt	%xcc, sun4v_dtsb_miss;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define SUN4V_MCD_PRECISE				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	ldxa	[%g0] ASI_SCRATCHPAD, %g2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	ldx	[%g2 + HV_FAULT_D_ADDR_OFFSET], %g4;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	ldx	[%g2 + HV_FAULT_D_CTX_OFFSET], %g5;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	ba,pt	%xcc, etrap;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	 rd	%pc, %g7;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	ba,pt	%xcc, sun4v_mcd_detect_precise;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	 nop;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /* Before touching these macros, you owe it to yourself to go and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)  * see how arch/sparc64/kernel/winfixup.S works... -DaveM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)  * For the user cases we used to use the %asi register, but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)  * it turns out that the "wr xxx, %asi" costs ~5 cycles, so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)  * now we use immediate ASI loads and stores instead.  Kudos
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)  * to Greg Onufer for pointing out this performance anomaly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)  * Further note that we cannot use the g2, g4, g5, and g7 alternate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)  * globals in the spill routines, check out the save instruction in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)  * arch/sparc64/kernel/etrap.S to see what I mean about g2, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)  * g4/g5 are the globals which are preserved by etrap processing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)  * for the caller of it.  The g7 register is the return pc for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)  * etrap.  Finally, g6 is the current thread register so we cannot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)  * us it in the spill handlers either.  Most of these rules do not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)  * apply to fill processing, only g6 is not usable.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) /* Normal kernel spill */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define SPILL_0_NORMAL					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	stx	%l0, [%sp + STACK_BIAS + 0x00];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	stx	%l1, [%sp + STACK_BIAS + 0x08];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	stx	%l2, [%sp + STACK_BIAS + 0x10];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	stx	%l3, [%sp + STACK_BIAS + 0x18];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	stx	%l4, [%sp + STACK_BIAS + 0x20];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	stx	%l5, [%sp + STACK_BIAS + 0x28];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	stx	%l6, [%sp + STACK_BIAS + 0x30];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	stx	%l7, [%sp + STACK_BIAS + 0x38];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	stx	%i0, [%sp + STACK_BIAS + 0x40];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	stx	%i1, [%sp + STACK_BIAS + 0x48];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	stx	%i2, [%sp + STACK_BIAS + 0x50];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	stx	%i3, [%sp + STACK_BIAS + 0x58];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	stx	%i4, [%sp + STACK_BIAS + 0x60];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	stx	%i5, [%sp + STACK_BIAS + 0x68];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	stx	%i6, [%sp + STACK_BIAS + 0x70];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	stx	%i7, [%sp + STACK_BIAS + 0x78];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	saved; retry; nop; nop; nop; nop; nop; nop;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	nop; nop; nop; nop; nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define SPILL_0_NORMAL_ETRAP				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) etrap_kernel_spill:					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	stx	%l0, [%sp + STACK_BIAS + 0x00];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	stx	%l1, [%sp + STACK_BIAS + 0x08];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	stx	%l2, [%sp + STACK_BIAS + 0x10];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	stx	%l3, [%sp + STACK_BIAS + 0x18];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	stx	%l4, [%sp + STACK_BIAS + 0x20];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	stx	%l5, [%sp + STACK_BIAS + 0x28];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	stx	%l6, [%sp + STACK_BIAS + 0x30];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	stx	%l7, [%sp + STACK_BIAS + 0x38];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	stx	%i0, [%sp + STACK_BIAS + 0x40];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	stx	%i1, [%sp + STACK_BIAS + 0x48];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	stx	%i2, [%sp + STACK_BIAS + 0x50];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	stx	%i3, [%sp + STACK_BIAS + 0x58];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	stx	%i4, [%sp + STACK_BIAS + 0x60];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	stx	%i5, [%sp + STACK_BIAS + 0x68];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	stx	%i6, [%sp + STACK_BIAS + 0x70];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	stx	%i7, [%sp + STACK_BIAS + 0x78];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	saved;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	sub	%g1, 2, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	ba,pt	%xcc, etrap_save;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	wrpr	%g1, %cwp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	nop; nop; nop; nop; nop; nop; nop; nop;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) /* Normal 64bit spill */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define SPILL_1_GENERIC(ASI)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	add	%sp, STACK_BIAS + 0x00, %g1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	stxa	%l0, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	mov	0x08, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	stxa	%l1, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	stxa	%l2, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	stxa	%l3, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	stxa	%l4, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	stxa	%l5, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	stxa	%l6, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	stxa	%l7, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	stxa	%i0, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	stxa	%i1, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	stxa	%i2, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	stxa	%i3, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	stxa	%i4, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	stxa	%i5, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	stxa	%i6, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	stxa	%i7, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	saved;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	retry; nop; nop;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	b,a,pt	%xcc, spill_fixup_dax;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	b,a,pt	%xcc, spill_fixup_mna;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	b,a,pt	%xcc, spill_fixup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define SPILL_1_GENERIC_ETRAP				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) etrap_user_spill_64bit:					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	stxa	%l0, [%sp + STACK_BIAS + 0x00] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	stxa	%l1, [%sp + STACK_BIAS + 0x08] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 	stxa	%l2, [%sp + STACK_BIAS + 0x10] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	stxa	%l3, [%sp + STACK_BIAS + 0x18] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	stxa	%l4, [%sp + STACK_BIAS + 0x20] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	stxa	%l5, [%sp + STACK_BIAS + 0x28] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	stxa	%l6, [%sp + STACK_BIAS + 0x30] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	stxa	%l7, [%sp + STACK_BIAS + 0x38] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	stxa	%i0, [%sp + STACK_BIAS + 0x40] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	stxa	%i1, [%sp + STACK_BIAS + 0x48] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	stxa	%i2, [%sp + STACK_BIAS + 0x50] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	stxa	%i3, [%sp + STACK_BIAS + 0x58] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	stxa	%i4, [%sp + STACK_BIAS + 0x60] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	stxa	%i5, [%sp + STACK_BIAS + 0x68] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	stxa	%i6, [%sp + STACK_BIAS + 0x70] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	stxa	%i7, [%sp + STACK_BIAS + 0x78] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	saved;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	sub	%g1, 2, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	ba,pt	%xcc, etrap_save;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	 wrpr	%g1, %cwp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	nop; nop; nop; nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	nop; nop; nop; nop;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	ba,a,pt	%xcc, etrap_spill_fixup_64bit;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	ba,a,pt	%xcc, etrap_spill_fixup_64bit;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	ba,a,pt	%xcc, etrap_spill_fixup_64bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) #define SPILL_1_GENERIC_ETRAP_FIXUP			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) etrap_spill_fixup_64bit:				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	ldub	[%g6 + TI_WSAVED], %g1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	sll	%g1, 3, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	add	%g6, %g3, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	stx	%sp, [%g3 + TI_RWIN_SPTRS];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	sll	%g1, 7, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	add	%g6, %g3, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	stx	%l0, [%g3 + TI_REG_WINDOW + 0x00];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	stx	%l1, [%g3 + TI_REG_WINDOW + 0x08];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	stx	%l2, [%g3 + TI_REG_WINDOW + 0x10];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	stx	%l3, [%g3 + TI_REG_WINDOW + 0x18];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	stx	%l4, [%g3 + TI_REG_WINDOW + 0x20];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	stx	%l5, [%g3 + TI_REG_WINDOW + 0x28];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	stx	%l6, [%g3 + TI_REG_WINDOW + 0x30];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	stx	%l7, [%g3 + TI_REG_WINDOW + 0x38];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	stx	%i0, [%g3 + TI_REG_WINDOW + 0x40];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	stx	%i1, [%g3 + TI_REG_WINDOW + 0x48];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	stx	%i2, [%g3 + TI_REG_WINDOW + 0x50];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	stx	%i3, [%g3 + TI_REG_WINDOW + 0x58];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	stx	%i4, [%g3 + TI_REG_WINDOW + 0x60];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	stx	%i5, [%g3 + TI_REG_WINDOW + 0x68];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	stx	%i6, [%g3 + TI_REG_WINDOW + 0x70];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	stx	%i7, [%g3 + TI_REG_WINDOW + 0x78];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	add	%g1, 1, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	stb	%g1, [%g6 + TI_WSAVED];			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	saved;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	rdpr	%cwp, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	sub	%g1, 2, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	ba,pt	%xcc, etrap_save;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	 wrpr	%g1, %cwp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	nop; nop; nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) /* Normal 32bit spill */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) #define SPILL_2_GENERIC(ASI)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	and	%sp, 1, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	brnz,pn	%g3, (. - (128 + 4));			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	 srl	%sp, 0, %sp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	stwa	%l0, [%sp + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	mov	0x04, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	stwa	%l1, [%sp + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	add	%sp, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	stwa	%l2, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	stwa	%l3, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	add	%g1, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	stwa	%l4, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	stwa	%l5, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	add	%g1, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	stwa	%l6, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	stwa	%l7, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 	add	%g1, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	stwa	%i0, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 	stwa	%i1, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	add	%g1, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	stwa	%i2, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	stwa	%i3, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	add	%g1, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	stwa	%i4, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 	stwa	%i5, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	add	%g1, 0x08, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	stwa	%i6, [%g1 + %g0] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	stwa	%i7, [%g1 + %g3] ASI;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	saved;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)         retry;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	b,a,pt	%xcc, spill_fixup_dax;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	b,a,pt	%xcc, spill_fixup_mna;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	b,a,pt	%xcc, spill_fixup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) #define SPILL_2_GENERIC_ETRAP		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) etrap_user_spill_32bit:			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	and	%sp, 1, %g3;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	brnz,pn	%g3, etrap_user_spill_64bit;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	 srl	%sp, 0, %sp;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	stwa	%l0, [%sp + 0x00] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	stwa	%l1, [%sp + 0x04] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	stwa	%l2, [%sp + 0x08] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	stwa	%l3, [%sp + 0x0c] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	stwa	%l4, [%sp + 0x10] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	stwa	%l5, [%sp + 0x14] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 	stwa	%l6, [%sp + 0x18] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	stwa	%l7, [%sp + 0x1c] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	stwa	%i0, [%sp + 0x20] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	stwa	%i1, [%sp + 0x24] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	stwa	%i2, [%sp + 0x28] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	stwa	%i3, [%sp + 0x2c] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 	stwa	%i4, [%sp + 0x30] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	stwa	%i5, [%sp + 0x34] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	stwa	%i6, [%sp + 0x38] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	stwa	%i7, [%sp + 0x3c] %asi;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	saved;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	sub	%g1, 2, %g1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	ba,pt	%xcc, etrap_save;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	 wrpr	%g1, %cwp;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	nop; nop; nop; nop;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 	nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 	ba,a,pt	%xcc, etrap_spill_fixup_32bit; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	ba,a,pt	%xcc, etrap_spill_fixup_32bit; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	ba,a,pt	%xcc, etrap_spill_fixup_32bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) #define SPILL_2_GENERIC_ETRAP_FIXUP			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) etrap_spill_fixup_32bit:				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	ldub	[%g6 + TI_WSAVED], %g1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	sll	%g1, 3, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	add	%g6, %g3, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	stx	%sp, [%g3 + TI_RWIN_SPTRS];		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	sll	%g1, 7, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	add	%g6, %g3, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	stw	%l0, [%g3 + TI_REG_WINDOW + 0x00];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	stw	%l1, [%g3 + TI_REG_WINDOW + 0x04];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	stw	%l2, [%g3 + TI_REG_WINDOW + 0x08];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	stw	%l3, [%g3 + TI_REG_WINDOW + 0x0c];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	stw	%l4, [%g3 + TI_REG_WINDOW + 0x10];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	stw	%l5, [%g3 + TI_REG_WINDOW + 0x14];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	stw	%l6, [%g3 + TI_REG_WINDOW + 0x18];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	stw	%l7, [%g3 + TI_REG_WINDOW + 0x1c];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	stw	%i0, [%g3 + TI_REG_WINDOW + 0x20];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	stw	%i1, [%g3 + TI_REG_WINDOW + 0x24];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	stw	%i2, [%g3 + TI_REG_WINDOW + 0x28];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 	stw	%i3, [%g3 + TI_REG_WINDOW + 0x2c];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	stw	%i4, [%g3 + TI_REG_WINDOW + 0x30];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	stw	%i5, [%g3 + TI_REG_WINDOW + 0x34];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 	stw	%i6, [%g3 + TI_REG_WINDOW + 0x38];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	stw	%i7, [%g3 + TI_REG_WINDOW + 0x3c];	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	add	%g1, 1, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 	stb	%g1, [%g6 + TI_WSAVED];			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 	saved;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	rdpr	%cwp, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 	sub	%g1, 2, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	ba,pt	%xcc, etrap_save;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	 wrpr	%g1, %cwp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	nop; nop; nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) #define SPILL_1_NORMAL SPILL_1_GENERIC(ASI_AIUP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) #define SPILL_2_NORMAL SPILL_2_GENERIC(ASI_AIUP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) #define SPILL_3_NORMAL SPILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) #define SPILL_4_NORMAL SPILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) #define SPILL_5_NORMAL SPILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) #define SPILL_6_NORMAL SPILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) #define SPILL_7_NORMAL SPILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) #define SPILL_0_OTHER SPILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) #define SPILL_1_OTHER SPILL_1_GENERIC(ASI_AIUS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) #define SPILL_2_OTHER SPILL_2_GENERIC(ASI_AIUS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) #define SPILL_3_OTHER SPILL_3_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) #define SPILL_4_OTHER SPILL_4_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) #define SPILL_5_OTHER SPILL_5_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) #define SPILL_6_OTHER SPILL_6_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) #define SPILL_7_OTHER SPILL_7_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) /* Normal kernel fill */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) #define FILL_0_NORMAL					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 	ldx	[%sp + STACK_BIAS + 0x00], %l0;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 	ldx	[%sp + STACK_BIAS + 0x08], %l1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	ldx	[%sp + STACK_BIAS + 0x10], %l2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 	ldx	[%sp + STACK_BIAS + 0x18], %l3;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	ldx	[%sp + STACK_BIAS + 0x20], %l4;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	ldx	[%sp + STACK_BIAS + 0x28], %l5;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 	ldx	[%sp + STACK_BIAS + 0x30], %l6;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	ldx	[%sp + STACK_BIAS + 0x38], %l7;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 	ldx	[%sp + STACK_BIAS + 0x40], %i0;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	ldx	[%sp + STACK_BIAS + 0x48], %i1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	ldx	[%sp + STACK_BIAS + 0x50], %i2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 	ldx	[%sp + STACK_BIAS + 0x58], %i3;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	ldx	[%sp + STACK_BIAS + 0x60], %i4;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	ldx	[%sp + STACK_BIAS + 0x68], %i5;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	ldx	[%sp + STACK_BIAS + 0x70], %i6;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 	ldx	[%sp + STACK_BIAS + 0x78], %i7;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 	restored; retry; nop; nop; nop; nop; nop; nop;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	nop; nop; nop; nop; nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) #define FILL_0_NORMAL_RTRAP				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) kern_rtt_fill:						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 	rdpr	%cwp, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 	sub	%g1, 1, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 	wrpr	%g1, %cwp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 	ldx	[%sp + STACK_BIAS + 0x00], %l0;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 	ldx	[%sp + STACK_BIAS + 0x08], %l1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	ldx	[%sp + STACK_BIAS + 0x10], %l2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	ldx	[%sp + STACK_BIAS + 0x18], %l3;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 	ldx	[%sp + STACK_BIAS + 0x20], %l4;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 	ldx	[%sp + STACK_BIAS + 0x28], %l5;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	ldx	[%sp + STACK_BIAS + 0x30], %l6;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	ldx	[%sp + STACK_BIAS + 0x38], %l7;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	ldx	[%sp + STACK_BIAS + 0x40], %i0;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 	ldx	[%sp + STACK_BIAS + 0x48], %i1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 	ldx	[%sp + STACK_BIAS + 0x50], %i2;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	ldx	[%sp + STACK_BIAS + 0x58], %i3;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	ldx	[%sp + STACK_BIAS + 0x60], %i4;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	ldx	[%sp + STACK_BIAS + 0x68], %i5;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	ldx	[%sp + STACK_BIAS + 0x70], %i6;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	ldx	[%sp + STACK_BIAS + 0x78], %i7;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 	restored;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	add	%g1, 1, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 	ba,pt	%xcc, kern_rtt_restore;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	 wrpr	%g1, %cwp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 	nop; nop; nop; nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	nop; nop; nop; nop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) /* Normal 64bit fill */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) #define FILL_1_GENERIC(ASI)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	add	%sp, STACK_BIAS + 0x00, %g1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 	ldxa	[%g1 + %g0] ASI, %l0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 	mov	0x08, %g2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 	mov	0x10, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 	ldxa	[%g1 + %g2] ASI, %l1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 	mov	0x18, %g5;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 	ldxa	[%g1 + %g3] ASI, %l2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) 	ldxa	[%g1 + %g5] ASI, %l3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 	add	%g1, 0x20, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 	ldxa	[%g1 + %g0] ASI, %l4;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 	ldxa	[%g1 + %g2] ASI, %l5;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 	ldxa	[%g1 + %g3] ASI, %l6;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 	ldxa	[%g1 + %g5] ASI, %l7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 	add	%g1, 0x20, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 	ldxa	[%g1 + %g0] ASI, %i0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 	ldxa	[%g1 + %g2] ASI, %i1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) 	ldxa	[%g1 + %g3] ASI, %i2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 	ldxa	[%g1 + %g5] ASI, %i3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 	add	%g1, 0x20, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 	ldxa	[%g1 + %g0] ASI, %i4;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 	ldxa	[%g1 + %g2] ASI, %i5;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 	ldxa	[%g1 + %g3] ASI, %i6;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 	ldxa	[%g1 + %g5] ASI, %i7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) 	restored;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	retry; nop; nop; nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 	b,a,pt	%xcc, fill_fixup_dax;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	b,a,pt	%xcc, fill_fixup_mna;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 	b,a,pt	%xcc, fill_fixup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) #define FILL_1_GENERIC_RTRAP				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) user_rtt_fill_64bit:					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 	ldxa	[%sp + STACK_BIAS + 0x00] %asi, %l0;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	ldxa	[%sp + STACK_BIAS + 0x08] %asi, %l1;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 	ldxa	[%sp + STACK_BIAS + 0x10] %asi, %l2;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	ldxa	[%sp + STACK_BIAS + 0x18] %asi, %l3;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 	ldxa	[%sp + STACK_BIAS + 0x20] %asi, %l4;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 	ldxa	[%sp + STACK_BIAS + 0x28] %asi, %l5;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 	ldxa	[%sp + STACK_BIAS + 0x30] %asi, %l6;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 	ldxa	[%sp + STACK_BIAS + 0x38] %asi, %l7;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 	ldxa	[%sp + STACK_BIAS + 0x40] %asi, %i0;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 	ldxa	[%sp + STACK_BIAS + 0x48] %asi, %i1;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 	ldxa	[%sp + STACK_BIAS + 0x50] %asi, %i2;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 	ldxa	[%sp + STACK_BIAS + 0x58] %asi, %i3;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 	ldxa	[%sp + STACK_BIAS + 0x60] %asi, %i4;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 	ldxa	[%sp + STACK_BIAS + 0x68] %asi, %i5;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 	ldxa	[%sp + STACK_BIAS + 0x70] %asi, %i6;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 	ldxa	[%sp + STACK_BIAS + 0x78] %asi, %i7;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 	ba,pt	%xcc, user_rtt_pre_restore;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	 restored;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	nop; nop; nop; nop; nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 	nop; nop; nop; nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 	ba,a,pt	%xcc, user_rtt_fill_fixup_dax;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	ba,a,pt	%xcc, user_rtt_fill_fixup_mna;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 	ba,a,pt	%xcc, user_rtt_fill_fixup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) /* Normal 32bit fill */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) #define FILL_2_GENERIC(ASI)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	and	%sp, 1, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 	brnz,pn	%g3, (. - (128 + 4));			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 	 srl	%sp, 0, %sp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 	lduwa	[%sp + %g0] ASI, %l0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 	mov	0x04, %g2;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 	mov	0x08, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	lduwa	[%sp + %g2] ASI, %l1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 	mov	0x0c, %g5;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 	lduwa	[%sp + %g3] ASI, %l2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	lduwa	[%sp + %g5] ASI, %l3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 	add	%sp, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 	lduwa	[%g1 + %g0] ASI, %l4;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 	lduwa	[%g1 + %g2] ASI, %l5;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) 	lduwa	[%g1 + %g3] ASI, %l6;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) 	lduwa	[%g1 + %g5] ASI, %l7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) 	lduwa	[%g1 + %g0] ASI, %i0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) 	lduwa	[%g1 + %g2] ASI, %i1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) 	lduwa	[%g1 + %g3] ASI, %i2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) 	lduwa	[%g1 + %g5] ASI, %i3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 	add	%g1, 0x10, %g1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) 	lduwa	[%g1 + %g0] ASI, %i4;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) 	lduwa	[%g1 + %g2] ASI, %i5;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) 	lduwa	[%g1 + %g3] ASI, %i6;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) 	lduwa	[%g1 + %g5] ASI, %i7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) 	restored;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) 	retry; nop; nop;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) 	b,a,pt	%xcc, fill_fixup_dax;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 	b,a,pt	%xcc, fill_fixup_mna;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 	b,a,pt	%xcc, fill_fixup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) #define FILL_2_GENERIC_RTRAP				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) user_rtt_fill_32bit:					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) 	and	%sp, 1, %g3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) 	brnz,pn	%g3, user_rtt_fill_64bit;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 	 srl	%sp, 0, %sp;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	lduwa	[%sp + 0x00] %asi, %l0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 	lduwa	[%sp + 0x04] %asi, %l1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 	lduwa	[%sp + 0x08] %asi, %l2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 	lduwa	[%sp + 0x0c] %asi, %l3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 	lduwa	[%sp + 0x10] %asi, %l4;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) 	lduwa	[%sp + 0x14] %asi, %l5;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 	lduwa	[%sp + 0x18] %asi, %l6;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 	lduwa	[%sp + 0x1c] %asi, %l7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 	lduwa	[%sp + 0x20] %asi, %i0;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) 	lduwa	[%sp + 0x24] %asi, %i1;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 	lduwa	[%sp + 0x28] %asi, %i2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 	lduwa	[%sp + 0x2c] %asi, %i3;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 	lduwa	[%sp + 0x30] %asi, %i4;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 	lduwa	[%sp + 0x34] %asi, %i5;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 	lduwa	[%sp + 0x38] %asi, %i6;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 	lduwa	[%sp + 0x3c] %asi, %i7;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 	ba,pt	%xcc, user_rtt_pre_restore;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 	 restored;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 	nop; nop; nop; nop; nop;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) 	nop; nop; nop;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 	ba,a,pt	%xcc, user_rtt_fill_fixup_dax;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 	ba,a,pt	%xcc, user_rtt_fill_fixup_mna;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) 	ba,a,pt	%xcc, user_rtt_fill_fixup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) #define FILL_1_NORMAL FILL_1_GENERIC(ASI_AIUP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) #define FILL_2_NORMAL FILL_2_GENERIC(ASI_AIUP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) #define FILL_3_NORMAL FILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) #define FILL_4_NORMAL FILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) #define FILL_5_NORMAL FILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) #define FILL_6_NORMAL FILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) #define FILL_7_NORMAL FILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) #define FILL_0_OTHER FILL_0_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) #define FILL_1_OTHER FILL_1_GENERIC(ASI_AIUS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) #define FILL_2_OTHER FILL_2_GENERIC(ASI_AIUS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) #define FILL_3_OTHER FILL_3_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) #define FILL_4_OTHER FILL_4_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) #define FILL_5_OTHER FILL_5_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) #define FILL_6_OTHER FILL_6_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) #define FILL_7_OTHER FILL_7_NORMAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) #endif /* !(_SPARC64_TTABLE_H) */