Commit c71ab572 authored by Austin Seipp's avatar Austin Seipp
Browse files

rts: detabify/dewhitespace AutoApply.h


Signed-off-by: default avatarAustin Seipp <austin@well-typed.com>
parent ee0e47d7
...@@ -13,67 +13,67 @@ ...@@ -13,67 +13,67 @@
// ret addr and m arguments taking up n words are on the stack. // ret addr and m arguments taking up n words are on the stack.
// NB. x is a dummy argument attached to the 'for' label so that // NB. x is a dummy argument attached to the 'for' label so that
// BUILD_PAP can be used multiple times in the same function. // BUILD_PAP can be used multiple times in the same function.
#define BUILD_PAP(m,n,f,x) \ #define BUILD_PAP(m,n,f,x) \
W_ pap; \ W_ pap; \
W_ size; \ W_ size; \
W_ i; \ W_ i; \
size = SIZEOF_StgPAP + WDS(n); \ size = SIZEOF_StgPAP + WDS(n); \
HP_CHK_NP_ASSIGN_SP0(size,f); \ HP_CHK_NP_ASSIGN_SP0(size,f); \
TICK_ALLOC_PAP(size, 0); \ TICK_ALLOC_PAP(size, 0); \
CCCS_ALLOC(size); \ CCCS_ALLOC(size); \
pap = Hp + WDS(1) - size; \ pap = Hp + WDS(1) - size; \
SET_HDR(pap, stg_PAP_info, CCCS); \ SET_HDR(pap, stg_PAP_info, CCCS); \
StgPAP_arity(pap) = HALF_W_(arity - m); \ StgPAP_arity(pap) = HALF_W_(arity - m); \
StgPAP_fun(pap) = R1; \ StgPAP_fun(pap) = R1; \
StgPAP_n_args(pap) = HALF_W_(n); \ StgPAP_n_args(pap) = HALF_W_(n); \
i = 0; \ i = 0; \
for##x: \ for##x: \
if (i < n) { \ if (i < n) { \
StgPAP_payload(pap,i) = Sp(1+i); \ StgPAP_payload(pap,i) = Sp(1+i); \
i = i + 1; \ i = i + 1; \
goto for##x; \ goto for##x; \
} \ } \
R1 = pap; \ R1 = pap; \
Sp_adj(1 + n); \ Sp_adj(1 + n); \
jump %ENTRY_CODE(Sp(0)) [R1]; jump %ENTRY_CODE(Sp(0)) [R1];
// Copy the old PAP, build a new one with the extra arg(s) // Copy the old PAP, build a new one with the extra arg(s)
// ret addr and m arguments taking up n words are on the stack. // ret addr and m arguments taking up n words are on the stack.
// NB. x is a dummy argument attached to the 'for' label so that // NB. x is a dummy argument attached to the 'for' label so that
// BUILD_PAP can be used multiple times in the same function. // BUILD_PAP can be used multiple times in the same function.
#define NEW_PAP(m,n,f,x) \ #define NEW_PAP(m,n,f,x) \
W_ pap; \ W_ pap; \
W_ new_pap; \ W_ new_pap; \
W_ size; \ W_ size; \
W_ i; \ W_ i; \
pap = R1; \ pap = R1; \
size = SIZEOF_StgPAP + WDS(TO_W_(StgPAP_n_args(pap))) + WDS(n); \ size = SIZEOF_StgPAP + WDS(TO_W_(StgPAP_n_args(pap))) + WDS(n); \
HP_CHK_NP_ASSIGN_SP0(size,f); \ HP_CHK_NP_ASSIGN_SP0(size,f); \
TICK_ALLOC_PAP(size, 0); \ TICK_ALLOC_PAP(size, 0); \
CCCS_ALLOC(size); \ CCCS_ALLOC(size); \
new_pap = Hp + WDS(1) - size; \ new_pap = Hp + WDS(1) - size; \
SET_HDR(new_pap, stg_PAP_info, CCCS); \ SET_HDR(new_pap, stg_PAP_info, CCCS); \
StgPAP_arity(new_pap) = HALF_W_(arity - m); \ StgPAP_arity(new_pap) = HALF_W_(arity - m); \
W_ n_args; \ W_ n_args; \
n_args = TO_W_(StgPAP_n_args(pap)); \ n_args = TO_W_(StgPAP_n_args(pap)); \
StgPAP_n_args(new_pap) = HALF_W_(n_args + n); \ StgPAP_n_args(new_pap) = HALF_W_(n_args + n); \
StgPAP_fun(new_pap) = StgPAP_fun(pap); \ StgPAP_fun(new_pap) = StgPAP_fun(pap); \
i = 0; \ i = 0; \
for1##x: \ for1##x: \
if (i < n_args) { \ if (i < n_args) { \
StgPAP_payload(new_pap,i) = StgPAP_payload(pap,i); \ StgPAP_payload(new_pap,i) = StgPAP_payload(pap,i); \
i = i + 1; \ i = i + 1; \
goto for1##x; \ goto for1##x; \
} \ } \
i = 0; \ i = 0; \
for2##x: \ for2##x: \
if (i < n) { \ if (i < n) { \
StgPAP_payload(new_pap,n_args+i) = Sp(1+i); \ StgPAP_payload(new_pap,n_args+i) = Sp(1+i); \
i = i + 1; \ i = i + 1; \
goto for2##x; \ goto for2##x; \
} \ } \
R1 = new_pap; \ R1 = new_pap; \
Sp_adj(n+1); \ Sp_adj(n+1); \
jump %ENTRY_CODE(Sp(0)) [R1]; jump %ENTRY_CODE(Sp(0)) [R1];
// Jump to target, saving CCCS and restoring it on return // Jump to target, saving CCCS and restoring it on return
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment