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: |