Rev 1854 | Rev 1860 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1854 | Rev 1856 | ||
---|---|---|---|
Line 39... | Line 39... | ||
39 | 39 | ||
40 | #include <arch/stack.h> |
40 | #include <arch/stack.h> |
41 | #include <arch/arch.h> |
41 | #include <arch/arch.h> |
42 | 42 | ||
43 | #define TT_CLEAN_WINDOW 0x24 |
43 | #define TT_CLEAN_WINDOW 0x24 |
44 | #define TT_SPILL_0_NORMAL 0x80 |
44 | #define TT_SPILL_0_NORMAL 0x80 /* kernel spills */ |
- | 45 | #define TT_SPILL_1_NORMAL 0x84 /* userspace spills */ |
|
- | 46 | #define TT_SPILL_2_NORMAL 0x88 /* spills to userspace window buffer */ |
|
- | 47 | #define TT_SPILL_0_OTHER 0xa0 /* spills to userspace window buffer */ |
|
45 | #define TT_FILL_0_NORMAL 0xc0 |
48 | #define TT_FILL_0_NORMAL 0xc0 /* kernel fills */ |
- | 49 | #define TT_FILL_1_NORMAL 0xc4 /* userspace fills */ |
|
46 | 50 | ||
47 | #define REGWIN_HANDLER_SIZE 128 |
51 | #define REGWIN_HANDLER_SIZE 128 |
48 | 52 | ||
49 | #define CLEAN_WINDOW_HANDLER_SIZE REGWIN_HANDLER_SIZE |
53 | #define CLEAN_WINDOW_HANDLER_SIZE REGWIN_HANDLER_SIZE |
50 | #define SPILL_HANDLER_SIZE REGWIN_HANDLER_SIZE |
54 | #define SPILL_HANDLER_SIZE REGWIN_HANDLER_SIZE |
Line 96... | Line 100... | ||
96 | 100 | ||
97 | /* |
101 | /* |
98 | * Macro used by the userspace during normal spills. |
102 | * Macro used by the userspace during normal spills. |
99 | */ |
103 | */ |
100 | .macro SPILL_NORMAL_HANDLER_USERSPACE |
104 | .macro SPILL_NORMAL_HANDLER_USERSPACE |
101 | wr ASI_AIUP, %asi |
105 | wr %g0, ASI_AIUP, %asi |
102 | stxa %l0, [%sp + STACK_BIAS + L0_OFFSET] %asi |
106 | stxa %l0, [%sp + STACK_BIAS + L0_OFFSET] %asi |
103 | stxa %l1, [%sp + STACK_BIAS + L1_OFFSET] %asi |
107 | stxa %l1, [%sp + STACK_BIAS + L1_OFFSET] %asi |
104 | stxa %l2, [%sp + STACK_BIAS + L2_OFFSET] %asi |
108 | stxa %l2, [%sp + STACK_BIAS + L2_OFFSET] %asi |
105 | stxa %l3, [%sp + STACK_BIAS + L3_OFFSET] %asi |
109 | stxa %l3, [%sp + STACK_BIAS + L3_OFFSET] %asi |
106 | stxa %l4, [%sp + STACK_BIAS + L4_OFFSET] %asi |
110 | stxa %l4, [%sp + STACK_BIAS + L4_OFFSET] %asi |
Line 118... | Line 122... | ||
118 | saved |
122 | saved |
119 | retry |
123 | retry |
120 | .endm |
124 | .endm |
121 | 125 | ||
122 | /* |
126 | /* |
123 | * Macro used by the userspace during other spills. |
127 | * Macro used to spill userspace window to userspace window buffer. |
- | 128 | * It can be either triggered from preemptible_handler doing SAVE |
|
- | 129 | * at (TL=1) or from normal kernel code doing SAVE when OTHERWIN>0 |
|
- | 130 | * at (TL=0). |
|
124 | */ |
131 | */ |
125 | .macro SPILL_OTHER_HANDLER_USERSPACE |
132 | .macro SPILL_TO_USPACE_WINDOW_BUFFER |
126 | wr ASI_AIUS, %asi |
- | |
127 | stxa %l0, [%sp + STACK_BIAS + L0_OFFSET] %asi |
133 | stx %l0, [%g7 + L0_OFFSET] |
128 | stxa %l1, [%sp + STACK_BIAS + L1_OFFSET] %asi |
134 | stx %l1, [%g7 + L1_OFFSET] |
129 | stxa %l2, [%sp + STACK_BIAS + L2_OFFSET] %asi |
135 | stx %l2, [%g7 + L2_OFFSET] |
130 | stxa %l3, [%sp + STACK_BIAS + L3_OFFSET] %asi |
136 | stx %l3, [%g7 + L3_OFFSET] |
131 | stxa %l4, [%sp + STACK_BIAS + L4_OFFSET] %asi |
137 | stx %l4, [%g7 + L4_OFFSET] |
132 | stxa %l5, [%sp + STACK_BIAS + L5_OFFSET] %asi |
138 | stx %l5, [%g7 + L5_OFFSET] |
133 | stxa %l6, [%sp + STACK_BIAS + L6_OFFSET] %asi |
139 | stx %l6, [%g7 + L6_OFFSET] |
134 | stxa %l7, [%sp + STACK_BIAS + L7_OFFSET] %asi |
140 | stx %l7, [%g7 + L7_OFFSET] |
135 | stxa %i0, [%sp + STACK_BIAS + I0_OFFSET] %asi |
141 | stx %i0, [%g7 + I0_OFFSET] |
136 | stxa %i1, [%sp + STACK_BIAS + I1_OFFSET] %asi |
142 | stx %i1, [%g7 + I1_OFFSET] |
137 | stxa %i2, [%sp + STACK_BIAS + I2_OFFSET] %asi |
143 | stx %i2, [%g7 + I2_OFFSET] |
138 | stxa %i3, [%sp + STACK_BIAS + I3_OFFSET] %asi |
144 | stx %i3, [%g7 + I3_OFFSET] |
139 | stxa %i4, [%sp + STACK_BIAS + I4_OFFSET] %asi |
145 | stx %i4, [%g7 + I4_OFFSET] |
140 | stxa %i5, [%sp + STACK_BIAS + I5_OFFSET] %asi |
146 | stx %i5, [%g7 + I5_OFFSET] |
141 | stxa %i6, [%sp + STACK_BIAS + I6_OFFSET] %asi |
147 | stx %i6, [%g7 + I6_OFFSET] |
142 | stxa %i7, [%sp + STACK_BIAS + I7_OFFSET] %asi |
148 | stx %i7, [%g7 + I7_OFFSET] |
- | 149 | add %g7, STACK_WINDOW_SAVE_AREA_SIZE, %g7 |
|
143 | saved |
150 | saved |
144 | retry |
151 | retry |
145 | .endm |
152 | .endm |
146 | 153 | ||
147 | 154 | ||
Line 171... | Line 178... | ||
171 | 178 | ||
172 | /* |
179 | /* |
173 | * Macro used by the userspace during normal fills. |
180 | * Macro used by the userspace during normal fills. |
174 | */ |
181 | */ |
175 | .macro FILL_NORMAL_HANDLER_USERSPACE |
182 | .macro FILL_NORMAL_HANDLER_USERSPACE |
176 | wr ASI_AIUP, %asi |
183 | wr %g0, ASI_AIUP, %asi |
177 | ldxa [%sp + STACK_BIAS + L0_OFFSET] %asi, %l0 |
- | |
178 | ldxa [%sp + STACK_BIAS + L1_OFFSET] %asi, %l1 |
- | |
179 | ldxa [%sp + STACK_BIAS + L2_OFFSET] %asi, %l2 |
- | |
180 | ldxa [%sp + STACK_BIAS + L3_OFFSET] %asi, %l3 |
- | |
181 | ldxa [%sp + STACK_BIAS + L4_OFFSET] %asi, %l4 |
- | |
182 | ldxa [%sp + STACK_BIAS + L5_OFFSET] %asi, %l5 |
- | |
183 | ldxa [%sp + STACK_BIAS + L6_OFFSET] %asi, %l6 |
- | |
184 | ldxa [%sp + STACK_BIAS + L7_OFFSET] %asi, %l7 |
- | |
185 | ldxa [%sp + STACK_BIAS + I0_OFFSET] %asi, %i0 |
- | |
186 | ldxa [%sp + STACK_BIAS + I1_OFFSET] %asi, %i1 |
- | |
187 | ldxa [%sp + STACK_BIAS + I2_OFFSET] %asi, %i2 |
- | |
188 | ldxa [%sp + STACK_BIAS + I3_OFFSET] %asi, %i3 |
- | |
189 | ldxa [%sp + STACK_BIAS + I4_OFFSET] %asi, %i4 |
- | |
190 | ldxa [%sp + STACK_BIAS + I5_OFFSET] %asi, %i5 |
- | |
191 | ldxa [%sp + STACK_BIAS + I6_OFFSET] %asi, %i6 |
- | |
192 | ldxa [%sp + STACK_BIAS + I7_OFFSET] %asi, %i7 |
- | |
193 | restored |
- | |
194 | retry |
- | |
195 | .endm |
- | |
196 | - | ||
197 | /* |
- | |
198 | * Macro used by the userspace during other fills. |
- | |
199 | */ |
- | |
200 | .macro FILL_OTHER_HANDLER_USERSPACE |
- | |
201 | wr ASI_AIUS, %asi |
- | |
202 | ldxa [%sp + STACK_BIAS + L0_OFFSET] %asi, %l0 |
184 | ldxa [%sp + STACK_BIAS + L0_OFFSET] %asi, %l0 |
203 | ldxa [%sp + STACK_BIAS + L1_OFFSET] %asi, %l1 |
185 | ldxa [%sp + STACK_BIAS + L1_OFFSET] %asi, %l1 |
204 | ldxa [%sp + STACK_BIAS + L2_OFFSET] %asi, %l2 |
186 | ldxa [%sp + STACK_BIAS + L2_OFFSET] %asi, %l2 |
205 | ldxa [%sp + STACK_BIAS + L3_OFFSET] %asi, %l3 |
187 | ldxa [%sp + STACK_BIAS + L3_OFFSET] %asi, %l3 |
206 | ldxa [%sp + STACK_BIAS + L4_OFFSET] %asi, %l4 |
188 | ldxa [%sp + STACK_BIAS + L4_OFFSET] %asi, %l4 |