[pypy-svn] r34099 - pypy/dist/pypy/translator/asm/ppcgen

niko at codespeak.net niko at codespeak.net
Fri Nov 3 14:13:43 CET 2006


Author: niko
Date: Fri Nov  3 14:13:42 2006
New Revision: 34099

Modified:
   pypy/dist/pypy/translator/asm/ppcgen/ppc_assembler.py
Log:
(mwh, niko)

Fix computation of 32bit constants on PPC... precedence error.



Modified: pypy/dist/pypy/translator/asm/ppcgen/ppc_assembler.py
==============================================================================
--- pypy/dist/pypy/translator/asm/ppcgen/ppc_assembler.py	(original)
+++ pypy/dist/pypy/translator/asm/ppcgen/ppc_assembler.py	Fri Nov  3 14:13:42 2006
@@ -778,20 +778,26 @@
 
 def ha(w):
     if (w >> 15) & 1:
-        return w >> 16 + 1
+        return (w >> 16) + 1
     else:
         return w >> 16
 
 def lo(w):
     return w & 0x0000FFFF
 
+def la(w):
+    v = w & 0x0000FFFF
+    if v & 0x8000:
+        return -((v ^ 0xFFFF) + 1) # "sign extend" to 32 bits
+    return v
+
 class MyPPCAssembler(PPCAssembler):
     def load_word(self, rD, word):
         self.addis(rD, 0, hi(word))
         self.ori(rD, rD, lo(word))
     def load_from(self, rD, addr):
         self.addis(rD, 0, ha(addr))
-        self.lwz(rD, rD, lo(addr))
+        self.lwz(rD, rD, la(addr))
 
 def b(n):
     r = []



More information about the Pypy-commit mailing list