[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