[pypy-commit] pypy optresult-unroll: 32bit: fix fix fix

arigo noreply at buildbot.pypy.org
Sun Sep 6 12:23:23 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: optresult-unroll
Changeset: r79473:27475ddd1350
Date: 2015-09-06 12:23 +0200
http://bitbucket.org/pypy/pypy/changeset/27475ddd1350/

Log:	32bit: fix fix fix

diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -27,11 +27,8 @@
 IS_32_BIT = sys.maxint < 2**32
 IS_64_BIT = sys.maxint > 2**32
 
-def constfloat(x):
-    return ConstFloat(longlong.getfloatstorage(x))
-
-def boxfloat(x):
-    return InputArgFloat(longlong.getfloatstorage(x))
+boxfloat = InputArgFloat.fromfloat
+constfloat = ConstFloat.fromfloat
 
 def clone(op):
     if op.type == 'i':
@@ -421,6 +418,8 @@
         from rpython.jit.metainterp.test.test_executor import get_float_tests
         for opnum, boxargs, rettype, retvalue in get_float_tests(self.cpu):
             res = self.execute_operation(opnum, boxargs, rettype)
+            if rettype == 'float':
+                res = longlong.getrealfloat(res)
             assert res == retvalue
 
     def test_ovf_operations(self, reversed=False):
@@ -563,7 +562,7 @@
             res = self.execute_operation(rop.CALL_F,
                                          [funcbox] + args,
                                          'float', descr=calldescr)
-            assert abs(res - 4.6) < 0.0001
+            assert abs(longlong.getrealfloat(res) - 4.6) < 0.0001
 
     def test_call_many_arguments(self):
         # Test calling a function with a large number of arguments (more than
@@ -648,7 +647,7 @@
         res = self.execute_operation(rop.CALL_F, [funcbox, constfloat(1.5),
                                                 constfloat(2.5)], 'float',
                                      descr=calldescr)
-        assert res == 4.0
+        assert longlong.getrealfloat(res) == 4.0
 
 
     def test_field_basic(self):
@@ -706,13 +705,13 @@
                                    'void', descr=floatdescr)
             res = self.execute_operation(rop.GETFIELD_GC_F, [t_box],
                                          'float', descr=floatdescr)
-            assert res == 3.4
+            assert longlong.getrealfloat(res) == 3.4
             #
             self.execute_operation(rop.SETFIELD_GC, [t_box, constfloat(-3.6)],
                                    'void', descr=floatdescr)
             res = self.execute_operation(rop.GETFIELD_GC_F, [t_box],
                                          'float', descr=floatdescr)
-            assert res == -3.6
+            assert longlong.getrealfloat(res) == -3.6
 
 
     def test_passing_guards(self):
@@ -933,10 +932,10 @@
                                    'void', descr=arraydescr)
             r = self.execute_operation(rop.GETARRAYITEM_GC_F, [a_box, InputArgInt(1)],
                                        'float', descr=arraydescr)
-            assert r == 3.5
+            assert longlong.getrealfloat(r) == 3.5
             r = self.execute_operation(rop.GETARRAYITEM_GC_F, [a_box, InputArgInt(2)],
                                        'float', descr=arraydescr)
-            assert r == 4.5
+            assert longlong.getrealfloat(r) == 4.5
 
         # For platforms where sizeof(INT) != sizeof(Signed) (ie, x86-64)
         a_box, A = self.alloc_array_of(rffi.INT, 342)
@@ -979,7 +978,7 @@
         self.cpu.bh_setinteriorfield_gc_f(a_box.getref_base(), 3, longlong.getfloatstorage(2.5), kdescr)
         r = self.execute_operation(rop.GETINTERIORFIELD_GC_F, [a_box, InputArgInt(3)],
                                    'float', descr=kdescr)
-        assert r == 2.5
+        assert longlong.getrealfloat(r) == 2.5
         #
         NUMBER_FIELDS = [('vs', lltype.Signed),
                          ('vu', lltype.Unsigned),
@@ -1133,9 +1132,9 @@
 
         if self.cpu.supports_floats:
             r = self.execute_operation(rop.SAME_AS_F, [constfloat(5.5)], 'float')
-            assert r == 5.5
+            assert longlong.getrealfloat(r) == 5.5
             r = self.execute_operation(rop.SAME_AS_F, [boxfloat(5.5)], 'float')
-            assert r == 5.5
+            assert longlong.getrealfloat(r) == 5.5
 
     def test_virtual_ref(self):
         pass   # VIRTUAL_REF must not reach the backend nowadays
@@ -4128,7 +4127,7 @@
             res = self.execute_operation(rop.CALL_F,
                         [funcbox, boxfloat(arg)],
                          'float', descr=calldescr)
-            assert res == expected
+            assert longlong.getrealfloat(res) == expected
 
     def test_compile_loop_with_target(self):
         looptoken = JitCellToken()
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -270,6 +270,10 @@
         assert lltype.typeOf(valuestorage) is longlong.FLOATSTORAGE
         self.value = valuestorage
 
+    @staticmethod
+    def fromfloat(x):
+        return ConstFloat(longlong.getfloatstorage(x))
+
     def getfloatstorage(self):
         return self.value
 
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -482,6 +482,10 @@
     def __init__(self, f=longlong.ZEROF):
         self.setfloatstorage(f)
 
+    @staticmethod
+    def fromfloat(x):
+        return InputArgFloat(longlong.getfloatstorage(x))
+
 class InputArgRef(RefOp, AbstractInputArg):
     def __init__(self, r=lltype.nullptr(llmemory.GCREF.TO)):
         self.setref_base(r)
diff --git a/rpython/jit/metainterp/test/test_executor.py b/rpython/jit/metainterp/test/test_executor.py
--- a/rpython/jit/metainterp/test/test_executor.py
+++ b/rpython/jit/metainterp/test/test_executor.py
@@ -63,11 +63,9 @@
     def bh_strsetitem(self, string, index, newvalue):
         self.fakestrsetitem = (string, index, newvalue)
 
-def boxfloat(x):
-    return InputArgFloat(longlong.getfloatstorage(x))
 
-def constfloat(x):
-    return ConstFloat(longlong.getfloatstorage(x))
+boxfloat = InputArgFloat.fromfloat
+constfloat = ConstFloat.fromfloat
 
 
 def test_execute():
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -171,7 +171,7 @@
         if elem.startswith('i'):
             v = InputArgInt(0)
         elif elem.startswith('f'):
-            v = InputArgFloat(0.0)
+            v = InputArgFloat.fromfloat(0.0)
         else:
             from rpython.rtyper.lltypesystem import lltype, llmemory
             assert elem.startswith('p')


More information about the pypy-commit mailing list