[pypy-svn] r74795 - pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86

jcreigh at codespeak.net jcreigh at codespeak.net
Wed May 26 23:01:24 CEST 2010


Author: jcreigh
Date: Wed May 26 23:01:22 2010
New Revision: 74795

Modified:
   pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py
   pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py
Log:
fix some annotation errors

Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py	Wed May 26 23:01:22 2010
@@ -124,8 +124,8 @@
         self.fail_boxes_ptr = values_array(llmemory.GCREF, failargs_limit)
         self.fail_boxes_float = values_array(lltype.Float, failargs_limit)
         self.fail_ebp = 0
-        self.loc_float_const_neg = None
-        self.loc_float_const_abs = None
+        self.float_const_neg_addr = 0
+        self.float_const_abs_addr = 0
         self.malloc_fixedsize_slowpath1 = 0
         self.malloc_fixedsize_slowpath2 = 0
         self.setup_failure_recovery()
@@ -193,8 +193,8 @@
         addr[5] = 2147483647       # / for abs
         addr[6] = 0                #
         addr[7] = 0                #
-        self.loc_float_const_neg = float_constants
-        self.loc_float_const_abs = float_constants + 16
+        self.float_const_neg_addr = float_constants
+        self.float_const_abs_addr = float_constants + 16
 
     def _build_malloc_fixedsize_slowpath(self):
         mc = self.mc2._mc
@@ -696,11 +696,11 @@
 
     def genop_float_neg(self, op, arglocs, resloc):
         # Following what gcc does: res = x ^ 0x8000000000000000
-        self.mc.XORPD_xj(arglocs[0].value, self.loc_float_const_neg)
+        self.mc.XORPD_xj(arglocs[0].value, self.float_const_neg_addr)
 
     def genop_float_abs(self, op, arglocs, resloc):
         # Following what gcc does: res = x & 0x7FFFFFFFFFFFFFFF
-        self.mc.ANDPD_xj(arglocs[0].value, self.loc_float_const_abs)
+        self.mc.ANDPD_xj(arglocs[0].value, self.float_const_abs_addr)
 
     def genop_guard_float_is_true(self, op, guard_op, addr, arglocs, resloc):
         guard_opnum = guard_op.opnum

Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py	(original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py	Wed May 26 23:01:22 2010
@@ -134,13 +134,163 @@
         def INSN(self, loc1, loc2):
             code1 = loc1.location_code()
             code2 = loc2.location_code()
-            # XXX: We just hope that the right method exists
-            getattr(self, name + '_' + code1 + code2)(loc1.value, loc2.value)
+            # XXX: All possible combinations are given, even those that are
+            # impossible
+            if code1 == 'r' and code2 == 'r':
+                getattr(self, name + "_rr")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 'b':
+                getattr(self, name + "_rb")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 's':
+                getattr(self, name + "_rs")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 'm':
+                getattr(self, name + "_rm")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 'a':
+                getattr(self, name + "_ra")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 'j':
+                getattr(self, name + "_rj")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 'i':
+                getattr(self, name + "_ri")(loc1.value, loc2.value)
+            elif code1 == 'r' and code2 == 'x':
+                getattr(self, name + "_rx")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'r':
+                getattr(self, name + "_br")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'b':
+                getattr(self, name + "_bb")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 's':
+                getattr(self, name + "_bs")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'm':
+                getattr(self, name + "_bm")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'a':
+                getattr(self, name + "_ba")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'j':
+                getattr(self, name + "_bj")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'i':
+                getattr(self, name + "_bi")(loc1.value, loc2.value)
+            elif code1 == 'b' and code2 == 'x':
+                getattr(self, name + "_bx")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'r':
+                getattr(self, name + "_sr")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'b':
+                getattr(self, name + "_sb")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 's':
+                getattr(self, name + "_ss")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'm':
+                getattr(self, name + "_sm")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'a':
+                getattr(self, name + "_sa")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'j':
+                getattr(self, name + "_sj")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'i':
+                getattr(self, name + "_si")(loc1.value, loc2.value)
+            elif code1 == 's' and code2 == 'x':
+                getattr(self, name + "_sx")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'r':
+                getattr(self, name + "_mr")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'b':
+                getattr(self, name + "_mb")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 's':
+                getattr(self, name + "_ms")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'm':
+                getattr(self, name + "_mm")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'a':
+                getattr(self, name + "_ma")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'j':
+                getattr(self, name + "_mj")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'i':
+                getattr(self, name + "_mi")(loc1.value, loc2.value)
+            elif code1 == 'm' and code2 == 'x':
+                getattr(self, name + "_mx")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'r':
+                getattr(self, name + "_ar")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'b':
+                getattr(self, name + "_ab")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 's':
+                getattr(self, name + "_as")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'm':
+                getattr(self, name + "_am")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'a':
+                getattr(self, name + "_aa")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'j':
+                getattr(self, name + "_aj")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'i':
+                getattr(self, name + "_ai")(loc1.value, loc2.value)
+            elif code1 == 'a' and code2 == 'x':
+                getattr(self, name + "_ax")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'r':
+                getattr(self, name + "_jr")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'b':
+                getattr(self, name + "_jb")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 's':
+                getattr(self, name + "_js")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'm':
+                getattr(self, name + "_jm")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'a':
+                getattr(self, name + "_ja")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'j':
+                getattr(self, name + "_jj")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'i':
+                getattr(self, name + "_ji")(loc1.value, loc2.value)
+            elif code1 == 'j' and code2 == 'x':
+                getattr(self, name + "_jx")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'r':
+                getattr(self, name + "_ir")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'b':
+                getattr(self, name + "_ib")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 's':
+                getattr(self, name + "_is")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'm':
+                getattr(self, name + "_im")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'a':
+                getattr(self, name + "_ia")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'j':
+                getattr(self, name + "_ij")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'i':
+                getattr(self, name + "_ii")(loc1.value, loc2.value)
+            elif code1 == 'i' and code2 == 'x':
+                getattr(self, name + "_ix")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'r':
+                getattr(self, name + "_xr")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'b':
+                getattr(self, name + "_xb")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 's':
+                getattr(self, name + "_xs")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'm':
+                getattr(self, name + "_xm")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'a':
+                getattr(self, name + "_xa")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'j':
+                getattr(self, name + "_xj")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'i':
+                getattr(self, name + "_xi")(loc1.value, loc2.value)
+            elif code1 == 'x' and code2 == 'x':
+                getattr(self, name + "_xx")(loc1.value, loc2.value)
+            else:
+                raise AssertionError("Invalid location codes")
+
         return INSN
 
     def _unaryop(name):
         def INSN(self, loc):
-            getattr(self, name + '_' + loc.location_code())(loc.value)
+            code = loc.location_code()
+            # "if" is unrolled for RPython
+            if code == 'r':
+                getattr(self, name + '_r')(loc.value)
+            elif code == 'b':
+                getattr(self, name + '_b')(loc.value)
+            elif code == 's':
+                getattr(self, name + '_s')(loc.value)
+            elif code == 'm':
+                getattr(self, name + '_m')(loc.value)
+            elif code == 'a':
+                getattr(self, name + '_a')(loc.value)
+            elif code == 'j':
+                getattr(self, name + '_j')(loc.value)
+            elif code == 'i':
+                getattr(self, name + '_i')(loc.value)
+            elif code == 'x':
+                getattr(self, name + '_x')(loc.value)
+            else:
+                raise AssertionError("Unknown code")
         return INSN
 
     AND = _binaryop('AND')



More information about the Pypy-commit mailing list