-cgLetNoEscapeBody binder cc all_args body uniq
- =
- -- this is where the stack frame lives:
- getRealSp `thenFC` \sp ->
-
- -- This is very much like bindUnboxedTupleComponents (ToDo)
- let
- arg_kinds = map idPrimRep all_args
- (arg_regs, _) = assignRegs [{-nothing live-}] arg_kinds
- (reg_args, stk_args) = splitAtList arg_regs all_args
-
- -- separate the rest of the args into pointers and non-pointers
- ( ptr_args, nptr_args ) =
- partition (isFollowableRep . idPrimRep) stk_args
-
- (ptr_sp, ptr_offsets) = mkVirtStkOffsets sp idPrimRep ptr_args
- (nptr_sp, nptr_offsets) = mkVirtStkOffsets ptr_sp idPrimRep nptr_args
-
- ptrs = ptr_sp - sp
- nptrs = nptr_sp - ptr_sp
- in
-
- -- Bind args to appropriate regs/stk locns
- bindArgsToRegs reg_args arg_regs `thenC`
- mapCs bindNewToStack ptr_offsets `thenC`
- mapCs bindNewToStack nptr_offsets `thenC`
-
- setRealAndVirtualSp nptr_sp `thenC`
+cgLetNoEscapeBody bndr cc cc_slot all_args body
+ = bindUnboxedTupleComponents all_args `thenFC` \ (arg_regs, ptrs, nptrs, ret_slot) ->