|
@@ -372,7 +372,9 @@ etrap_spill_fixup_64bit: \
|
|
|
|
|
|
/* Normal 32bit spill */
|
|
|
#define SPILL_2_GENERIC(ASI) \
|
|
|
- srl %sp, 0, %sp; \
|
|
|
+ and %sp, 1, %g3; \
|
|
|
+ brnz,pn %g3, (. - (128 + 4)); \
|
|
|
+ srl %sp, 0, %sp; \
|
|
|
stwa %l0, [%sp + %g0] ASI; \
|
|
|
mov 0x04, %g3; \
|
|
|
stwa %l1, [%sp + %g3] ASI; \
|
|
@@ -398,14 +400,16 @@ etrap_spill_fixup_64bit: \
|
|
|
stwa %i6, [%g1 + %g0] ASI; \
|
|
|
stwa %i7, [%g1 + %g3] ASI; \
|
|
|
saved; \
|
|
|
- retry; nop; nop; \
|
|
|
+ retry; \
|
|
|
b,a,pt %xcc, spill_fixup_dax; \
|
|
|
b,a,pt %xcc, spill_fixup_mna; \
|
|
|
b,a,pt %xcc, spill_fixup;
|
|
|
|
|
|
#define SPILL_2_GENERIC_ETRAP \
|
|
|
etrap_user_spill_32bit: \
|
|
|
- srl %sp, 0, %sp; \
|
|
|
+ and %sp, 1, %g3; \
|
|
|
+ brnz,pn %g3, etrap_user_spill_64bit; \
|
|
|
+ srl %sp, 0, %sp; \
|
|
|
stwa %l0, [%sp + 0x00] %asi; \
|
|
|
stwa %l1, [%sp + 0x04] %asi; \
|
|
|
stwa %l2, [%sp + 0x08] %asi; \
|
|
@@ -427,7 +431,7 @@ etrap_user_spill_32bit: \
|
|
|
ba,pt %xcc, etrap_save; \
|
|
|
wrpr %g1, %cwp; \
|
|
|
nop; nop; nop; nop; \
|
|
|
- nop; nop; nop; nop; \
|
|
|
+ nop; nop; \
|
|
|
ba,a,pt %xcc, etrap_spill_fixup_32bit; \
|
|
|
ba,a,pt %xcc, etrap_spill_fixup_32bit; \
|
|
|
ba,a,pt %xcc, etrap_spill_fixup_32bit;
|
|
@@ -592,7 +596,9 @@ user_rtt_fill_64bit: \
|
|
|
|
|
|
/* Normal 32bit fill */
|
|
|
#define FILL_2_GENERIC(ASI) \
|
|
|
- srl %sp, 0, %sp; \
|
|
|
+ and %sp, 1, %g3; \
|
|
|
+ brnz,pn %g3, (. - (128 + 4)); \
|
|
|
+ srl %sp, 0, %sp; \
|
|
|
lduwa [%sp + %g0] ASI, %l0; \
|
|
|
mov 0x04, %g2; \
|
|
|
mov 0x08, %g3; \
|
|
@@ -616,14 +622,16 @@ user_rtt_fill_64bit: \
|
|
|
lduwa [%g1 + %g3] ASI, %i6; \
|
|
|
lduwa [%g1 + %g5] ASI, %i7; \
|
|
|
restored; \
|
|
|
- retry; nop; nop; nop; nop; \
|
|
|
+ retry; nop; nop; \
|
|
|
b,a,pt %xcc, fill_fixup_dax; \
|
|
|
b,a,pt %xcc, fill_fixup_mna; \
|
|
|
b,a,pt %xcc, fill_fixup;
|
|
|
|
|
|
#define FILL_2_GENERIC_RTRAP \
|
|
|
user_rtt_fill_32bit: \
|
|
|
- srl %sp, 0, %sp; \
|
|
|
+ and %sp, 1, %g3; \
|
|
|
+ brnz,pn %g3, user_rtt_fill_64bit; \
|
|
|
+ srl %sp, 0, %sp; \
|
|
|
lduwa [%sp + 0x00] %asi, %l0; \
|
|
|
lduwa [%sp + 0x04] %asi, %l1; \
|
|
|
lduwa [%sp + 0x08] %asi, %l2; \
|
|
@@ -643,7 +651,7 @@ user_rtt_fill_32bit: \
|
|
|
ba,pt %xcc, user_rtt_pre_restore; \
|
|
|
restored; \
|
|
|
nop; nop; nop; nop; nop; \
|
|
|
- nop; nop; nop; nop; nop; \
|
|
|
+ nop; nop; nop; \
|
|
|
ba,a,pt %xcc, user_rtt_fill_fixup; \
|
|
|
ba,a,pt %xcc, user_rtt_fill_fixup; \
|
|
|
ba,a,pt %xcc, user_rtt_fill_fixup;
|