[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