[pypy-commit] pypy shadowstack-again: Revert partially 35fc2a0ae50c: found out that using r15 to return exceptions

arigo noreply at buildbot.pypy.org
Tue May 20 17:59:00 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: shadowstack-again
Changeset: r71604:ed8c9de9b293
Date: 2014-05-20 17:58 +0200
http://bitbucket.org/pypy/pypy/changeset/ed8c9de9b293/

Log:	Revert partially 35fc2a0ae50c: found out that using r15 to return
	exceptions gives no measurable speed improvement

diff --git a/rpython/rtyper/lltypesystem/lloperation.py b/rpython/rtyper/lltypesystem/lloperation.py
--- a/rpython/rtyper/lltypesystem/lloperation.py
+++ b/rpython/rtyper/lltypesystem/lloperation.py
@@ -438,9 +438,6 @@
     'gc_gettypeptr_group':  LLOp(canfold=True),
     'get_member_index':     LLOp(canfold=True),
 
-    'getfield_exc_type':    LLOp(sideeffects=False),
-    'setfield_exc_type':    LLOp(),
-
     # __________ used by the JIT ________
 
     'jit_marker':           LLOp(),
diff --git a/rpython/translator/c/src/mem.h b/rpython/translator/c/src/mem.h
--- a/rpython/translator/c/src/mem.h
+++ b/rpython/translator/c/src/mem.h
@@ -224,18 +224,5 @@
     pypy_g_rpython_memory_gctypelayout_GCData.gcd_inst_root_stack_top = s;
 }
 
-#define OP_GETFIELD_EXC_TYPE(r)                                            \
-    if (__builtin_expect(((Signed)rpy_shadowstack) & 1, 0)) {              \
-        r = (struct pypy_object_vtable0 *)(((char *)rpy_shadowstack) - 1); \
-        if (!r) __builtin_unreachable();                                   \
-    }                                                                      \
-    else {                                                                 \
-        r = NULL;                                                          \
-    }
-#define OP_SETFIELD_EXC_TYPE(x, r)                        \
-    rpy_shadowstack = (x) ?                               \
-        (struct rpy_shadowstack_s *)(((char *)x) + 1)     \
-        : NULL
-
 
 #endif
diff --git a/rpython/translator/exceptiontransform.py b/rpython/translator/exceptiontransform.py
--- a/rpython/translator/exceptiontransform.py
+++ b/rpython/translator/exceptiontransform.py
@@ -67,19 +67,17 @@
         self.c_n_i_error_ll_exc_type = constant_value(n_i_error_ll_exc_type)
 
         def rpyexc_occured():
-            exc_type = lloperation.llop.getfield_exc_type(
-                self.lltype_of_exception_type)
+            exc_type = exc_data.exc_type
             return bool(exc_type)
 
         def rpyexc_fetch_type():
-            return lloperation.llop.getfield_exc_type(
-                self.lltype_of_exception_type)
+            return exc_data.exc_type
 
         def rpyexc_fetch_value():
             return exc_data.exc_value
 
         def rpyexc_clear():
-            lloperation.llop.setfield_exc_type(lltype.Void, null_type)
+            exc_data.exc_type = null_type
             exc_data.exc_value = null_value
 
         def rpyexc_raise(etype, evalue):
@@ -92,12 +90,12 @@
             # us to see at least part of the traceback for them.
             ll_assert(etype != assertion_error_ll_exc_type, "AssertionError")
             ll_assert(etype != n_i_error_ll_exc_type, "NotImplementedError")
-            lloperation.llop.setfield_exc_type(lltype.Void, etype)
+            exc_data.exc_type = etype
             exc_data.exc_value = evalue
             lloperation.llop.debug_start_traceback(lltype.Void, etype)
 
         def rpyexc_reraise(etype, evalue):
-            lloperation.llop.setfield_exc_type(lltype.Void, etype)
+            exc_data.exc_type = etype
             exc_data.exc_value = evalue
             lloperation.llop.debug_reraise_traceback(lltype.Void, etype)
 
@@ -108,8 +106,7 @@
 
         def rpyexc_restore_exception(evalue):
             if evalue:
-                lloperation.llop.setfield_exc_type(lltype.Void,
-                                                   ll_inst_type(evalue))
+                exc_data.exc_type = ll_inst_type(evalue)
                 exc_data.exc_value = evalue
 
         self.rpyexc_occured_ptr = self.build_func(
@@ -146,15 +143,15 @@
             lltype.Void,
             jitcallkind='rpyexc_raise') # for the JIT
 
-        #self.rpyexc_fetch_exception_ptr = self.build_func(
-        #    "RPyFetchException",
-        #    rpyexc_fetch_exception,
-        #    [], self.lltype_of_exception_value)
+        self.rpyexc_fetch_exception_ptr = self.build_func(
+            "RPyFetchException",
+            rpyexc_fetch_exception,
+            [], self.lltype_of_exception_value)
 
-        #self.rpyexc_restore_exception_ptr = self.build_func(
-        #    "RPyRestoreException",
-        #    self.noinline(rpyexc_restore_exception),
-        #    [self.lltype_of_exception_value], lltype.Void)
+        self.rpyexc_restore_exception_ptr = self.build_func(
+            "RPyRestoreException",
+            self.noinline(rpyexc_restore_exception),
+            [self.lltype_of_exception_value], lltype.Void)
 
         self.build_extra_funcs()
 
@@ -464,6 +461,7 @@
 
     def setup_excdata(self):
         EXCDATA = lltype.Struct('ExcData',
+            ('exc_type',  self.lltype_of_exception_type),
             ('exc_value', self.lltype_of_exception_value))
         self.EXCDATA = EXCDATA
 
@@ -484,17 +482,11 @@
         return Constant(fn_ptr, lltype.Ptr(FUNC_TYPE))
 
     def gen_getfield(self, name, llops):
-        if name == 'exc_type':
-            return llops.genop('getfield_exc_type', [],
-                               resulttype = self.lltype_of_exception_type)
         c_name = inputconst(lltype.Void, name)
         return llops.genop('getfield', [self.cexcdata, c_name],
                            resulttype = getattr(self.EXCDATA, name))
 
     def gen_setfield(self, name, v_value, llops):
-        if name == 'exc_type':
-            llops.genop('setfield_exc_type', [v_value])
-            return
         c_name = inputconst(lltype.Void, name)
         llops.genop('setfield', [self.cexcdata, c_name, v_value])
 
@@ -523,7 +515,6 @@
         exc_data = self.exc_data_ptr
 
         def rpyexc_get_exception_addr():
-            raise NotImplementedError
             return (llmemory.cast_ptr_to_adr(exc_data) +
                     llmemory.offsetof(EXCDATA, 'exc_type'))
 


More information about the pypy-commit mailing list