summaryrefslogtreecommitdiff
path: root/rts/Exception.cmm
diff options
context:
space:
mode:
authorSimon Marlow <simonmar@microsoft.com>2007-02-28 13:07:14 +0000
committerSimon Marlow <simonmar@microsoft.com>2007-02-28 13:07:14 +0000
commit9ff76535edb25ab7434284adddb5c64708ecb547 (patch)
tree3f2fb3ec0b66cd1c85d73a56e92e36b57de1b362 /rts/Exception.cmm
parent6a7778b95a726f460288123d0539310bb66302f4 (diff)
downloadhaskell-9ff76535edb25ab7434284adddb5c64708ecb547.tar.gz
Remove vectored returns.
We recently discovered that they aren't a win any more, and just cost code size.
Diffstat (limited to 'rts/Exception.cmm')
-rw-r--r--rts/Exception.cmm57
1 files changed, 15 insertions, 42 deletions
diff --git a/rts/Exception.cmm b/rts/Exception.cmm
index a3f3dd0d82..c86c6d59ff 100644
--- a/rts/Exception.cmm
+++ b/rts/Exception.cmm
@@ -267,43 +267,11 @@ killThreadzh_fast
-------------------------------------------------------------------------- */
#ifdef REG_R1
-#define CATCH_FRAME_ENTRY_TEMPLATE(label,ret) \
- label \
- { \
- Sp = Sp + SIZEOF_StgCatchFrame; \
- jump ret; \
- }
-#else
-#define CATCH_FRAME_ENTRY_TEMPLATE(label,ret) \
- label \
- { \
- W_ rval; \
- rval = Sp(0); \
- Sp = Sp + SIZEOF_StgCatchFrame; \
- Sp(0) = rval; \
- jump ret; \
- }
-#endif
-
-#ifdef REG_R1
#define SP_OFF 0
#else
#define SP_OFF 1
#endif
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_0_ret,%RET_VEC(Sp(SP_OFF),0))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_1_ret,%RET_VEC(Sp(SP_OFF),1))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_2_ret,%RET_VEC(Sp(SP_OFF),2))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_3_ret,%RET_VEC(Sp(SP_OFF),3))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_4_ret,%RET_VEC(Sp(SP_OFF),4))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_5_ret,%RET_VEC(Sp(SP_OFF),5))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_6_ret,%RET_VEC(Sp(SP_OFF),6))
-CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_7_ret,%RET_VEC(Sp(SP_OFF),7))
-
-#if MAX_VECTORED_RTN > 8
-#error MAX_VECTORED_RTN has changed: please modify stg_catch_frame too.
-#endif
-
#if defined(PROFILING)
#define CATCH_FRAME_BITMAP 7
#define CATCH_FRAME_WORDS 4
@@ -319,16 +287,21 @@ CATCH_FRAME_ENTRY_TEMPLATE(stg_catch_frame_7_ret,%RET_VEC(Sp(SP_OFF),7))
INFO_TABLE_RET(stg_catch_frame,
CATCH_FRAME_WORDS, CATCH_FRAME_BITMAP,
- CATCH_FRAME,
- stg_catch_frame_0_ret,
- stg_catch_frame_1_ret,
- stg_catch_frame_2_ret,
- stg_catch_frame_3_ret,
- stg_catch_frame_4_ret,
- stg_catch_frame_5_ret,
- stg_catch_frame_6_ret,
- stg_catch_frame_7_ret)
-CATCH_FRAME_ENTRY_TEMPLATE(,%ENTRY_CODE(Sp(SP_OFF)))
+ CATCH_FRAME)
+#ifdef REG_R1
+ {
+ Sp = Sp + SIZEOF_StgCatchFrame;
+ jump Sp(SP_OFF);
+ }
+#else
+ {
+ W_ rval;
+ rval = Sp(0);
+ Sp = Sp + SIZEOF_StgCatchFrame;
+ Sp(0) = rval;
+ jump Sp(SP_OFF);
+ }
+#endif
/* -----------------------------------------------------------------------------
* The catch infotable