[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XenPPC] [pushed] [ppc] FPSCR and XER are really 64 bit quantities



changeset:   9950:249f22f51bb31148f896be0c7e85618b20f8c5fd
tag:         tip
user:        jimix@xxxxxxxxxxxxxxxxxxxxx
date:        Tue Apr 25 15:04:52 2006 -0400
files:       xen/arch/ppc/float.S xen/arch/ppc/gdbstub.c 
xen/arch/ppc/ppc64/exceptions.S xen/include/public/arch-ppc64.h
description:
[ppc] FPSCR and XER are really 64 bit quantities
  - FPSCR should be save/restored with stfd/lfd since the 32 bit form
    can mangle the value.
  - XER is architecturally a 64bit register.


diff -r 7f3bdb114f0a2407e7ef47046683265561189e3f -r 
249f22f51bb31148f896be0c7e85618b20f8c5fd xen/arch/ppc/float.S
--- a/xen/arch/ppc/float.S      Tue Apr 18 14:53:00 2006 -0400
+++ b/xen/arch/ppc/float.S      Tue Apr 25 15:04:52 2006 -0400
@@ -58,11 +58,11 @@ save_fp:
        stfdu   fr30,FPR_WIDTH(r4)
        stfdu   fr31,FPR_WIDTH(r4)
        mffs    fr0
-       stfs    fr0,VCPU_fpscr(r3)
+       stfd    fr0,VCPU_fpscr(r3)
        blr
 
 load_fp:
-       lfs     fr0,VCPU_fpscr(r3)
+       lfd     fr0,VCPU_fpscr(r3)
        mtfsf   0xff,fr0
 
        addi    r4, r3, VCPU_fprs - FPR_WIDTH
diff -r 7f3bdb114f0a2407e7ef47046683265561189e3f -r 
249f22f51bb31148f896be0c7e85618b20f8c5fd xen/arch/ppc/gdbstub.c
--- a/xen/arch/ppc/gdbstub.c    Tue Apr 18 14:53:00 2006 -0400
+++ b/xen/arch/ppc/gdbstub.c    Tue Apr 25 15:04:52 2006 -0400
@@ -124,7 +124,7 @@ gdb_arch_read_reg_array(struct cpu_user_
     gdb_write_to_packet_hex(state->cr, sizeof (state->cr), ctx);
     gdb_write_to_packet_hex(state->lr, sizeof (state->lr), ctx);
     gdb_write_to_packet_hex(state->ctr, sizeof (state->ctr), ctx);
-    gdb_write_to_packet_hex(state->xer, sizeof (state->xer), ctx);
+    gdb_write_to_packet_hex(state->xer, sizeof (u32), ctx);
     gdb_write_to_packet_hex(0, sizeof(u32), ctx); /* fpscr */
     gdb_send_packet(ctx);
 }
@@ -154,8 +154,8 @@ gdb_arch_write_reg_array(struct cpu_user
     buf += sizeof (regs->lr) * 2;
     regs->ctr = str2ulong(buf, sizeof (regs->ctr));
     buf += sizeof (regs->ctr) * 2;
-    regs->xer = str2ulong(buf, sizeof (regs->xer));
-    buf += sizeof (regs->xer) * 2;
+    regs->xer = str2ulong(buf, sizeof (u32));
+    buf += sizeof (u32) * 2;
 }
 
 unsigned int
@@ -182,7 +182,7 @@ gdb_arch_print_state(struct cpu_user_reg
     /* XXX
        printk("DAR: 0x%016lx DSISR: 0x%016lx\n", state->dar, state->dsisr);
        */
-    printk("CR: 0x%08x XER: 0x%08x\n", state->cr, state->xer);
+    printk("CR: 0x%08x XER: 0x%016x\n", state->cr, state->xer);
     for (; i < 32; i+=4) {
         printk("%02d: 0x%016lx 0x%016lx 0x%016lx 0x%016lx\n",
                 i, state->gprs[i], state->gprs[i+1],
diff -r 7f3bdb114f0a2407e7ef47046683265561189e3f -r 
249f22f51bb31148f896be0c7e85618b20f8c5fd xen/arch/ppc/ppc64/exceptions.S
--- a/xen/arch/ppc/ppc64/exceptions.S   Tue Apr 18 14:53:00 2006 -0400
+++ b/xen/arch/ppc/ppc64/exceptions.S   Tue Apr 25 15:04:52 2006 -0400
@@ -72,13 +72,13 @@ 1:
     mflr r0
     std r0, UREGS_lr(\uregs)        /* save LR */
     mfxer r0
-    stw r0, UREGS_xer(\uregs)       /* save XER */
+    std r0, UREGS_xer(\uregs)       /* save XER */
 .endm
 
 .macro LOAD_C_STATE uregs
     ld r0, UREGS_lr(\uregs)         /* load LR */
     mtlr r0
-    lwz r0, UREGS_xer(\uregs)       /* load XER */
+    ld r0, UREGS_xer(\uregs)       /* load XER */
     mtxer r0
     lwz r0, UREGS_cr(\uregs)        /* load CR */
     mtcr r0
diff -r 7f3bdb114f0a2407e7ef47046683265561189e3f -r 
249f22f51bb31148f896be0c7e85618b20f8c5fd xen/include/public/arch-ppc64.h
--- a/xen/include/public/arch-ppc64.h   Tue Apr 18 14:53:00 2006 -0400
+++ b/xen/include/public/arch-ppc64.h   Tue Apr 25 15:04:52 2006 -0400
@@ -71,9 +71,9 @@ typedef struct cpu_user_regs
     uint64_t srr1;
     uint64_t pc;
     uint64_t msr;
-    uint32_t fpscr;
+    uint64_t fpscr;
+    uint64_t xer;
     uint32_t cr;
-    uint32_t xer;
     uint32_t entry_vector;
 } cpu_user_regs_t;
 



_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.