[pypy-svn] r58218 - in pypy/branch/oo-jit/pypy/jit/codegen/x86_64: . test

witulski at codespeak.net witulski at codespeak.net
Thu Sep 18 10:54:19 CEST 2008


Author: witulski
Date: Thu Sep 18 10:54:17 2008
New Revision: 58218

Modified:
   pypy/branch/oo-jit/pypy/jit/codegen/x86_64/assembler.py
   pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py
   pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py
Log:
litle Test clean up
Added NEG and NOT Operations + Tests(pass)


Modified: pypy/branch/oo-jit/pypy/jit/codegen/x86_64/assembler.py
==============================================================================
--- pypy/branch/oo-jit/pypy/jit/codegen/x86_64/assembler.py	(original)
+++ pypy/branch/oo-jit/pypy/jit/codegen/x86_64/assembler.py	Thu Sep 18 10:54:17 2008
@@ -168,6 +168,10 @@
     _IMUL_QWREG_QWREG = make_two_operand_instr(  1, None,    0, None, "\x0F", 3, None, None, None, "\xAF")
     _IMUL_QWREG_IMM32 = make_two_operand_instr(  1, None,    0, None, "\x69", 3, None, "sameReg")
     
+    _NEG_QWREG       = make_one_operand_instr(   1,    0,    0, None, "\xF7", 3, None, 3)
+    
+    _NOT_QWREG       = make_one_operand_instr(   1,    0,    0, None, "\xF7", 3, None, 2)
+    
     _JMP_QWREG       = make_one_operand_instr(   1,    0,    0, None, "\xFF", 3, None, 4)
     
     _OR_QWREG_QWREG  = make_two_operand_instr(   1, None,    0, None, "\x09", 3, None, None)
@@ -247,6 +251,14 @@
             method(op2, op1)
         else:
             method(op1, op2)
+            
+    def NEG(self, op1):
+        method = getattr(self, "_NEG"+op1.to_string())
+        method(op1)
+        
+    def NOT(self, op1):
+        method = getattr(self, "_NOT"+op1.to_string())
+        method(op1)
     
     def RET(self):
         self.write("\xC3")

Modified: pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py
==============================================================================
--- pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py	(original)
+++ pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py	Thu Sep 18 10:54:17 2008
@@ -88,13 +88,13 @@
     @specialize.arg(1)
     def genop1(self, opname, gv_arg):
         genmethod = getattr(self, 'op_' + opname)
-        print self.mc.tell(),":",opname
+     #   print self.mc.tell(),":",opname
         return genmethod(gv_arg)
 
     @specialize.arg(1)
     def genop2(self, opname, gv_arg1, gv_arg2):
         genmethod = getattr(self, 'op_' + opname)
-        print self.mc.tell(),":",opname
+      #  print self.mc.tell(),":",opname
         return genmethod(gv_arg1, gv_arg2)
     
     op_int_add  = make_two_argument_method("ADD")
@@ -102,6 +102,8 @@
     op_int_dec  = make_one_argument_method("DEC")
     op_int_inc  = make_one_argument_method("INC")
     op_int_mul  = make_two_argument_method("IMUL")
+    op_int_neg  = make_one_argument_method("NEG")
+    op_int_not  = make_one_argument_method("NOT")
     op_int_or   = make_two_argument_method("OR")
     op_int_push = make_one_argument_method("PUSH")
     op_int_pop  = make_one_argument_method("POP")

Modified: pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py
==============================================================================
--- pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py	(original)
+++ pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py	Thu Sep 18 10:54:17 2008
@@ -10,6 +10,16 @@
 def skip(self):
     py.test.skip("not implemented yet")
 
+def make_one_op_instr(rgenop, instr_name):
+    sigtoken = rgenop.sigToken(lltype.FuncType([lltype.Signed], lltype.Signed))
+    builder, gv_one_op_instr, [gv_x] = rgenop.newgraph(sigtoken, "one_op_instr")
+    builder.start_writing()
+    
+    gv_result = builder.genop1(instr_name, gv_x)
+    builder.finish_and_return(sigtoken, gv_result)
+    builder.end()
+    return gv_one_op_instr
+
 def make_bool_op(rgenop, which_bool_op):
     sigtoken = rgenop.sigToken(lltype.FuncType([lltype.Signed, lltype.Signed], lltype.Signed))
     builder, gv_bool_op, [gv_x, gv_y] = rgenop.newgraph(sigtoken, "bool_op")
@@ -46,58 +56,19 @@
     gv_result = builder.genop2("int_mul", gv_x, rgenop.genconst(num))
     builder.finish_and_return(sigtoken, gv_result)
     builder.end()
-    return gv_mul
-
-def make_inc(rgenop):
-    sigtoken = rgenop.sigToken(lltype.FuncType([lltype.Signed], lltype.Signed))
-    builder, gv_inc, gv_x = rgenop.newgraph(sigtoken, "inc")
-    builder.start_writing()
-    gv_result = builder.genop1("int_inc", gv_x[0])
-    builder.finish_and_return(sigtoken, gv_result)
-    builder.end()
-    return gv_inc
-
-def make_dec(rgenop):
-    sigtoken = rgenop.sigToken(lltype.FuncType([lltype.Signed], lltype.Signed))
-    builder, gv_dec, gv_x = rgenop.newgraph(sigtoken, "dec")
-    builder.start_writing()
-    gv_result = builder.genop1("int_dec", gv_x[0])
-    builder.finish_and_return(sigtoken, gv_result)
-    builder.end()
-    return gv_dec
-
-def make_push(rgenop):
-    sigtoken = rgenop.sigToken(lltype.FuncType([lltype.Signed], lltype.Signed))
-    builder, gv_push, gv_x = rgenop.newgraph(sigtoken, "push")
-    builder.start_writing()
-    gv_result = builder.genop1("int_push", gv_x[0])
-    builder.finish_and_return(sigtoken, gv_result)
-    builder.end()
-    return gv_push
-
-def make_pop(rgenop):
-    sigtoken = rgenop.sigToken(lltype.FuncType([lltype.Signed], lltype.Signed))
-    builder, gv_pop, gv_x = rgenop.newgraph(sigtoken, "pop")
-    builder.start_writing()
-    gv_result = builder.genop1("int_pop", gv_x[0])
-    builder.finish_and_return(sigtoken, gv_result)
-    builder.end()
-    return gv_pop
-        
+    return gv_mul        
 
 class TestRGenopDirect(AbstractRGenOpTestsDirect):
     RGenOp = RX86_64GenOp
                         
     def test_inc(self):
-        rgenop = self.RGenOp()
-        inc_function = make_inc(rgenop)
+        inc_function = make_one_op_instr(self.RGenOp(),"int_inc")
         fnptr = self.cast(inc_function,1)
         res = fnptr(0)
         assert res == 1
         
     def test_dec(self):
-        rgenop = self.RGenOp()
-        dec_function = make_dec(rgenop)
+        dec_function = make_one_op_instr(self.RGenOp(),"int_dec")
         fnptr = self.cast(dec_function,1)
         res = fnptr(2)
         assert res == 1
@@ -268,17 +239,33 @@
         #   = 111111
         result = fnptr(42,21) 
         assert result == 63
-    
         
-   # def test_push_and_pop(self):
-   #     rgenop = self.RGenOp()
-   #     push_result = make_push(rgenop)
-   #     fnptr = self.cast(push_result,1)
-   #     pop_result = make_pop(rgenop)
-   #     fnptr = self.cast(pop_result,1)
-   #     res = fnptr(42)
-        #assert res == 1
+    def test_neg(self):
+        neg_function = make_one_op_instr(self.RGenOp(),"int_neg")
+        fnptr = self.cast(neg_function,1)
+        result = fnptr(1)
+        assert result == -1
+        result = fnptr(-1)
+        assert result == 1  
+        result = fnptr(255)
+        assert result == -255
+        result = fnptr(0)
+        assert result == 0
+        result = fnptr(-123456789)
+        assert result == 123456789
         
+    def test_not(self):
+        not_function = make_one_op_instr(self.RGenOp(),"int_not")
+        fnptr = self.cast(not_function,1)
+        result = fnptr(1)
+        assert result == -2
+        result = fnptr(0)
+        assert result == -1
+        result = fnptr(-43)
+        assert result == 42
+       
+    #TODO: Test push/pop
+       
     test_directtesthelper_direct = skip
     test_dummy_compile = skip
     test_cast_raising = skip



More information about the Pypy-commit mailing list