Author: hager <sven.ha...@uni-duesseldorf.de> Branch: ppc-jit-backend Changeset: r45884:762f25673182 Date: 2011-07-22 16:54 +0200 http://bitbucket.org/pypy/pypy/changeset/762f25673182/
Log: Renamed class MyPPCAssembler to PPCBuilder, added some methods for code generation. diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py --- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py +++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py @@ -7,6 +7,7 @@ from pypy.jit.backend.llsupport.asmmemmgr import BlockBuilderMixin from pypy.jit.backend.llsupport.asmmemmgr import AsmMemoryManager from pypy.rpython.lltypesystem import lltype, rffi +from pypy.jit.metainterp.resoperation import rop A = Form("frD", "frA", "frB", "XO3", "Rc") A1 = Form("frD", "frB", "XO3", "Rc") @@ -802,7 +803,7 @@ return -((v ^ 0xFFFF) + 1) # "sign extend" to 32 bits return v -class MyPPCAssembler(PPCAssembler): +class PPCBuilder(PPCAssembler): def __init__(self): PPCAssembler.__init__(self) self.init_block_builder() @@ -816,40 +817,39 @@ self.addis(rD, 0, ha(addr)) self.lwz(rD, rD, la(addr)) + def store_reg(self, source_reg, addr): + self.load_word(10, addr) + self.stw(source_reg, 10, 0) + def nop(self): self.ori(0, 0, 0) - #def bl(self, addr): - # offset = 4 * len(self.insts) - # self.nop() - # self.patch_list.append((offset, addr)) + # translate a trace operation to corresponding machine code + def build_op(self, trace_op, cpu): + opnum = trace_op.getopnum() + if opnum == rop.INT_ADD: + self.emit_int_add(trace_op, cpu) + elif opnum == rop.FINISH: + self.emit_finish(cpu) - #def assemble(self, dump=os.environ.has_key('PYPY_DEBUG')): - # insns = self.assemble0(dump) - # for i in insns: - # self.emit(i) - # i = self.materialize(AsmMemoryManager(), []) - # t = lltype.FuncType([], lltype.Signed) - # self.patch_jumps(i) - # return rffi.cast(lltype.Ptr(t), i) - # - #def patch_jumps(self, rawstart): - # #import pdb; pdb.set_trace() + # --------------------------------------- # + # CODE GENERATION # + # --------------------------------------- # - # for offset, addr in self.patch_list: - # #delta = (rawstart + offset) - addr - # delta = addr - (rawstart + offset) - # delta >>= 2 - # print "delta =", delta - # #assert (delta >> 24) == -1 + def emit_int_add(self, op, cpu): + arg0 = op.getarg(0) + arg1 = op.getarg(1) - # updater = BranchUpdater() - # #updater.bl(delta) - # self.load_word(reg, h) + arg0_index = cpu.get_box_index(arg0) + addr_box_0 = cpu.fail_boxes_int.get_addr_for_num(arg0_index) + self.load_from(3, addr_box_0) + self.addi(3, 3, arg1.value) + self.store_reg(3, addr_box_0) - # updater.bctrl() - # updater.write_to_mem(rawstart + offset) + def emit_finish(self, cpu): + self.load_word(3, 0) + self.blr() class BranchUpdater(PPCAssembler): def __init__(self): diff --git a/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py b/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py --- a/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py +++ b/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py @@ -1,7 +1,7 @@ import py import random, sys, os -from pypy.jit.backend.ppc.ppcgen.ppc_assembler import BasicPPCAssembler, MyPPCAssembler +from pypy.jit.backend.ppc.ppcgen.ppc_assembler import BasicPPCAssembler, PPCBuilder from pypy.jit.backend.ppc.ppcgen.symbol_lookup import lookup from pypy.jit.backend.ppc.ppcgen.regname import * from pypy.jit.backend.ppc.ppcgen import form, pystructs @@ -21,7 +21,7 @@ """ Creates the boilerplate code for the tests. -- Make an MyPPCAssembler object +- Make an PPCBuilder object - Let the given test create the machine code - Create a function and call it - Compare the return value with the expected result @@ -29,7 +29,7 @@ def asmtest(expected=-1): def testmaker(test): def newtest(self): - a = MyPPCAssembler() + a = PPCBuilder() test(self, a) f = a.assemble() assert f() == expected @@ -173,7 +173,7 @@ def test_call_function(self): functype = lltype.Ptr(lltype.FuncType([lltype.Signed], lltype.Signed)) call_addr = rffi.cast(lltype.Signed, llhelper(functype, func)) - a = MyPPCAssembler() + a = PPCBuilder() # NOW EXPLICITLY: # @@ -245,7 +245,7 @@ a.blr() def test_neg(self): - a = MyPPCAssembler() + a = PPCBuilder() a.load_word(10, 0x0000F0F0) a.neg(3, 10) a.blr() @@ -253,7 +253,7 @@ assert f() == hex_to_signed_int("FFFF0F10") def test_load_and_store(self): - a = MyPPCAssembler() + a = PPCBuilder() word1 = 1000 word2 = 2000 a.load_word(10, word1) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit