X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FPrimOps.cmm;h=12322f297fde1243e65e21138b0506a18cbd5c9d;hb=d0ea71ec5000050ec22487029a9fcf6da76ee422;hp=bb9faddef59f7689c198eb9637fb466cde1b7000;hpb=cdce647711c0f46f5799b24de087622cb77e647f;p=ghc-hetmet.git diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index bb9fadd..12322f2 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -1884,8 +1884,6 @@ unpackClosurezh_fast W_ info, ptrs, nptrs, p, ptrs_arr, nptrs_arr; info = %GET_STD_INFO(R1); - ptrs = TO_W_(%INFO_PTRS(info)); - nptrs = TO_W_(%INFO_NPTRS(info)); // Some closures have non-standard layout, so we omit those here. W_ type; @@ -1903,6 +1901,8 @@ unpackClosurezh_fast goto out; } default: { + ptrs = TO_W_(%INFO_PTRS(info)); + nptrs = TO_W_(%INFO_NPTRS(info)); goto out; }} out: @@ -2165,13 +2165,18 @@ noDuplicatezh_fast getApStackValzh_fast { - W_ ap_stack, offset, val; + W_ ap_stack, offset, val, ok; - /* args: R1 = tso, R2 = offset */ + /* args: R1 = AP_STACK, R2 = offset */ ap_stack = R1; offset = R2; - val = StgClosure_payload(ap_stack,offset); - - RET_P(val); + if (%INFO_PTR(ap_stack) == stg_AP_STACK_info) { + ok = 1; + val = StgAP_STACK_payload(ap_stack,offset); + } else { + ok = 0; + val = R1; + } + RET_NP(ok,val); }