From: sewardj Date: Mon, 15 Jan 2001 09:55:41 +0000 (+0000) Subject: [project @ 2001-01-15 09:55:41 by sewardj] X-Git-Tag: Approximately_9120_patches~2909 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=343a20c03bcdcd01d1e208822b1d2cbc43caf33f;p=ghc-hetmet.git [project @ 2001-01-15 09:55:41 by sewardj] Add mkApUpd0# primop, used to make sure bytecode-compiled top-level things are updateable. --- diff --git a/ghc/compiler/prelude/primops.txt b/ghc/compiler/prelude/primops.txt index 9bee278..264fec2 100644 --- a/ghc/compiler/prelude/primops.txt +++ b/ghc/compiler/prelude/primops.txt @@ -1,5 +1,5 @@ ----------------------------------------------------------------------- --- $Id: primops.txt,v 1.13 2001/01/03 16:44:29 sewardj Exp $ +-- $Id: primops.txt,v 1.14 2001/01/15 09:55:41 sewardj Exp $ -- -- Primitive Operations -- @@ -43,13 +43,24 @@ defaults ------------------------------------------------------------------------ ---- Support for the bytecode linker --- +--- Support for the bytecode interpreter and linker --- ------------------------------------------------------------------------ -- Convert an Addr# to a followable type primop AddrToHValueOp "addrToHValue#" GenPrimOp Addr# -> (# a #) +primop MkApUpd0_Op "mkApUpd0#" GenPrimOp + a -> (# a #) + with + out_of_line = True + +primop NewBCOOp "newBCO#" GenPrimOp + ByteArr# -> ByteArr# -> Array# a -> ByteArr# -> State# s -> (# State# s, BCO# #) + with + has_side_effects = True + out_of_line = True + ------------------------------------------------------------------------ --- Addr# --- @@ -1098,16 +1109,6 @@ primop TouchOp "touch#" GenPrimOp with strictness = { \ arity -> StrictnessInfo [wwLazy, wwPrim] False } ------------------------------------------------------------------------- ---- Bytecode objects --- ------------------------------------------------------------------------- - -primop NewBCOOp "newBCO#" GenPrimOp - ByteArr# -> ByteArr# -> Array# a -> ByteArr# -> State# s -> (# State# s, BCO# #) - with - has_side_effects = True - out_of_line = True - ------------------------------------------------------------------------ --- Weak pointers --- diff --git a/ghc/includes/PrimOps.h b/ghc/includes/PrimOps.h index 2c5a7dc..ff19662 100644 --- a/ghc/includes/PrimOps.h +++ b/ghc/includes/PrimOps.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: PrimOps.h,v 1.71 2001/01/03 16:44:29 sewardj Exp $ + * $Id: PrimOps.h,v 1.72 2001/01/15 09:55:41 sewardj Exp $ * * (c) The GHC Team, 1998-2000 * @@ -934,10 +934,11 @@ EXTFUN_RTS(mkForeignObjzh_fast); /* tagToEnum# is handled directly by the code generator. */ /* ----------------------------------------------------------------------------- - BCOs + BCOs and BCO linkery -------------------------------------------------------------------------- */ EXTFUN_RTS(newBCOzh_fast); +EXTFUN_RTS(mkApUpd0zh_fast); /* ----------------------------------------------------------------------------- Signal processing. Not really primops, but called directly from diff --git a/ghc/lib/std/PrelGHC.hi-boot b/ghc/lib/std/PrelGHC.hi-boot index 219fc8b..b23a0a0 100644 --- a/ghc/lib/std/PrelGHC.hi-boot +++ b/ghc/lib/std/PrelGHC.hi-boot @@ -386,6 +386,7 @@ __export PrelGHC newBCOzh BCOzh + mkApUpd0zh unsafeCoercezh addrToHValuezh diff --git a/ghc/rts/Interpreter.c b/ghc/rts/Interpreter.c index fb474ea..cd29189 100644 --- a/ghc/rts/Interpreter.c +++ b/ghc/rts/Interpreter.c @@ -5,8 +5,8 @@ * Copyright (c) 1994-2000. * * $RCSfile: Interpreter.c,v $ - * $Revision: 1.11 $ - * $Date: 2001/01/12 12:06:24 $ + * $Revision: 1.12 $ + * $Date: 2001/01/15 09:55:41 $ * ---------------------------------------------------------------------------*/ #ifdef GHCI @@ -344,6 +344,7 @@ StgThreadReturnCode interpretBCO ( Capability* cap ) //fprintf(stderr, "---PACK p %d, np %d\n", // (int) itbl->layout.payload.ptrs, // (int) itbl->layout.payload.nptrs ); + ASSERT( itbl->layout.payload.ptrs + itbl->layout.payload.nptrs > 0); SET_HDR(con, BCO_ITBL(o_itbl), CCS_SYSTEM/*ToDo*/); for (i = 0; i < n_words; i++) con->payload[i] = (StgClosure*)StackWord(i); diff --git a/ghc/rts/PrimOps.hc b/ghc/rts/PrimOps.hc index 367ee5c..d78f505 100644 --- a/ghc/rts/PrimOps.hc +++ b/ghc/rts/PrimOps.hc @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: PrimOps.hc,v 1.66 2000/12/20 15:17:55 rrt Exp $ + * $Id: PrimOps.hc,v 1.67 2001/01/15 09:55:41 sewardj Exp $ * * (c) The GHC Team, 1998-2000 * @@ -1042,6 +1042,26 @@ FN_(newBCOzh_fast) RET_P(bco); FE_ } + +FN_(mkApUpd0zh_fast) +{ + /* R1.p = the fn for the AP_UPD + */ + StgAP_UPD* ap; + FB_ + HP_CHK_GEN_TICKY(AP_sizeW(0), R1_PTR, mkApUpd0zh_fast,); + TICK_ALLOC_PRIM(sizeofW(StgHeader), AP_sizeW(0)-sizeofW(StgHeader), 0); + CCS_ALLOC(CCCS,AP_sizeW(0)); /* ccs prof */ + ap = (StgAP_UPD *) (Hp + 1 - AP_sizeW(0)); + SET_HDR(ap, &stg_AP_UPD_info, CCCS); + + ap->n_args = 0; + ap->fun = R1.cl; + + TICK_RET_UNBOXED_TUP(1); + RET_P(ap); + FE_ +} #endif /* -----------------------------------------------------------------------------