projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2000-03-13 09:57:16 by simonmar]
[ghc-hetmet.git]
/
ghc
/
rts
/
PrimOps.hc
diff --git
a/ghc/rts/PrimOps.hc
b/ghc/rts/PrimOps.hc
index
01d0a0a
..
709947a
100644
(file)
--- a/
ghc/rts/PrimOps.hc
+++ b/
ghc/rts/PrimOps.hc
@@
-1,5
+1,5
@@
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- * $Id: PrimOps.hc,v 1.38 2000/01/13 12:40:15 simonmar Exp $
+ * $Id: PrimOps.hc,v 1.43 2000/02/28 13:59:43 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
*
* (c) The GHC Team, 1998-1999
*
@@
-183,7
+183,13
@@
W_ GHC_ZCCReturnable_static_info[0];
#else /* 0 Regs available */
#define PUSH_P(o,x) Sp[-o] = (W_)(x)
#else /* 0 Regs available */
#define PUSH_P(o,x) Sp[-o] = (W_)(x)
-#define PUSH_N(o,x) Sp[1-o] = (W_)(x); /* Sp[-o] = ARGTAG(1) */
+
+#ifdef DEBUG
+#define PUSH_N(o,x) Sp[1-o] = (W_)(x); Sp[-o] = ARG_TAG(1);
+#else
+#define PUSH_N(o,x) Sp[1-o] = (W_)(x);
+#endif
+
#define PUSHED(m) Sp -= (m); JMP_(ENTRY_CODE(Sp[m]));
/* Here's how to construct these macros:
#define PUSHED(m) Sp -= (m); JMP_(ENTRY_CODE(Sp[m]));
/* Here's how to construct these macros:
@@
-361,12
+367,16
@@
FN_(mkWeakzh_fast)
{
/* R1.p = key
R2.p = value
{
/* R1.p = key
R2.p = value
- R3.p = finalizer
+ R3.p = finalizer (or NULL)
*/
StgWeak *w;
FB_
*/
StgWeak *w;
FB_
- HP_CHK_GEN_TICKY(sizeofW(StgWeak), R1_PTR|R2_PTR|R3_PTR, mkWeakzh_fast,);
+ if (R3.cl == NULL) {
+ R3.cl = &NO_FINALIZER_closure;
+ }
+
+ HP_CHK_GEN_TICKY(sizeofW(StgWeak),R1_PTR|R2_PTR|R3_PTR, mkWeakzh_fast,);
TICK_ALLOC_PRIM(sizeofW(StgHeader)+1, // +1 is for the link field
sizeofW(StgWeak)-sizeofW(StgHeader)-1, 0);
CCS_ALLOC(CCCS,sizeofW(StgWeak)); /* ccs prof */
TICK_ALLOC_PRIM(sizeofW(StgHeader)+1, // +1 is for the link field
sizeofW(StgWeak)-sizeofW(StgHeader)-1, 0);
CCS_ALLOC(CCCS,sizeofW(StgWeak)); /* ccs prof */
@@
-376,11
+386,7
@@
FN_(mkWeakzh_fast)
w->key = R1.cl;
w->value = R2.cl;
w->key = R1.cl;
w->value = R2.cl;
- if (R3.cl) {
- w->finalizer = R3.cl;
- } else {
- w->finalizer = &NO_FINALIZER_closure;
- }
+ w->finalizer = R3.cl;
w->link = weak_ptr_list;
weak_ptr_list = w;
w->link = weak_ptr_list;
weak_ptr_list = w;
@@
-633,7
+639,7
@@
FN_(word64ToIntegerzh_fast)
FN_(name) \
{ \
MP_INT arg1, arg2, result; \
FN_(name) \
{ \
MP_INT arg1, arg2, result; \
- I_ s1, s2; \
+ I_ s1, s2; \
StgArrWords* d1; \
StgArrWords* d2; \
FB_ \
StgArrWords* d1; \
StgArrWords* d2; \
FB_ \
@@
-668,7
+674,7
@@
FN_(name) \
FN_(name) \
{ \
MP_INT arg1, arg2, result1, result2; \
FN_(name) \
{ \
MP_INT arg1, arg2, result1, result2; \
- I_ s1, s2; \
+ I_ s1, s2; \
StgArrWords* d1; \
StgArrWords* d2; \
FB_ \
StgArrWords* d1; \
StgArrWords* d2; \
FB_ \
@@
-907,7
+913,14
@@
FN_(putMVarzh_fast)
*/
if (mvar->head != (StgTSO *)&END_TSO_QUEUE_closure) {
ASSERT(mvar->head->why_blocked == BlockedOnMVar);
*/
if (mvar->head != (StgTSO *)&END_TSO_QUEUE_closure) {
ASSERT(mvar->head->why_blocked == BlockedOnMVar);
+#if defined(GRAN)
+ mvar->head = RET_STGCALL2(StgTSO *,unblockOne,mvar->head,mvar);
+#elif defined(PAR)
+ // ToDo: check 2nd arg (mvar) is right
+ mvar->head = RET_STGCALL2(StgTSO *,unblockOne,mvar->head,mvar);
+#else
mvar->head = RET_STGCALL1(StgTSO *,unblockOne,mvar->head);
mvar->head = RET_STGCALL1(StgTSO *,unblockOne,mvar->head);
+#endif
if (mvar->head == (StgTSO *)&END_TSO_QUEUE_closure) {
mvar->tail = (StgTSO *)&END_TSO_QUEUE_closure;
}
if (mvar->head == (StgTSO *)&END_TSO_QUEUE_closure) {
mvar->tail = (StgTSO *)&END_TSO_QUEUE_closure;
}