summaryrefslogtreecommitdiff
path: root/arch/ia64/kernel/pal.S
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-08-04 07:15:56 -0400
committerJeff Garzik <jeff@garzik.org>2006-08-04 07:15:56 -0400
commit6bbad18a8b18228fa65d73547dfd5efad1515ef8 (patch)
tree193e53bc0fa0b01c3c0fab4d3eda23ce84bb1154 /arch/ia64/kernel/pal.S
parentfe2a24dfc577a05349a39c6c8a6312818d28bb59 (diff)
parentefe78cda3596f8a6d1c2d4a6b1a221bafa3e1a48 (diff)
Merge branch 'master' into upstream
Diffstat (limited to 'arch/ia64/kernel/pal.S')
-rw-r--r--arch/ia64/kernel/pal.S18
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)
.body
;;
ld8 loc2 = [loc2] // loc2 <- entry point
- mov out0 = in0 // first argument
- mov out1 = in1 // copy arg2
- mov out2 = in2 // copy arg3
- mov out3 = in3 // copy arg3
- ;;
- mov loc3 = psr // save psr
+ mov loc3 = psr // save psr
;;
mov loc4=ar.rsc // save RSE configuration
dep.z loc2=loc2,0,61 // convert pal entry point to physical
@@ -236,18 +231,23 @@ GLOBAL_ENTRY(ia64_pal_call_phys_stacked)
;;
andcm r16=loc3,r16 // removes bits to clear from psr
br.call.sptk.many rp=ia64_switch_mode_phys
-.ret6:
+
+ mov out0 = in0 // first argument
+ mov out1 = in1 // copy arg2
+ mov out2 = in2 // copy arg3
+ mov out3 = in3 // copy arg3
mov loc5 = r19
mov loc6 = r20
+
br.call.sptk.many rp=b7 // now make the call
-.ret7:
+
mov ar.rsc=0 // put RSE in enforced lazy, LE mode
mov r16=loc3 // r16= original psr
mov r19=loc5
mov r20=loc6
br.call.sptk.many rp=ia64_switch_mode_virt // return to virtual mode
-.ret8: mov psr.l = loc3 // restore init PSR
+ mov psr.l = loc3 // restore init PSR
mov ar.pfs = loc1
mov rp = loc0
;;