# HG changeset patch
# User gingold@xxxxxxxxxxxxxxxxxxxxx
# Date 1171529948 -3600
# Node ID bf91ad7f63dd4f44403c3b00b4678d2dd1ef1e51
# Parent  fbc233a1dc53dd0928fb8c0062d6582ef210950d
Handle stacked convention.

Signed-off-by: Tristan Gingold <tgingold@xxxxxxx>

diff -r fbc233a1dc53 -r bf91ad7f63dd xen/arch/ia64/vmx/pal_emul.c
--- a/xen/arch/ia64/vmx/pal_emul.c	Wed Feb 07 10:46:18 2007 -0700
+++ b/xen/arch/ia64/vmx/pal_emul.c	Thu Feb 15 09:59:08 2007 +0100
@@ -30,15 +30,18 @@ pal_emul(struct vcpu *vcpu)
 	u64 gr28, gr29, gr30, gr31;
 	struct ia64_pal_retval result;
 
+	perfc_incrc(vmx_pal_emul);
+
 	vcpu_get_gr_nat(vcpu, 28, &gr28);  //bank1
 
-	/* FIXME: works only for static calling convention ?  */
-	vcpu_get_gr_nat(vcpu, 29, &gr29);
-	vcpu_get_gr_nat(vcpu, 30, &gr30); 
-	vcpu_get_gr_nat(vcpu, 31, &gr31);
-
-	perfc_incrc(vmx_pal_emul);
-	result = xen_pal_emulator(gr28, gr29, gr30, gr31);
+	if (gr28 >= PAL_COPY_PAL)
+		result = xen_pal_emulator
+			(gr28, vcpu_get_gr (vcpu, 33),
+			 vcpu_get_gr (vcpu, 34), vcpu_get_gr (vcpu, 35));
+	else
+		result = xen_pal_emulator
+			(gr28, vcpu_get_gr(vcpu, 29),
+			 vcpu_get_gr(vcpu, 30), vcpu_get_gr(vcpu, 31));
 
 	vcpu_set_gr(vcpu, 8, result.status, 0);
 	vcpu_set_gr(vcpu, 9, result.v0, 0);