Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r61349:376b0fcc2a80
Date: 2013-02-17 18:29 +0200
http://bitbucket.org/pypy/pypy/changeset/376b0fcc2a80/

Log:    ARM support, IN-PROGRESS (not working)

diff --git a/rpython/jit/backend/arm/assembler.py 
b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -180,39 +180,35 @@
         if not self.cpu.propagate_exception_descr:
             return      # not supported (for tests, or non-translated)
         #
+        #
         mc = ARMv7Builder()
-        #
-        # read and reset the current exception
-        addr = rffi.cast(lltype.Signed, self.cpu.get_propagate_exception())
-        mc.BL(addr)
-        self.gen_func_epilog(mc=mc)
-        self.propagate_exception_path = mc.materialize(self.cpu.asmmemmgr, [])
-        #
-        self._store_and_reset_exception(r.r0)
+        self._store_and_reset_exception(mc, r.r0)
         ofs = self.cpu.get_ofs_of_frame_field('jf_guard_exc')
         # make sure ofs fits into a register
         assert check_imm_arg(ofs)
-        self.mc.STR_ri(r.r0.value, r.fp.value, imm=ofs)
+        mc.STR_ri(r.r0.value, r.fp.value, imm=ofs)
         propagate_exception_descr = rffi.cast(lltype.Signed,
                   cast_instance_to_gcref(self.cpu.propagate_exception_descr))
+        # put propagate_exception_descr into frame
         ofs = self.cpu.get_ofs_of_frame_field('jf_descr')
         # make sure ofs fits into a register
         assert check_imm_arg(ofs)
-        self.mc.MOV_rr(r.r0.value, r.fp.value)
-        self.mc.BKPT()
-        #base_ofs = self.cpu.get_baseofs_of_frame_field()
-        #self.mc.MOV_bi(ofs, propagate_exception_descr)
-        #self.mc.LEA_rb(eax.value, -base_ofs)
-        #
-        self._call_footer()
-        rawstart = self.mc.materialize(self.cpu.asmmemmgr, [])
+        mc.gen_load_int(r.r0.value, propagate_exception_descr)
+        mc.STR_ri(r.r0.value, r.fp.value, imm=ofs)
+        mc.MOV_rr(r.r0.value, r.fp.value)
+        self.gen_func_epilog(mc)
+        rawstart = mc.materialize(self.cpu.asmmemmgr, [])
         self.propagate_exception_path = rawstart
-        self.mc = None
 
-    def _store_and_reset_exception(self, resloc=None):
-        assert resloc is not r.ip
-        if resloc is not None:
-            self.mc.gen_load_int(resloc.value, self.cpu.pos_exc_value())
+    def _store_and_reset_exception(self, mc, resloc):
+        assert resloc is r.r0
+
+        self.mc.gen_load_int(resloc.value, self.cpu.pos_exc_value())
+        self.mc.gen_load_int(r.r0.value, self.cpu.pos_exc_value())
+            self.mc.gen_load_int(r.ip.value, 0)
+            self.mc.STR_ri(r.ip.value, r.r0.value)
+        
+        
             self.mc.LDR_ri(resloc.value, resloc.value)
             self.mc.MOV(resloc, heap(self.cpu.pos_exc_value()))
 
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to