Rev 916 | Rev 921 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 916 | Rev 919 | ||
---|---|---|---|
Line 134... | Line 134... | ||
134 | 134 | ||
135 | st8 [r31] = r24, -8 ;; /* save ar.rsc */ |
135 | st8 [r31] = r24, -8 ;; /* save ar.rsc */ |
136 | st8 [r31] = r25, -8 ;; /* save ar.pfs */ |
136 | st8 [r31] = r25, -8 ;; /* save ar.pfs */ |
137 | st8 [r31] = r26, -8 /* save ar.ifs */ |
137 | st8 [r31] = r26, -8 /* save ar.ifs */ |
138 | 138 | ||
- | 139 | and r24 = ~(RSC_PL_MASK), r24 ;; |
|
139 | and r30 = ~3, r24 ;; |
140 | and r30 = ~(RSC_MODE_MASK), r24 ;; |
140 | mov ar.rsc = r30 ;; /* place RSE in enforced lazy mode */ |
141 | mov ar.rsc = r30 ;; /* update RSE state */ |
141 | 142 | ||
142 | mov r27 = ar.rnat |
143 | mov r27 = ar.rnat |
143 | mov r28 = ar.bspstore ;; |
144 | mov r28 = ar.bspstore ;; |
144 | 145 | ||
145 | /* |
146 | /* |
Line 160... | Line 161... | ||
160 | st8 [r31] = r27, -8 ;; /* save ar.rnat */ |
161 | st8 [r31] = r27, -8 ;; /* save ar.rnat */ |
161 | st8 [r31] = r30, -8 ;; /* save new value written to ar.bspstore */ |
162 | st8 [r31] = r30, -8 ;; /* save new value written to ar.bspstore */ |
162 | st8 [r31] = r28, -8 ;; /* save ar.bspstore */ |
163 | st8 [r31] = r28, -8 ;; /* save ar.bspstore */ |
163 | st8 [r31] = r29, -8 /* save ar.bsp */ |
164 | st8 [r31] = r29, -8 /* save ar.bsp */ |
164 | 165 | ||
165 | mov ar.rsc = r24 /* restore RSE's setting */ |
166 | mov ar.rsc = r24 /* restore RSE's setting + kernel privileges */ |
166 | 167 | ||
167 | /* steps 6 - 15 are done by heavyweight_handler_inner() */ |
168 | /* steps 6 - 15 are done by heavyweight_handler_inner() */ |
168 | mov R_RET = b0 /* save b0 belonging to interrupted context */ |
169 | mov R_RET = b0 /* save b0 belonging to interrupted context */ |
169 | br.call.sptk.many b0 = heavyweight_handler_inner |
170 | br.call.sptk.many b0 = heavyweight_handler_inner |
170 | 0: mov b0 = R_RET /* restore b0 belonging to the interrupted context */ |
171 | 0: mov b0 = R_RET /* restore b0 belonging to the interrupted context */ |
Line 298... | Line 299... | ||
298 | * ;; |
299 | * ;; |
299 | * srlz.d |
300 | * srlz.d |
300 | */ |
301 | */ |
301 | 302 | ||
302 | /* 10. call handler */ |
303 | /* 10. call handler */ |
- | 304 | movl r1 = _hardcoded_load_address |
|
- | 305 | ||
303 | mov b1 = loc2 |
306 | mov b1 = loc2 |
304 | br.call.sptk.many b0 = b1 |
307 | br.call.sptk.many b0 = b1 |
305 | 308 | ||
306 | /* 11. return from handler */ |
309 | /* 11. return from handler */ |
307 | 0: |
310 | 0: |