stg_sel_##offset##_upd_entry: the ENTER() here is unnecessary, because
we know the closure in R1 will evaluate to a constructor, so we can
save some time by just entering it directly.
UPD_BH_UPDATABLE(); \
LDV_ENTER(R1); \
PUSH_UPD_FRAME(Sp - SIZEOF_StgUpdateFrame, R1); \
UPD_BH_UPDATABLE(); \
LDV_ENTER(R1); \
PUSH_UPD_FRAME(Sp - SIZEOF_StgUpdateFrame, R1); \
SAVE_CCCS(WITHUPD_FRAME_SIZE); \
W_[Sp-WITHUPD_FRAME_SIZE] = stg_sel_ret_##offset##_upd_info; \
SAVE_CCCS(WITHUPD_FRAME_SIZE); \
W_[Sp-WITHUPD_FRAME_SIZE] = stg_sel_ret_##offset##_upd_info; \
- R1 = StgClosure_payload(R1,0); \
+ R1 = StgClosure_payload(R1,0); \
Sp = Sp - WITHUPD_FRAME_SIZE; \
Sp = Sp - WITHUPD_FRAME_SIZE; \
+ /* NOTE: no need to ENTER() here, we know the closure cannot evaluate to a function,
+ because we're going to do a field selection on the result. */
SELECTOR_CODE_UPD(0)
SELECTOR_CODE_UPD(1)
SELECTOR_CODE_UPD(0)
SELECTOR_CODE_UPD(1)