[pypy-commit] pypy ppc-jit-backend-rpythonization: (bivab, hager): Further work on rpythonization, stil more to do

hager noreply at buildbot.pypy.org
Tue Feb 7 12:24:11 CET 2012


Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend-rpythonization
Changeset: r52165:e3a7cc20600f
Date: 2012-02-07 12:23 +0100
http://bitbucket.org/pypy/pypy/changeset/e3a7cc20600f/

Log:	(bivab, hager): Further work on rpythonization, stil more to do

diff --git a/pypy/jit/backend/ppc/ppcgen/assembler.py b/pypy/jit/backend/ppc/ppcgen/assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/assembler.py
@@ -66,7 +66,7 @@
         c = asmfunc.AsmCode(len(self.insts)*4)
         for i in self.insts:
             c.emit(i)#.assemble())
-        return c.get_function()
+        #return c.get_function()
 
     def get_idescs(cls):
         r = []
diff --git a/pypy/jit/backend/ppc/ppcgen/codebuilder.py b/pypy/jit/backend/ppc/ppcgen/codebuilder.py
--- a/pypy/jit/backend/ppc/ppcgen/codebuilder.py
+++ b/pypy/jit/backend/ppc/ppcgen/codebuilder.py
@@ -22,7 +22,6 @@
 from pypy.jit.metainterp.resoperation import rop
 from pypy.jit.metainterp.history import (BoxInt, ConstInt, ConstPtr,
                                          ConstFloat, Box, INT, REF, FLOAT)
-from pypy.jit.backend.x86.support import values_array
 from pypy.tool.udir import udir
 from pypy.rlib.objectmodel import we_are_translated
 
@@ -962,7 +961,6 @@
     def __init__(self, failargs_limit=1000, r0_in_use=False):
         PPCAssembler.__init__(self)
         self.init_block_builder()
-        self.fail_boxes_int = values_array(lltype.Signed, failargs_limit)
         self.r0_in_use = r0_in_use
 
     def check(self, desc, v, *args):
@@ -996,7 +994,8 @@
             self.ldx(rD.value, 0, rD.value)
 
     def store_reg(self, source_reg, addr):
-        self.alloc_scratch_reg(addr)
+        self.alloc_scratch_reg()
+        self.load_imm(r.SCRATCH, addr)
         if IS_PPC_32:
             self.stwx(source_reg.value, 0, r.SCRATCH.value)
         else:
@@ -1021,13 +1020,15 @@
         BI = condition[0]
         BO = condition[1]
 
-        self.alloc_scratch_reg(addr)
+        self.alloc_scratch_reg()
+        self.load_imm(r.SCRATCH, addr)
         self.mtctr(r.SCRATCH.value)
         self.free_scratch_reg()
         self.bcctr(BO, BI)
 
     def b_abs(self, address, trap=False):
-        self.alloc_scratch_reg(address)
+        self.alloc_scratch_reg()
+        self.load_imm(r.SCRATCH, address)
         self.mtctr(r.SCRATCH.value)
         self.free_scratch_reg()
         if trap:
@@ -1154,11 +1155,9 @@
                     # 64 bit unsigned
                     self.cmpld(block, a, b)
                 
-    def alloc_scratch_reg(self, value=None):
+    def alloc_scratch_reg(self):
         assert not self.r0_in_use
         self.r0_in_use = True
-        if value is not None:
-            self.load_imm(r.r0, value)
 
     def free_scratch_reg(self):
         assert self.r0_in_use
diff --git a/pypy/jit/backend/ppc/ppcgen/opassembler.py b/pypy/jit/backend/ppc/ppcgen/opassembler.py
--- a/pypy/jit/backend/ppc/ppcgen/opassembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/opassembler.py
@@ -288,7 +288,8 @@
                     adr = self.fail_boxes_int.get_addr_for_num(i)
                 else:
                     assert 0
-                self.mc.alloc_scratch_reg(adr)
+                self.mc.alloc_scratch_reg()
+                self.mc.load_imm(r.SCRATCH, adr)
                 self.mc.storex(loc.value, 0, r.SCRATCH.value)
                 self.mc.free_scratch_reg()
             elif loc.is_vfp_reg():
@@ -372,7 +373,8 @@
         if resloc:
             self.mc.load(resloc.value, loc.value, 0)
 
-        self.mc.alloc_scratch_reg(0)
+        self.mc.alloc_scratch_reg()
+        self.mc.load_imm(r.SCRATCH, 0)
         self.mc.store(r.SCRATCH.value, loc.value, 0)
         self.mc.store(r.SCRATCH.value, loc1.value, 0)
         self.mc.free_scratch_reg()
@@ -748,7 +750,8 @@
             bytes_loc = regalloc.force_allocate_reg(bytes_box, forbidden_vars)
             scale = self._get_unicode_item_scale()
             assert length_loc.is_reg()
-            self.mc.alloc_scratch_reg(1 << scale)
+            self.mc.alloc_scratch_reg()
+            self.mc.load_imm(r.SCRATCH, 1 << scale)
             if IS_PPC_32:
                 self.mc.mullw(bytes_loc.value, r.SCRATCH.value, length_loc.value)
             else:
@@ -857,7 +860,8 @@
     def set_vtable(self, box, vtable):
         if self.cpu.vtable_offset is not None:
             adr = rffi.cast(lltype.Signed, vtable)
-            self.mc.alloc_scratch_reg(adr)
+            self.mc.alloc_scratch_reg()
+            self.mc.load_imm(r.SCRATCH, adr)
             self.mc.store(r.SCRATCH.value, r.RES.value, self.cpu.vtable_offset)
             self.mc.free_scratch_reg()
 
@@ -986,7 +990,8 @@
         # check value
         resloc = regalloc.try_allocate_reg(resbox)
         assert resloc is r.RES
-        self.mc.alloc_scratch_reg(value)
+        self.mc.alloc_scratch_reg()
+        self.mc.load_imm(r.SCRATCH, value)
         self.mc.cmp_op(0, resloc.value, r.SCRATCH.value)
         self.mc.free_scratch_reg()
         regalloc.possibly_free_var(resbox)
@@ -1051,7 +1056,8 @@
                 raise AssertionError(kind)
             resloc = regalloc.force_allocate_reg(op.result)
             regalloc.possibly_free_var(resbox)
-            self.mc.alloc_scratch_reg(adr)
+            self.mc.alloc_scratch_reg()
+            self.mc.load_imm(r.SCRATCH, adr)
             if op.result.type == FLOAT:
                 assert 0, "not implemented yet"
             else:
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
@@ -682,7 +682,8 @@
         memaddr = self.gen_descr_encoding(descr, args, arglocs)
 
         # store addr in force index field
-        self.mc.alloc_scratch_reg(memaddr)
+        self.mc.alloc_scratch_reg()
+        self.mc.load_imm(r.SCRATCH, memaddr)
         self.mc.store(r.SCRATCH.value, r.SPP.value, self.ENCODING_AREA)
         self.mc.free_scratch_reg()
 
@@ -886,7 +887,8 @@
             return 0
 
     def _write_fail_index(self, fail_index):
-        self.mc.alloc_scratch_reg(fail_index)
+        self.mc.alloc_scratch_reg()
+        self.mc.load_imm(r.SCRATCH, fail_index)
         self.mc.store(r.SCRATCH.value, r.SPP.value, self.ENCODING_AREA)
         self.mc.free_scratch_reg()
             
diff --git a/pypy/jit/backend/ppc/runner.py b/pypy/jit/backend/ppc/runner.py
--- a/pypy/jit/backend/ppc/runner.py
+++ b/pypy/jit/backend/ppc/runner.py
@@ -44,7 +44,7 @@
     def setup_once(self):
         self.asm.setup_once()
 
-    def compile_loop(self, inputargs, operations, looptoken, log=False):
+    def compile_loop(self, inputargs, operations, looptoken, log=False, name=""):
         self.asm.assemble_loop(inputargs, operations, looptoken, log)
 
     def compile_bridge(self, faildescr, inputargs, operations, 


More information about the pypy-commit mailing list