diff options
| -rw-r--r-- | arch/ia64/kernel/pal.S | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/arch/ia64/kernel/pal.S b/arch/ia64/kernel/pal.S index 5018c7f2e7a8..ebaf1e685f5e 100644 --- a/arch/ia64/kernel/pal.S +++ b/arch/ia64/kernel/pal.S | |||
| @@ -217,12 +217,7 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 217 | .body | 217 | .body |
| 218 | ;; | 218 | ;; |
| 219 | ld8 loc2 = [loc2] // loc2 <- entry point | 219 | ld8 loc2 = [loc2] // loc2 <- entry point |
| 220 | mov out0 = in0 // first argument | 220 | mov loc3 = psr // save psr |
| 221 | mov out1 = in1 // copy arg2 | ||
| 222 | mov out2 = in2 // copy arg3 | ||
| 223 | mov out3 = in3 // copy arg3 | ||
| 224 | ;; | ||
| 225 | mov loc3 = psr // save psr | ||
| 226 | ;; | 221 | ;; |
| 227 | mov loc4=ar.rsc // save RSE configuration | 222 | mov loc4=ar.rsc // save RSE configuration |
| 228 | dep.z loc2=loc2,0,61 // convert pal entry point to physical | 223 | dep.z loc2=loc2,0,61 // convert pal entry point to physical |
| @@ -236,18 +231,23 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked) | |||
| 236 | ;; | 231 | ;; |
| 237 | andcm r16=loc3,r16 // removes bits to clear from psr | 232 | andcm r16=loc3,r16 // removes bits to clear from psr |
| 238 | br.call.sptk.many rp=ia64_switch_mode_phys | 233 | br.call.sptk.many rp=ia64_switch_mode_phys |
| 239 | .ret6: | 234 | |
| 235 | mov out0 = in0 // first argument | ||
| 236 | mov out1 = in1 // copy arg2 | ||
| 237 | mov out2 = in2 // copy arg3 | ||
| 238 | mov out3 = in3 // copy arg3 | ||
| 240 | mov loc5 = r19 | 239 | mov loc5 = r19 |
| 241 | mov loc6 = r20 | 240 | mov loc6 = r20 |
| 241 | |||
| 242 | br.call.sptk.many rp=b7 // now make the call | 242 | br.call.sptk.many rp=b7 // now make the call |
| 243 | .ret7: | 243 | |
| 244 | mov ar.rsc=0 // put RSE in enforced lazy, LE mode | 244 | mov ar.rsc=0 // put RSE in enforced lazy, LE mode |
| 245 | mov r16=loc3 // r16= original psr | 245 | mov r16=loc3 // r16= original psr |
| 246 | mov r19=loc5 | 246 | mov r19=loc5 |
| 247 | mov r20=loc6 | 247 | mov r20=loc6 |
| 248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode | 248 | br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode |
| 249 | 249 | ||
| 250 | .ret8: mov psr.l = loc3 // restore init PSR | 250 | mov psr.l = loc3 // restore init PSR |
| 251 | mov ar.pfs = loc1 | 251 | mov ar.pfs = loc1 |
| 252 | mov rp = loc0 | 252 | mov rp = loc0 |
| 253 | ;; | 253 | ;; |
