[pypy-svn] r75318 - in pypy/branch/multijit-4/pypy/jit/backend: test x86

arigo at codespeak.net arigo at codespeak.net
Sat Jun 12 12:01:44 CEST 2010


Author: arigo
Date: Sat Jun 12 12:01:42 2010
New Revision: 75318

Modified:
   pypy/branch/multijit-4/pypy/jit/backend/test/runner_test.py
   pypy/branch/multijit-4/pypy/jit/backend/x86/assembler.py
   pypy/branch/multijit-4/pypy/jit/backend/x86/regalloc.py
Log:
Fix the x86 backend.


Modified: pypy/branch/multijit-4/pypy/jit/backend/test/runner_test.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/backend/test/runner_test.py	(original)
+++ pypy/branch/multijit-4/pypy/jit/backend/test/runner_test.py	Sat Jun 12 12:01:42 2010
@@ -1703,7 +1703,6 @@
                                              lltype.Signed))
         class FakeJitDriverSD:
             index_of_virtualizable = -1
-            vable_token_descr = None
             _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
             assembler_helper_adr = llmemory.cast_ptr_to_adr(
                 _assembler_helper_ptr)
@@ -1751,7 +1750,6 @@
                                              lltype.Float))
         class FakeJitDriverSD:
             index_of_virtualizable = -1
-            vable_token_descr = None
             _assembler_helper_ptr = llhelper(FUNCPTR, assembler_helper)
             assembler_helper_adr = llmemory.cast_ptr_to_adr(
                 _assembler_helper_ptr)

Modified: pypy/branch/multijit-4/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/multijit-4/pypy/jit/backend/x86/assembler.py	Sat Jun 12 12:01:42 2010
@@ -109,7 +109,6 @@
         self.malloc_array_func_addr = 0
         self.malloc_str_func_addr = 0
         self.malloc_unicode_func_addr = 0
-        self.assembler_helper_adr = 0
         self.fail_boxes_int = values_array(lltype.Signed, failargs_limit)
         self.fail_boxes_ptr = values_array(llmemory.GCREF, failargs_limit)
         self.fail_boxes_float = values_array(lltype.Float, failargs_limit)
@@ -144,14 +143,6 @@
                 ll_new_unicode = gc_ll_descr.get_funcptr_for_newunicode()
                 self.malloc_unicode_func_addr = rffi.cast(lltype.Signed,
                                                           ll_new_unicode)
-            if we_are_translated():
-                self.assembler_helper_adr = self.cpu.cast_ptr_to_int(
-                    self.cpu.assembler_helper_ptr)
-            else:
-                if getattr(self.cpu, 'assembler_helper_ptr', None):
-                    self.assembler_helper_adr = self.cpu.cast_ptr_to_int(
-                        self.cpu.assembler_helper_ptr)
-        
             # done
             # we generate the loop body in 'mc'
             # 'mc2' is for guard recovery code
@@ -1389,7 +1380,10 @@
         je_location = mc.get_relative_pos()
         #
         # Path A: use assembler_helper_adr
-        self._emit_call(rel32(self.assembler_helper_adr), [eax, arglocs[1]], 0,
+        jd = descr.outermost_jitdriver_sd
+        assert jd is not None
+        asm_helper_adr = self.cpu.cast_adr_to_int(jd.assembler_helper_adr)
+        self._emit_call(rel32(asm_helper_adr), [eax, arglocs[1]], 0,
                         tmp=ecx, force_mc=True, mc=mc)
         if isinstance(result_loc, MODRM64):
             mc.FSTP(result_loc)
@@ -1403,9 +1397,9 @@
         mc.overwrite(je_location - 1, [chr(offset)])
         #
         # Reset the vable token --- XXX really too much special logic here:-(
-        if self.cpu.index_of_virtualizable >= 0:
+        if jd.index_of_virtualizable >= 0:
             from pypy.jit.backend.llsupport.descr import BaseFieldDescr
-            fielddescr = self.cpu.vable_token_descr
+            fielddescr = jd.vable_token_descr
             assert isinstance(fielddescr, BaseFieldDescr)
             ofs = fielddescr.offset
             mc.MOV(eax, arglocs[1])

Modified: pypy/branch/multijit-4/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/multijit-4/pypy/jit/backend/x86/regalloc.py	(original)
+++ pypy/branch/multijit-4/pypy/jit/backend/x86/regalloc.py	Sat Jun 12 12:01:42 2010
@@ -636,10 +636,14 @@
         self._consider_call(op, guard_op)
 
     def consider_call_assembler(self, op, guard_op):
-        descr = op.descr
         portal_calldescr = self.assembler.cpu.portal_calldescr
         size = portal_calldescr.get_result_size(self.translate_support_code)
-        vable_index = self.assembler.cpu.index_of_virtualizable
+        #
+        descr = op.descr
+        assert isinstance(descr, LoopToken)
+        jd = descr.outermost_jitdriver_sd
+        assert jd is not None
+        vable_index = jd.index_of_virtualizable
         if vable_index >= 0:
             self.rm._sync_var(op.args[vable_index])
             vable = self.fm.loc(op.args[vable_index], 1)



More information about the Pypy-commit mailing list