Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
compiler
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
17
Issues
17
List
Boards
Labels
Service Desk
Milestones
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
clean-compiler-and-rts
compiler
Commits
12000523
Commit
12000523
authored
Jan 29, 2019
by
johnvg@science.ru.nl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use buildhr instruction to make records
parent
407737c6
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
81 additions
and
51 deletions
+81
-51
backendC/CleanCompilerSources/codegen.c
backendC/CleanCompilerSources/codegen.c
+3
-4
backendC/CleanCompilerSources/codegen1.c
backendC/CleanCompilerSources/codegen1.c
+7
-9
backendC/CleanCompilerSources/codegen2.c
backendC/CleanCompilerSources/codegen2.c
+40
-22
backendC/CleanCompilerSources/codegen2.h
backendC/CleanCompilerSources/codegen2.h
+2
-0
backendC/CleanCompilerSources/codegen3.c
backendC/CleanCompilerSources/codegen3.c
+13
-8
backendC/CleanCompilerSources/instructions.c
backendC/CleanCompilerSources/instructions.c
+14
-7
backendC/CleanCompilerSources/instructions.h
backendC/CleanCompilerSources/instructions.h
+2
-1
No files found.
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
,
Tru
e
);
GenBuild
hr
(
&
record_label
,
asize
,
bsiz
e
);
*
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
,
Tru
e
);
GenBuild
hr
(
&
record_label
,
asize
,
bsiz
e
);
}
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
,
Tru
e
);
GenBuild
hr
(
strict_cons_lab_p
,
a_size
,
b_siz
e
);
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
){
Build
Record
(
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
UpdatePopA
(
0
,
end_args_a_offset
);
Build
NewRecordPop
(
record_state_p
->
state_record_symbol
,
record_a_size
,
record_b_size
);
GenUpdatePopA
(
0
,
end_args_a_offset
-
record_a_siz
e
);
Gen
PopB
(
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
{
Build
Record
(
record_state_p
->
state_record_symbol
,
asp
,
bsp
,
asp
,
bsp
,
record_a_size
,
record_b_size
,
asp
,
NormalFill
,
Tru
e
);
Gen
UpdatePopA
(
0
,
asp
);
Build
NewRecordPop
(
record_state_p
->
state_record_symbol
,
record_a_size
,
record_b_size
);
GenUpdatePopA
(
0
,
asp
-
record_a_siz
e
);
Gen
PopB
(
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