diff options
Diffstat (limited to 'arch/ia64/kernel/pal.S')
-rw-r--r-- | arch/ia64/kernel/pal.S | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/ia64/kernel/pal.S b/arch/ia64/kernel/pal.S index 0b07163dc..2e56a428e 100644 --- a/arch/ia64/kernel/pal.S +++ b/arch/ia64/kernel/pal.S @@ -54,7 +54,8 @@ END(ia64_pal_default_handler) * * in0 Pointer to struct ia64_pal_retval * in1 Index of PAL service - * in2 - in4 Remaning PAL arguments + * in2 - in4 Remaining PAL arguments + * in5 1 ==> clear psr.ic, 0 ==> don't clear psr.ic * */ GLOBAL_ENTRY(ia64_pal_call_static) @@ -68,18 +69,22 @@ GLOBAL_ENTRY(ia64_pal_call_static) } ;; ld8 loc2 = [loc2] // loc2 <- entry point - mov r30 = in2 - mov r31 = in3 + tbit.nz p6,p7 = in5, 0 + adds r8 = 1f-1b,r8 ;; mov loc3 = psr mov loc0 = rp UNW(.body) - adds r8 = 1f-1b,r8 - ;; - rsm psr.i + mov r30 = in2 + +(p6) rsm psr.i | psr.ic + mov r31 = in3 mov b7 = loc2 + +(p7) rsm psr.i + ;; +(p6) srlz.i mov rp = r8 - ;; br.cond.sptk.few b7 1: mov psr.l = loc3 mov ar.pfs = loc1 |