[pypy-svn] r62690 - pypy/branch/pyjitpl5/pypy/jit/backend/x86

fijal at codespeak.net fijal at codespeak.net
Sat Mar 7 11:39:29 CET 2009


Author: fijal
Date: Sat Mar  7 11:39:29 2009
New Revision: 62690

Modified:
   pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py
Log:
good, now test_exception_from_outside passes. A bit hackish... I'll fix it
I promise


Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/assembler.py	Sat Mar  7 11:39:29 2009
@@ -2,8 +2,9 @@
 import ctypes
 from pypy.jit.backend.x86 import symbolic
 from pypy.jit.metainterp.history import Const, ConstInt, Box
-from pypy.rpython.lltypesystem import lltype, rffi, ll2ctypes, rstr
+from pypy.rpython.lltypesystem import lltype, rffi, ll2ctypes, rstr, llmemory
 from pypy.rpython.lltypesystem.rclass import OBJECT
+from pypy.rpython.lltypesystem.lloperation import llop
 from pypy.annotation import model as annmodel
 from pypy.tool.uid import fixid
 from pypy.jit.backend.x86.regalloc import (RegAlloc, FRAMESIZE, WORD, REGS,
@@ -37,14 +38,18 @@
         if self.mc is None:
             # we generate the loop body in 'mc'
             # 'mc2' is for guard recovery code
-            self._exception_data = lltype.malloc(rffi.CArray(lltype.Signed), 2,
-                                                 zero=True, flavor='raw')
+            if we_are_translated():
+                addr = llop.get_exception_addr(llmemory.Address)
+                self._exception_data = llmemory.cast_adr_to_ptr(addr, rffi.CArrayPtr(lltype.Signed))
+            else:
+                self._exception_data = lltype.malloc(rffi.CArray(lltype.Signed), 2,
+                                                     zero=True, flavor='raw')
             self._exception_addr = self.cpu.cast_ptr_to_int(
                 self._exception_data)
             # a backup, in case our exception can be somehow mangled,
             # by a handling code
             self._exception_bck = lltype.malloc(rffi.CArray(lltype.Signed), 2,
-                                                 zero=True, flavor='raw')
+                                                zero=True, flavor='raw')
             self._exception_bck_addr = self.cpu.cast_ptr_to_int(
                 self._exception_bck)
             self.mc = codebuf.MachineCodeBlock(self.MC_SIZE)



More information about the Pypy-commit mailing list