[pypy-commit] pypy arm-backend-2: translation fixes

bivab noreply at buildbot.pypy.org
Fri Jul 15 10:34:36 CEST 2011


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r45608:6cf24885c6df
Date: 2011-07-14 13:00 +0200
http://bitbucket.org/pypy/pypy/changeset/6cf24885c6df/

Log:	translation fixes

diff --git a/pypy/jit/backend/arm/assembler.py b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -135,6 +135,7 @@
         after = rffi.aroundstate.after
         if after:
             after()
+
     _NOARG_FUNC = lltype.Ptr(lltype.FuncType([], lltype.Void))
     def _build_release_gil(self, gcrootmap):
         assert gcrootmap.is_shadow_stack
@@ -142,8 +143,8 @@
                                    self._release_gil_shadowstack)
         reacqgil_func = llhelper(self._NOARG_FUNC,
                                  self._reacquire_gil_shadowstack)
-        self.releasegil_addr  = self.cpu.cast_ptr_to_int(releasegil_func)
-        self.reacqgil_addr = self.cpu.cast_ptr_to_int(reacqgil_func)
+        self.releasegil_addr  = rffi.cast(lltype.Signed, releasegil_func)
+        self.reacqgil_addr = rffi.cast(lltype.Signed, reacqgil_func)
 
     def setup_failure_recovery(self):
 
diff --git a/pypy/jit/backend/arm/opassembler.py b/pypy/jit/backend/arm/opassembler.py
--- a/pypy/jit/backend/arm/opassembler.py
+++ b/pypy/jit/backend/arm/opassembler.py
@@ -480,7 +480,7 @@
             else:
                 callargs = [r.r0, r.r1, r.r2]
             remap_frame_layout(self, arglocs, callargs, r.ip)
-            func = self.cpu.cast_adr_to_int(addr)
+            func = rffi.cast(lltype.Signed, addr)
             #
             # misaligned stack in the call, but it's ok because the write barrier
             # is not going to call anything more.  
@@ -952,32 +952,31 @@
 
     emit_guard_call_release_gil = emit_guard_call_may_force
 
-    def call_release_gil(self, gcrootmap, save_registers):
+    def call_release_gil(self, gcrootmap, save_registers, fcond):
         # First, we need to save away the registers listed in
         # 'save_registers' that are not callee-save.  XXX We assume that
         # the floating point registers won't be modified.
-        import pdb; pdb.set_trace()
         regs_to_save = []
         for reg in self._regalloc.rm.save_around_call_regs:
             if reg in save_registers:
                 regs_to_save.append(reg)
         assert gcrootmap.is_shadow_stack
         with saved_registers(self.mc, regs_to_save):
-            self._emit_call(-1, self.releasegil_addr, [], regalloc, fcond)
+            self._emit_call(-1, self.releasegil_addr, [], self._regalloc, fcond)
 
-    def call_reacquire_gil(self, gcrootmap, save_loc):
+    def call_reacquire_gil(self, gcrootmap, save_loc, fcond):
         # save the previous result into the stack temporarily.
         # XXX like with call_release_gil(), we assume that we don't need
         # to save vfp regs in this case.
         regs_to_save = []
-        if isinstance(save_loc, RegLoc) and not save_loc.is_vfp_reg():
+        if save_loc.is_reg():
             regs_to_save.append(save_loc)
         # call the reopenstack() function (also reacquiring the GIL)
         if len(regs_to_save) == 1:
             regs_to_save.append(r.ip) # for alingment
         assert gcrootmap.is_shadow_stack
         with saved_registers(self.mc, regs_to_save):
-            self._emit_call(-1, self.reacqgil_addr, [], regalloc, fcond)
+            self._emit_call(-1, self.reacqgil_addr, [], self._regalloc, fcond)
 
     def write_new_force_index(self):
         # for shadowstack only: get a new, unused force_index number and
diff --git a/pypy/jit/backend/arm/regalloc.py b/pypy/jit/backend/arm/regalloc.py
--- a/pypy/jit/backend/arm/regalloc.py
+++ b/pypy/jit/backend/arm/regalloc.py
@@ -1008,7 +1008,7 @@
                 loc, box = self._ensure_value_is_boxed(op.getarg(i), argboxes)
                 arglocs.append(loc)
                 argboxes.append(box)
-            self.assembler.call_release_gil(gcrootmap, arglocs)
+            self.assembler.call_release_gil(gcrootmap, arglocs, fcond)
             self.possibly_free_vars(argboxes)
         # do the call
         faildescr = guard_op.getdescr()
@@ -1017,7 +1017,7 @@
         self.assembler.emit_op_call(op, args, self, fcond, fail_index)
         # then reopen the stack
         if gcrootmap:
-            self.call_reacquire_gil(gcrootmap, r.r0)
+            self.assembler.call_reacquire_gil(gcrootmap, r.r0, fcond)
         locs = self._prepare_guard(guard_op)
         self.possibly_free_vars(guard_op.getfailargs())
         return locs
diff --git a/pypy/jit/backend/arm/runner.py b/pypy/jit/backend/arm/runner.py
--- a/pypy/jit/backend/arm/runner.py
+++ b/pypy/jit/backend/arm/runner.py
@@ -100,10 +100,11 @@
                 LLInterpreter.current_interpreter = prev_interpreter
         return res
 
-    @staticmethod
     def cast_ptr_to_int(x):
         adr = llmemory.cast_ptr_to_adr(x)
         return ArmCPU.cast_adr_to_int(adr)
+    cast_ptr_to_int._annspecialcase_ = 'specialize:arglltype(0)'
+    cast_ptr_to_int = staticmethod(cast_ptr_to_int)
 
     def force(self, addr_of_force_index):
         TP = rffi.CArrayPtr(lltype.Signed)


More information about the pypy-commit mailing list