summaryrefslogtreecommitdiff
path: root/includes/rts
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2013-02-14 08:46:55 +0000
committerSimon Marlow <marlowsd@gmail.com>2013-02-14 10:56:58 +0000
commit7e7a4e4d7e9e84b2c57d3d55e372e738b5f8dbf5 (patch)
treeb5ab2b56418c09f01275970cc7d4e6629b0e7b43 /includes/rts
parent65a0e1eb88fb48d085f8da498a7acc2fd345c2a8 (diff)
downloadhaskell-7e7a4e4d7e9e84b2c57d3d55e372e738b5f8dbf5.tar.gz
Separate StablePtr and StableName tables (#7674)
To improve performance of StablePtr.
Diffstat (limited to 'includes/rts')
-rw-r--r--includes/rts/Stable.h17
1 files changed, 10 insertions, 7 deletions
diff --git a/includes/rts/Stable.h b/includes/rts/Stable.h
index ec867e486c..9f785eea01 100644
--- a/includes/rts/Stable.h
+++ b/includes/rts/Stable.h
@@ -21,19 +21,22 @@ StgStablePtr getStablePtr (StgPtr p);
PRIVATE from here.
-------------------------------------------------------------------------- */
-typedef struct {
- StgPtr addr; /* Haskell object, free list, or NULL */
- StgPtr old; /* old Haskell object, used during GC */
- StgWord ref; /* used for reference counting */
- StgClosure *sn_obj; /* the StableName object (or NULL) */
+typedef struct {
+ StgPtr addr; /* Haskell object, free list, or NULL */
+ StgPtr old; /* old Haskell object, used during GC */
+ StgClosure *sn_obj; /* the StableName object (or NULL) */
} snEntry;
-extern DLL_IMPORT_RTS snEntry *stable_ptr_table;
+typedef struct {
+ StgPtr addr;
+} spEntry;
+
+extern DLL_IMPORT_RTS snEntry *stable_name_table;
+extern DLL_IMPORT_RTS spEntry *stable_ptr_table;
EXTERN_INLINE
StgPtr deRefStablePtr(StgStablePtr sp)
{
- ASSERT(stable_ptr_table[(StgWord)sp].ref > 0);
return stable_ptr_table[(StgWord)sp].addr;
}