[pypy-svn] r18491 - in pypy/dist/pypy/translator/asm: . ppc test

mwh at codespeak.net mwh at codespeak.net
Wed Oct 12 17:47:22 CEST 2005


Author: mwh
Date: Wed Oct 12 17:47:18 2005
New Revision: 18491

Modified:
   pypy/dist/pypy/translator/asm/genasm.py
   pypy/dist/pypy/translator/asm/ppc/codegen.py
   pypy/dist/pypy/translator/asm/simulator.py
   pypy/dist/pypy/translator/asm/test/test_asm.py
Log:
test all integer comparisons.


Modified: pypy/dist/pypy/translator/asm/genasm.py
==============================================================================
--- pypy/dist/pypy/translator/asm/genasm.py	(original)
+++ pypy/dist/pypy/translator/asm/genasm.py	Wed Oct 12 17:47:18 2005
@@ -138,7 +138,7 @@
             falselink, truelink = block.exits
             lastop = block.operations[-1]
             assert lastop.opname in ['int_gt', 'int_lt', 'int_ge',
-                                     'int_eq', 'int_le']
+                                     'int_eq', 'int_le', 'int_ne']
             A.emit(lastop.opname, *map(self.reg, lastop.args))
             b = self.blockname()
             A.emit('JT', b)

Modified: pypy/dist/pypy/translator/asm/ppc/codegen.py
==============================================================================
--- pypy/dist/pypy/translator/asm/ppc/codegen.py	(original)
+++ pypy/dist/pypy/translator/asm/ppc/codegen.py	Wed Oct 12 17:47:18 2005
@@ -96,10 +96,18 @@
     def int_lt(self, A, a, b):
         A.cmpw(a + 2, b + 2)
 
-    def int_eq(self, A, a, b):
+    def int_ge(self, A, a, b):
         A.cmpw(a + 2, b + 2)
-        A.crmove(0, 2)
+        A.cror(0, 1, 2)
 
     def int_le(self, A, a, b):
         A.cmpw(a + 2, b + 2)
         A.cror(0, 0, 2)
+
+    def int_eq(self, A, a, b):
+        A.cmpw(a + 2, b + 2)
+        A.crmove(0, 2)
+
+    def int_ne(self, A, a, b):
+        A.cmpw(a + 2, b + 2)
+        A.cror(0, 0, 1)

Modified: pypy/dist/pypy/translator/asm/simulator.py
==============================================================================
--- pypy/dist/pypy/translator/asm/simulator.py	(original)
+++ pypy/dist/pypy/translator/asm/simulator.py	Wed Oct 12 17:47:18 2005
@@ -89,18 +89,26 @@
     def EXCH(self,destination,source):
         self._registers[destination],self._registers[source]=self.register(source),self.register(destination)
 
+
     def int_gt(self,rega,regb):
         self._creg = self.register(rega) > self.register(regb)
 
     def int_lt(self,rega,regb):
         self._creg = self.register(rega) < self.register(regb)
 
-    def int_eq(self,rega,regb):
-        self._creg = self.register(rega) == self.register(regb)
+    def int_ge(self,rega,regb):
+        self._creg = self.register(rega) >= self.register(regb)
 
     def int_le(self,rega,regb):
         self._creg = self.register(rega) <= self.register(regb)
 
+    def int_eq(self,rega,regb):
+        self._creg = self.register(rega) == self.register(regb)
+
+    def int_ne(self,rega,regb):
+        self._creg = self.register(rega) != self.register(regb)
+
+
     def llop(self, opcode, destination, *sources):
         sourcevalues = []
         for r in sources:

Modified: pypy/dist/pypy/translator/asm/test/test_asm.py
==============================================================================
--- pypy/dist/pypy/translator/asm/test/test_asm.py	(original)
+++ pypy/dist/pypy/translator/asm/test/test_asm.py	Wed Oct 12 17:47:18 2005
@@ -89,7 +89,25 @@
         f = self.getcompiled(f1)
         assert f(10) == f1(10)
 
-        
+    def test_comparisons(self):
+        def f(x=int):
+            if x == 0:
+                return 0
+            elif x > 10:
+                return 10
+            elif x >= 5:
+                return 5
+            elif x < -10:
+                return -10
+            elif x <= -5:
+                return -5
+            elif x != 1:
+                return 1
+            else:
+                return x
+        g = self.getcompiled(f)
+        for i in range(-20, 20):
+            assert g(i) == f(i)
 
 class TestAsmPPC(TestAsm):
 



More information about the Pypy-commit mailing list