[pypy-svn] r46216 - in pypy/dist/pypy/translator/jvm: . src/pypy test

antocuni at codespeak.net antocuni at codespeak.net
Fri Aug 31 14:12:12 CEST 2007


Author: antocuni
Date: Fri Aug 31 14:12:10 2007
New Revision: 46216

Modified:
   pypy/dist/pypy/translator/jvm/generator.py
   pypy/dist/pypy/translator/jvm/opcodes.py
   pypy/dist/pypy/translator/jvm/src/pypy/PyPy.java
   pypy/dist/pypy/translator/jvm/test/test_op.py
Log:
fix uint_mod. The simplest way is to convert the args to double and
use Math.IEEERemainder. Not sure if it's the most efficient way,
though.



Modified: pypy/dist/pypy/translator/jvm/generator.py
==============================================================================
--- pypy/dist/pypy/translator/jvm/generator.py	(original)
+++ pypy/dist/pypy/translator/jvm/generator.py	Fri Aug 31 14:12:10 2007
@@ -393,6 +393,7 @@
                                  (jStringBuilder, jString), jVoid)
 PYPYUINTCMP =           Method.s(jPyPy, 'uint_cmp', (jInt,jInt,), jInt)
 PYPYULONGCMP =          Method.s(jPyPy, 'ulong_cmp', (jLong,jLong), jInt)
+PYPYUINTMOD =           Method.s(jPyPy, 'uint_mod', (jInt, jInt), jInt)
 PYPYUINTTODOUBLE =      Method.s(jPyPy, 'uint_to_double', (jInt,), jDouble)
 PYPYDOUBLETOUINT =      Method.s(jPyPy, 'double_to_uint', (jDouble,), jInt)
 PYPYDOUBLETOLONG =      Method.s(jPyPy, 'double_to_long', (jDouble,), jLong) #PAUL

Modified: pypy/dist/pypy/translator/jvm/opcodes.py
==============================================================================
--- pypy/dist/pypy/translator/jvm/opcodes.py	(original)
+++ pypy/dist/pypy/translator/jvm/opcodes.py	Fri Aug 31 14:12:10 2007
@@ -141,7 +141,7 @@
     'uint_div':                 jvmgen.IDIV,  # valid?
     'uint_truediv':             None,    # TODO
     'uint_floordiv':            jvmgen.IDIV,  # valid?
-    'uint_mod':                 jvmgen.IREM,  # valid?
+    'uint_mod':                 jvmgen.PYPYUINTMOD,
     'uint_lt':                  'u_less_than',
     'uint_le':                  'u_less_equals',
     'uint_eq':                  'u_equals',

Modified: pypy/dist/pypy/translator/jvm/src/pypy/PyPy.java
==============================================================================
--- pypy/dist/pypy/translator/jvm/src/pypy/PyPy.java	(original)
+++ pypy/dist/pypy/translator/jvm/src/pypy/PyPy.java	Fri Aug 31 14:12:10 2007
@@ -66,6 +66,12 @@
         return VALUE2BIGGER;
     }
 
+    public static int uint_mod(int x, int y) {
+        double dx = uint_to_double(x);
+        double modulo = Math.IEEEremainder(dx, y);
+        return (int)modulo;
+    }
+
     public static int ulong_cmp(long value1, long value2) {
         final int VALUE2BIGGER = -1;
         final int VALUE1BIGGER = 1;

Modified: pypy/dist/pypy/translator/jvm/test/test_op.py
==============================================================================
--- pypy/dist/pypy/translator/jvm/test/test_op.py	(original)
+++ pypy/dist/pypy/translator/jvm/test/test_op.py	Fri Aug 31 14:12:10 2007
@@ -6,9 +6,6 @@
 
 class TestOperations(JvmTest, BaseTestOperations):
 
-    def test_modulo(self):
-        py.test.skip("Backend lacks appropriate precision")
-        
     def test_operations(self):
         py.test.skip("Backend lacks appropriate precision")
         



More information about the Pypy-commit mailing list