Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
clean-compiler-and-rts
compiler
Commits
12000523
Commit
12000523
authored
Jan 29, 2019
by
johnvg@science.ru.nl
Browse files
use buildhr instruction to make records
parent
407737c6
Changes
7
Hide whitespace changes
Inline
Side-by-side
backendC/CleanCompilerSources/codegen.c
View file @
12000523
...
...
@@ -925,17 +925,17 @@ static void CodeRule (ImpRuleP rule)
GenFillArrayAndPop
(
1
,
ReleaseAndFill
);
break
;
}
GenPopB
(
bsize
);
}
else
{
switch
(
function_state_p
[
-
1
].
state_type
){
case
TupleState
:
BuildTuple
(
asize
,
bsize
,
asize
,
bsize
,
function_state_p
[
-
1
].
state_arity
,
function_state_p
[
-
1
].
state_tuple_arguments
,
asize
,
bsize
,
asize
,
NormalFill
,
True
);
GenUpdatePopA
(
0
,
asize
);
GenPopB
(
bsize
);
break
;
case
RecordState
:
BuildRecord
(
function_state_p
[
-
1
].
state_record_symbol
,
asize
,
bsize
,
asize
,
bsize
,
asize
,
bsize
,
asize
,
NormalFill
,
True
);
GenUpdatePopA
(
0
,
asize
);
BuildNewRecordPop
(
function_state_p
[
-
1
].
state_record_symbol
,
asize
,
bsize
);
break
;
case
ArrayState
:
GenBuildArrayPop
();
...
...
@@ -943,7 +943,6 @@ static void CodeRule (ImpRuleP rule)
}
}
GenPopB
(
bsize
);
GenRtn
(
1
,
0
,
OnAState
);
}
...
...
backendC/CleanCompilerSources/codegen1.c
View file @
12000523
...
...
@@ -1856,18 +1856,16 @@ void ApplyEntry (StateS *const function_state_p,int arity,Label ea_lab,int ea_la
BuildTuple
(
asize
,
bsize
,
asize
,
bsize
,
function_state_p
[
-
1
].
state_arity
,
function_state_p
[
-
1
].
state_tuple_arguments
,
asize
,
bsize
,
asize
,
NormalFill
,
True
);
GenUpdatePopA
(
0
,
asize
);
GenPopB
(
bsize
);
break
;
case
RecordState
:
BuildRecord
(
function_state_p
[
-
1
].
state_record_symbol
,
asize
,
bsize
,
asize
,
bsize
,
asize
,
bsize
,
asize
,
NormalFill
,
True
);
GenUpdatePopA
(
0
,
asize
);
BuildNewRecordPop
(
function_state_p
[
-
1
].
state_record_symbol
,
asize
,
bsize
);
break
;
case
ArrayState
:
GenBuildArrayPop
();
break
;
}
GenPopB
(
bsize
);
GenRtn
(
1
,
0
,
OnAState
);
GenRtn
(
1
,
0
,
OnAState
);
#if SHARE_UPDATE_CODE
}
#endif
...
...
@@ -3870,7 +3868,7 @@ static int generate_code_for_switch_node (NodeP node,int asp,int bsp,struct esc
LabDef
record_lab
;
ConvertSymbolToRLabel
(
&
record_lab
,
BasicSymbolStates
[
integer_denot
].
state_record_symbol
);
GenBuild
R
(
&
record_lab
,
1
,
1
,
0
,
0
,
True
);
GenBuild
hr
(
&
record_lab
,
1
,
1
);
}
}
else
if
(
symbol
->
symb_kind
==
rational_denot
){
push_rational
(
symbol
);
...
...
@@ -3878,7 +3876,7 @@ static int generate_code_for_switch_node (NodeP node,int asp,int bsp,struct esc
LabDef
ratio_record_lab
;
ConvertSymbolToKLabel
(
&
ratio_record_lab
,
special_types
[
1
]
->
sdef_type
->
type_constructors
->
cl_constructor
->
type_node_symbol
->
symb_def
);
GenBuild
R
(
&
ratio_record_lab
,
2
,
0
,
0
,
0
,
True
);
GenBuild
hr
(
&
ratio_record_lab
,
2
,
0
);
}
}
else
BuildBasic
(
BasicSymbolStates
[
symbol
->
symb_kind
].
state_object
,
symbol
->
symb_val
);
...
...
@@ -3902,7 +3900,7 @@ static int generate_code_for_switch_node (NodeP node,int asp,int bsp,struct esc
GenPushZ
(
symbol
->
symb_val
);
ConvertSymbolToRLabel
(
&
record_lab
,
BasicSymbolStates
[
integer_denot
].
state_record_symbol
);
GenBuild
R
(
&
record_lab
,
1
,
1
,
0
,
0
,
True
);
GenBuild
hr
(
&
record_lab
,
1
,
1
);
}
else
if
(
symbol
->
symb_kind
==
rational_denot
){
LabDef
ratio_record_lab
;
...
...
@@ -3910,7 +3908,7 @@ static int generate_code_for_switch_node (NodeP node,int asp,int bsp,struct esc
ConvertSymbolToKLabel
(
&
ratio_record_lab
,
special_types
[
1
]
->
sdef_type
->
type_constructors
->
cl_constructor
->
type_node_symbol
->
symb_def
);
GenBuild
R
(
&
ratio_record_lab
,
2
,
0
,
0
,
0
,
True
);
GenBuild
hr
(
&
ratio_record_lab
,
2
,
0
);
}
else
BuildBasic
(
BasicSymbolStates
[
symbol
->
symb_kind
].
state_object
,
symbol
->
symb_val
);
...
...
backendC/CleanCompilerSources/codegen2.c
View file @
12000523
...
...
@@ -454,8 +454,7 @@ void CoerceArgumentUsingStackFrames (StateS demstate, StateS offstate,int aindex
*
asp_p
+=
SizeOfAStackElem
;
break
;
case
RecordState
:
BuildRecord
(
offstate
.
state_record_symbol
,
aindex
,
bindex
,
*
asp_p
,
*
bsp
,
asize
,
bsize
,
*
asp_p
,
NormalFill
,
True
);
BuildNewRecord
(
offstate
.
state_record_symbol
,
aindex
,
bindex
,
*
asp_p
,
*
bsp
,
asize
,
bsize
);
*
asp_p
+=
SizeOfAStackElem
;
break
;
case
ArrayState
:
...
...
@@ -591,11 +590,29 @@ void BuildRecord (SymbDef record_sdef,int aindex,int bindex,int asp,int bsp,int
ConvertSymbolToRLabel
(
&
record_lab
,
record_sdef
);
if
(
newnode
)
GenBuildR
(
&
record_lab
,
asize
,
bsize
,
asp
-
aindex
,
bsp
-
bindex
,
False
);
GenBuildR
(
&
record_lab
,
asize
,
bsize
,
asp
-
aindex
,
bsp
-
bindex
);
else
GenFillR
(
&
record_lab
,
asize
,
bsize
,
asp
-
rootindex
,
asp
-
aindex
,
bsp
-
bindex
,
fkind
,
False
);
}
void
BuildNewRecord
(
SymbDef
record_sdef
,
int
aindex
,
int
bindex
,
int
asp
,
int
bsp
,
int
asize
,
int
bsize
)
{
LabDef
record_lab
;
ConvertSymbolToRLabel
(
&
record_lab
,
record_sdef
);
GenBuildR
(
&
record_lab
,
asize
,
bsize
,
asp
-
aindex
,
bsp
-
bindex
);
}
void
BuildNewRecordPop
(
SymbDef
record_sdef
,
int
asize
,
int
bsize
)
{
LabDef
record_lab
;
ConvertSymbolToRLabel
(
&
record_lab
,
record_sdef
);
GenBuildhr
(
&
record_lab
,
asize
,
bsize
);
}
void
PackArgument
(
StateS
argstate
,
int
aindex
,
int
bindex
,
int
asp
,
int
bsp
,
int
offasize
,
int
offbsize
)
{
if
(
IsSimpleState
(
argstate
)){
...
...
@@ -610,8 +627,7 @@ void PackArgument (StateS argstate,int aindex,int bindex,int asp,int bsp,int off
offasize
,
offbsize
,
asp
,
NormalFill
,
True
);
return
;
case
RecordState
:
BuildRecord
(
argstate
.
state_record_symbol
,
aindex
,
bindex
,
asp
,
bsp
,
offasize
,
offbsize
,
asp
,
NormalFill
,
True
);
BuildNewRecord
(
argstate
.
state_record_symbol
,
aindex
,
bindex
,
asp
,
bsp
,
offasize
,
offbsize
);
return
;
case
ArrayState
:
GenBuildArray
(
asp
-
aindex
);
...
...
@@ -686,13 +702,14 @@ void CoerceArgumentOnTopOfStack (int *asp_p,int *bsp_p,StateS argstate,StateS no
*
asp_p
+=
1
;
GenUpdatePopA
(
0
,
asize
);
*
asp_p
-=
asize
;
GenPopB
(
bsize
);
*
bsp_p
-=
bsize
;
break
;
case
RecordState
:
BuildRecord
(
nodestate
.
state_record_symbol
,
*
asp_p
,
*
bsp_p
,
*
asp_p
,
*
bsp_p
,
asize
,
bsize
,
*
asp_p
,
NormalFill
,
True
);
BuildNewRecordPop
(
nodestate
.
state_record_symbol
,
asize
,
bsize
);
*
asp_p
+=
1
;
GenUpdatePopA
(
0
,
asize
);
*
asp_p
-=
asize
;
*
bsp_p
-=
bsize
;
break
;
case
ArrayState
:
if
(
asize
==
1
)
...
...
@@ -703,10 +720,10 @@ void CoerceArgumentOnTopOfStack (int *asp_p,int *bsp_p,StateS argstate,StateS no
GenUpdatePopA
(
0
,
asize
);
*
asp_p
-=
asize
;
}
GenPopB
(
bsize
);
*
bsp_p
-=
bsize
;
break
;
}
GenPopB
(
bsize
);
*
bsp_p
-=
bsize
;
}
else
{
if
(
argstate
.
state_type
==
TupleState
)
AdjustTuple
(
asize
,
bsize
,
asp_p
,
bsp_p
,
argstate
.
state_arity
,
...
...
@@ -1782,7 +1799,7 @@ static void FillOrReduceFieldSelection (Node node,SymbDef seldef,int *asp_p,int
*
asp_p
+=
a_size
;
*
bsp_p
+=
b_size
;
CoerceArgumentOnTopOfStack
(
asp_p
,
bsp_p
,
node
->
node_state
,
record_sdef
->
sdef_record_state
.
state_record_arguments
[
fieldnr
],
a_size
,
b_size
);
CoerceArgumentOnTopOfStack
(
asp_p
,
bsp_p
,
node
->
node_state
,
record_sdef
->
sdef_record_state
.
state_record_arguments
[
fieldnr
],
a_size
,
b_size
);
decrement_reference_count_of_node_id
(
arg_node_id
,
&
code_gen_node_ids_p
->
free_node_ids
);
}
}
...
...
@@ -2716,7 +2733,7 @@ static void FillSymbol (Node node,SymbDef sdef,int *asp_p,int *bsp_p,NodeId upda
*
bsp_p
-=
bsize
;
if
(
update_node_id
==
NULL
){
GenBuild
R
(
&
record_label
,
asize
,
bsize
,
0
,
0
,
True
);
GenBuild
hr
(
&
record_label
,
asize
,
bsize
);
*
asp_p
+=
1
;
}
else
{
GenFillR
(
&
record_label
,
asize
,
bsize
,
*
asp_p
+
asize
-
update_node_id
->
nid_a_index
,
0
,
0
,
node
->
node_state
.
state_kind
==
SemiStrict
?
ReleaseAndFill
:
NormalFill
,
True
);
...
...
@@ -2788,7 +2805,7 @@ static void FillSymbol (Node node,SymbDef sdef,int *asp_p,int *bsp_p,NodeId upda
if
(
update_node_id
==
NULL
){
*
asp_p
+=
1
;
GenBuild
R
(
&
record_label
,
asize
,
bsize
,
0
,
0
,
True
);
GenBuild
hr
(
&
record_label
,
asize
,
bsize
);
}
else
{
GenFillR
(
&
record_label
,
asize
,
bsize
,
*
asp_p
+
asize
-
update_node_id
->
nid_a_index
,
0
,
0
,
node
->
node_state
.
state_kind
==
SemiStrict
?
ReleaseAndFill
:
NormalFill
,
True
);
}
...
...
@@ -3249,8 +3266,8 @@ void push_rational (SymbolP symb)
ConvertSymbolToRLabel
(
&
integer_record_lab
,
BasicSymbolStates
[
integer_denot
].
state_record_symbol
);
GenPushZR
(
symb
->
symb_val
);
GenBuildR
(
&
integer_record_lab
,
1
,
1
,
1
,
1
,
False
);
GenBuildR
(
&
integer_record_lab
,
1
,
1
,
0
+
1
,
0
,
False
);
GenBuildR
(
&
integer_record_lab
,
1
,
1
,
1
,
1
);
GenBuildR
(
&
integer_record_lab
,
1
,
1
,
0
+
1
,
0
);
GenPopB
(
2
);
GenUpdateA
(
1
,
3
);
GenUpdateA
(
0
,
2
);
...
...
@@ -3416,7 +3433,7 @@ static void FillNormalNode (Node node,int *asp_p,int *bsp_p,NodeId update_node_i
if
(
update_node_id
==
NULL
){
*
asp_p
+=
1
-
a_size
;
if
(
symb
->
symb_head_strictness
==
4
)
GenBuild
R
(
strict_cons_lab_p
,
a_size
,
b_size
,
0
,
0
,
True
);
GenBuild
hr
(
strict_cons_lab_p
,
a_size
,
b_size
);
else
GenBuildh
(
node
->
node_arity
==
2
?
&
cons_lab
:
strict_cons_lab_p
,
a_size
);
}
else
{
...
...
@@ -3478,7 +3495,7 @@ static void FillNormalNode (Node node,int *asp_p,int *bsp_p,NodeId update_node_i
ConvertSymbolToRLabel
(
&
record_lab
,
BasicSymbolStates
[
integer_denot
].
state_record_symbol
);
if
(
update_node_id
==
NULL
)
GenBuild
R
(
&
record_lab
,
1
,
1
,
0
,
0
,
True
);
GenBuild
hr
(
&
record_lab
,
1
,
1
);
else
{
GenFillR
(
&
record_lab
,
1
,
1
,
*
asp_p
-
update_node_id
->
nid_a_index
,
0
,
0
,
node
->
node_state
.
state_kind
==
SemiStrict
?
ReleaseAndFill
:
NormalFill
,
True
);
*
asp_p
-=
1
;
...
...
@@ -3495,7 +3512,7 @@ static void FillNormalNode (Node node,int *asp_p,int *bsp_p,NodeId update_node_i
ConvertSymbolToKLabel
(
&
ratio_record_lab
,
special_types
[
1
]
->
sdef_type
->
type_constructors
->
cl_constructor
->
type_node_symbol
->
symb_def
);
if
(
update_node_id
==
NULL
){
GenBuild
R
(
&
ratio_record_lab
,
2
,
0
,
0
,
0
,
True
);
GenBuild
hr
(
&
ratio_record_lab
,
2
,
0
);
*
asp_p
+=
1
;
}
else
{
GenFillR
(
&
ratio_record_lab
,
2
,
0
,
*
asp_p
+
2
-
update_node_id
->
nid_a_index
,
0
,
0
,
node
->
node_state
.
state_kind
==
SemiStrict
?
ReleaseAndFill
:
NormalFill
,
True
);
...
...
@@ -4136,19 +4153,20 @@ static void FillUpdateNode (Node node,int *asp_p,int *bsp_p,NodeId update_node_i
record_state_p
->
state_record_arguments
,
record_a_size
,
record_b_size
,
&
end_args_a_offset
,
&
end_args_b_offset
);
if
(
update_node_id
==
NULL
){
BuildRecord
(
record_state_p
->
state_record_symbol
,
*
asp_p
,
*
bsp_p
,
*
asp_p
,
*
bsp_p
,
record_a_size
,
record_b_size
,
0
,
node
->
node_state
.
state_kind
==
SemiStrict
?
PartialFill
:
NormalFill
,
Tru
e
);
Gen
Update
Pop
A
(
0
,
end_args_
a
_offset
);
Build
New
Record
Pop
(
record_state_p
->
state_record_symbol
,
record_a_size
,
record_b_size
);
GenUpdatePopA
(
0
,
end_args_a_offset
-
record_a_siz
e
);
GenPop
B
(
end_args_
b
_offset
-
record_b_size
);
*
asp_p
+=
1
-
end_args_a_offset
;
*
bsp_p
-=
end_args_b_offset
;
}
else
{
BuildRecord
(
record_state_p
->
state_record_symbol
,
*
asp_p
,
*
bsp_p
,
*
asp_p
,
*
bsp_p
,
record_a_size
,
record_b_size
,
*
asp_p
-
update_node_id
->
nid_a_index
,
node
->
node_state
.
state_kind
==
SemiStrict
?
PartialFill
:
NormalFill
,
False
);
GenPopA
(
end_args_a_offset
);
*
asp_p
-=
end_args_a_offset
;
}
GenPopB
(
end_args_b_offset
);
*
bsp_p
-=
end_args_b_offset
;
}
}
return
;
#if DESTRUCTIVE_RECORD_UPDATES
...
...
backendC/CleanCompilerSources/codegen2.h
View file @
12000523
...
...
@@ -46,6 +46,8 @@ extern void BuildTuple (int aindex, int bindex, int asp, int bsp, int arity,
extern
void
BuildRecord
(
SymbDef
seldef
,
int
aindex
,
int
bindex
,
int
asp
,
int
bsp
,
int
asize
,
int
bsize
,
int
rootindex
,
FillKind
fkind
,
Bool
popargs
);
extern
void
BuildNewRecord
(
SymbDef
seldef
,
int
aindex
,
int
bindex
,
int
asp
,
int
bsp
,
int
asize
,
int
bsize
);
extern
void
BuildNewRecordPop
(
SymbDef
seldef
,
int
asize
,
int
bsize
);
extern
void
CoerceArgumentUsingStackFrames
(
StateS
demstate
,
StateS
offstate
,
int
aindex
,
int
bindex
,
int
*
asp
,
int
*
bsp
,
int
*
anext
,
int
*
bnext
,
int
asize
,
int
bsize
);
extern
void
DetermineArrayElemDescr
(
StateS
elemstate
,
Label
lab
);
...
...
backendC/CleanCompilerSources/codegen3.c
View file @
12000523
...
...
@@ -256,11 +256,16 @@ void RedirectResultAndReturn (int asp,int bsp,int source_a_index,int source_b_in
offstate
.
state_arity
,
offstate
.
state_tuple_arguments
,
offasize
,
offbsize
,
0
,
ReleaseAndFill
,
True
);
GenUpdatePopA
(
0
,
asp
);
GenPopB
(
bsp
);
break
;
case
RecordState
:
BuildRecord
(
offstate
.
state_record_symbol
,
source_a_index
,
source_b_index
,
asp
,
bsp
,
offasize
,
offbsize
,
0
,
ReleaseAndFill
,
True
);
if
(
source_a_index
==
asp
&&
(
source_b_index
==
bsp
||
offbsize
==
0
))
BuildNewRecordPop
(
offstate
.
state_record_symbol
,
offasize
,
offbsize
);
else
{
BuildNewRecord
(
offstate
.
state_record_symbol
,
source_a_index
,
source_b_index
,
asp
,
bsp
,
offasize
,
offbsize
);
GenUpdatePopA
(
0
,
asp
);
GenPopB
(
bsp
);
}
break
;
case
ArrayState
:
if
(
asp
==
source_a_index
&&
asp
==
1
)
...
...
@@ -268,9 +273,9 @@ void RedirectResultAndReturn (int asp,int bsp,int source_a_index,int source_b_in
else
{
GenBuildArray
(
asp
-
source_a_index
);
GenUpdatePopA
(
0
,
asp
);
}
}
GenPopB
(
bsp
);
}
}
else
{
switch
(
offstate
.
state_type
){
case
TupleState
:
...
...
@@ -977,7 +982,7 @@ static void CodeNormalRootNode (Node root,NodeId rootid,int asp,int bsp,CodeGenN
LabDef
record_lab
;
ConvertSymbolToRLabel
(
&
record_lab
,
BasicSymbolStates
[
integer_denot
].
state_record_symbol
);
GenBuild
R
(
&
record_lab
,
1
,
1
,
0
,
0
,
True
);
GenBuild
hr
(
&
record_lab
,
1
,
1
);
GenRtn
(
1
,
0
,
OnAState
);
}
else
GenRtn
(
1
,
1
,
resultstate
);
...
...
@@ -1434,12 +1439,12 @@ static void CodeRootUpdateNode (Node root,NodeId rootid,int asp,int bsp,CodeGenN
BuildRecord
(
record_state_p
->
state_record_symbol
,
asp
,
bsp
,
asp
,
bsp
,
record_a_size
,
record_b_size
,
0
,
ReleaseAndFill
,
False
);
GenPopA
(
asp
);
GenPopB
(
bsp
);
}
else
{
BuildRecord
(
record_state_p
->
state_record_symbol
,
asp
,
bsp
,
asp
,
bsp
,
record_a_size
,
record_b_size
,
asp
,
NormalFill
,
Tru
e
);
Gen
Update
Pop
A
(
0
,
asp
);
Build
New
Record
Pop
(
record_state_p
->
state_record_symbol
,
record_a_size
,
record_b_size
);
GenUpdatePopA
(
0
,
asp
-
record_a_siz
e
);
GenPop
B
(
bsp
-
record_b_size
);
}
GenPopB
(
bsp
);
GenRtn
(
1
,
0
,
OnAState
);
function_called_only_curried_or_lazy_with_one_return
=
0
;
...
...
backendC/CleanCompilerSources/instructions.c
View file @
12000523
...
...
@@ -610,6 +610,7 @@ enum {
#define Ifill2_r "fill2_r"
#define Ifill3_r "fill3_r"
#define Ibuildhr "buildhr"
#define Ibuild_r "build_r"
#define Ifill_a "fill_a"
...
...
@@ -2080,7 +2081,19 @@ void GenFill3R (Label symblab,int n_a_args,int n_b_args,int rootoffset,char bits
FPrintF
(
OutFile
,
" %d %d %d %s"
,
n_a_args
,
n_b_args
,
rootoffset
,
bits
);
}
void
GenBuildR
(
Label
symblab
,
int
nr_a_args
,
int
nr_b_args
,
int
a_offset
,
int
b_offset
,
Bool
pop_args
)
void
GenBuildhr
(
Label
symblab
,
int
nr_a_args
,
int
nr_b_args
)
{
put_instruction_
(
Ibuildhr
);
if
(
!
symblab
->
lab_issymbol
||
DescriptorNeeded
(
symblab
->
lab_symbol
))
GenLabel
(
symblab
);
else
FPutS
(
empty_lab
.
lab_name
,
OutFile
);
FPrintF
(
OutFile
,
" %d %d"
,
nr_a_args
,
nr_b_args
);
}
void
GenBuildR
(
Label
symblab
,
int
nr_a_args
,
int
nr_b_args
,
int
a_offset
,
int
b_offset
)
{
put_instruction_
(
Ibuild_r
);
...
...
@@ -2095,12 +2108,6 @@ void GenBuildR (Label symblab,int nr_a_args,int nr_b_args,int a_offset,int b_off
b_offset
=
0
;
FPrintF
(
OutFile
,
" %d %d %d %d"
,
nr_a_args
,
nr_b_args
,
a_offset
,
b_offset
);
if
(
pop_args
){
if
(
nr_a_args
>
0
)
GenUpdatePopA
(
0
,
nr_a_args
);
GenPopB
(
nr_b_args
);
}
}
void
GenFillFromA
(
int
src
,
int
dst
,
FillKind
fkind
)
...
...
backendC/CleanCompilerSources/instructions.h
View file @
12000523
...
...
@@ -80,7 +80,8 @@ void GenFillR (Label symblab,int nr_a_args,int nr_b_args,int rootoffset,int a_of
void
GenFill1R
(
Label
symblab
,
int
n_a_args
,
int
n_b_args
,
int
rootoffset
,
char
bits
[]);
void
GenFill2R
(
Label
symblab
,
int
n_a_args
,
int
n_b_args
,
int
rootoffset
,
char
bits
[]);
void
GenFill3R
(
Label
symblab
,
int
n_a_args
,
int
n_b_args
,
int
rootoffset
,
char
bits
[]);
void
GenBuildR
(
Label
symblab
,
int
nr_a_args
,
int
nr_b_args
,
int
a_offset
,
int
b_offset
,
Bool
pop_args
);
void
GenBuildhr
(
Label
symblab
,
int
nr_a_args
,
int
nr_b_args
);
void
GenBuildR
(
Label
symblab
,
int
nr_a_args
,
int
nr_b_args
,
int
a_offset
,
int
b_offset
);
void
GenFillArrayAndPop
(
int
rootoffset
,
FillKind
fkind
);
void
GenFillArray
(
int
argoffset
,
int
rootoffset
,
FillKind
fkind
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment