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
856490d6
Commit
856490d6
authored
Dec 19, 2008
by
John van Groningen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add integers and rationals, allow use of main instead of Start
parent
aa38a5eb
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
67 additions
and
11 deletions
+67
-11
backendC/CleanCompilerSources/instructions.c
backendC/CleanCompilerSources/instructions.c
+67
-11
No files found.
backendC/CleanCompilerSources/instructions.c
View file @
856490d6
...
...
@@ -551,6 +551,8 @@ enum {
#define IpushI "pushI"
#define IpushC "pushC"
#define IpushR "pushR"
#define IpushZR "pushZR"
#define IpushZ "pushZ"
#define IpushD "pushD"
...
...
@@ -644,6 +646,7 @@ enum {
#define Ijmp_eval "jmp_eval"
#define Ijmp_eval_upd "jmp_eval_upd"
#define Ijmp_ap "jmp_ap"
#define Ijmp_not_eqZ "jmp_not_eqZ"
#define Ijmp_ap_upd "jmp_ap_upd"
#define Ijmp_upd "jmp_upd"
...
...
@@ -687,6 +690,7 @@ static void put_instruction_code (int instruction_code)
#define Dnu "nu"
#define Dn_string "n_string"
#define Ddesc "desc"
#define Ddesc0 "desc0"
#define Ddescn "descn"
#define Ddescs "descs"
#define Ddescexp "descexp"
...
...
@@ -1262,6 +1266,11 @@ void CallFunction (Label label, SymbDef def, Bool isjsr, Node root)
CallFunction2
(
label
,
def
,
isjsr
,
root
->
node_state
,
root
->
node_arguments
,
root
->
node_arity
);
}
void
CallFunction1
(
Label
label
,
SymbDef
def
,
StateS
root_state
,
Args
fun_args
,
int
arity
)
{
CallFunction2
(
label
,
def
,
True
,
root_state
,
fun_args
,
arity
);
}
static
void
GenArraySize
(
Label
elemdesc
,
int
asize
,
int
bsize
)
{
put_instruction_
(
Ipush_arraysize
);
...
...
@@ -2018,6 +2027,18 @@ void GenBuildString (SymbValue val)
FPrintF
(
OutFile
,
"%s"
,
val
.
val_string
);
}
void
GenPushZ
(
SymbValue
val
)
{
put_instruction_
(
IpushZ
);
FPrintF
(
OutFile
,
"%s"
,
val
.
val_string
);
}
void
GenPushZR
(
SymbValue
val
)
{
put_instruction_
(
IpushZR
);
FPrintF
(
OutFile
,
"%s"
,
val
.
val_string
);
}
static
void
GenFieldLabel
(
Label
label
,
char
*
record_name
)
{
SymbDef
def
;
...
...
@@ -2244,6 +2265,13 @@ void GenJmpApUpd (int n_args)
put_arguments_n_b
(
n_args
);
}
void
GenJmpNotEqZ
(
SymbValue
val
,
Label
tolab
)
{
put_instruction_
(
Ijmp_not_eqZ
);
FPrintF
(
OutFile
,
"%s "
,
val
.
val_string
);
GenLabel
(
tolab
);
}
void
GenJmpUpd
(
Label
tolab
)
{
put_instruction_b
(
jmp_upd
);
...
...
@@ -2831,6 +2859,26 @@ void GenConstructorDescriptorAndExport (SymbDef sdef)
}
}
void
GenConstructor0DescriptorAndExport
(
SymbDef
sdef
,
int
constructor_n
)
{
char
*
name
;
name
=
sdef
->
sdef_ident
->
ident_name
;
if
(
sdef
->
sdef_exported
||
ExportLocalLabels
){
put_directive_
(
Dexport
);
FPrintF
(
OutFile
,
"e_%s_"
D_PREFIX
"%s"
,
CurrentModule
,
name
);
put_directive_
(
Ddesc0
);
FPrintF
(
OutFile
,
"e_%s_"
D_PREFIX
"%s %d
\"
%s
\"
"
,
CurrentModule
,
name
,
constructor_n
,
name
);
}
else
if
(
DoDebug
){
put_directive_
(
Ddesc0
);
FPrintF
(
OutFile
,
D_PREFIX
"%s %d
\"
%s
\"
"
,
name
,
constructor_n
,
name
);
}
else
{
put_directive_
(
Ddesc0
);
FPrintF
(
OutFile
,
LOCAL_D_PREFIX
"%u %d
\"
%s
\"
"
,
sdef
->
sdef_number
,
constructor_n
,
name
);
}
}
void
GenRecordDescriptor
(
SymbDef
sdef
)
{
int
asize
,
bsize
;
...
...
@@ -3442,15 +3490,18 @@ void GenStart (SymbDef startsymb)
{
if
(
startsymb
->
sdef_module
==
CurrentModule
){
int
arity
;
char
*
start_function_name
;
arity
=
startsymb
->
sdef_arity
;
startsymb
->
sdef_mark
|=
SDEF_USED_LAZILY_MASK
;
start_function_name
=
startsymb
->
sdef_ident
->
ident_name
;
put_directive_
(
Dexport
);
FPrintF
(
OutFile
,
"__%s_
Start"
,
CurrentModul
e
);
FPrintF
(
OutFile
,
"__%s_
%s"
,
CurrentModule
,
start_function_nam
e
);
GenOAStackLayout
(
0
);
FPrintF
(
OutFile
,
"
\n
__%s_
Start"
,
CurrentModul
e
);
FPrintF
(
OutFile
,
"
\n
__%s_
%s"
,
CurrentModule
,
start_function_nam
e
);
if
(
arity
!=
0
){
put_instruction_b
(
buildI
);
...
...
@@ -3460,15 +3511,15 @@ void GenStart (SymbDef startsymb)
put_instruction_b
(
build
);
if
(
startsymb
->
sdef_exported
)
FPrintF
(
OutFile
,
"e_%s_"
D_PREFIX
"
Start"
,
CurrentModul
e
);
FPrintF
(
OutFile
,
"e_%s_"
D_PREFIX
"
%s"
,
CurrentModule
,
start_function_nam
e
);
else
if
(
ExportLocalLabels
)
if
(
DoParallel
)
FPrintF
(
OutFile
,
"e_%s_"
D_PREFIX
"
Start.%u"
,
CurrentModul
e
,
startsymb
->
sdef_number
);
FPrintF
(
OutFile
,
"e_%s_"
D_PREFIX
"
%s.%u"
,
CurrentModule
,
start_function_nam
e
,
startsymb
->
sdef_number
);
else
FPutS
(
empty_lab
.
lab_name
,
OutFile
);
FPutS
(
empty_lab
.
lab_name
,
OutFile
);
else
if
(
DoDebug
){
if
(
DoParallel
)
FPrintF
(
OutFile
,
D_PREFIX
"
Start.%u"
,
startsymb
->
sdef_number
);
FPrintF
(
OutFile
,
D_PREFIX
"
%s.%u"
,
start_function_name
,
startsymb
->
sdef_number
);
else
FPutS
(
empty_lab
.
lab_name
,
OutFile
);
}
else
{
...
...
@@ -3481,13 +3532,18 @@ void GenStart (SymbDef startsymb)
put_arguments__n__b
(
arity
);
if
(
startsymb
->
sdef_exported
)
FPrintF
(
OutFile
,
"e_%s_"
N_PREFIX
"
Start"
,
CurrentModul
e
);
FPrintF
(
OutFile
,
"e_%s_"
N_PREFIX
"
%s"
,
CurrentModule
,
start_function_nam
e
);
else
if
(
ExportLocalLabels
)
FPrintF
(
OutFile
,
"e_%s_"
N_PREFIX
"
Start.%u"
,
CurrentModul
e
,
startsymb
->
sdef_number
);
FPrintF
(
OutFile
,
"e_%s_"
N_PREFIX
"
%s.%u"
,
CurrentModule
,
start_function_nam
e
,
startsymb
->
sdef_number
);
else
if
(
DoDebug
)
FPrintF
(
OutFile
,
N_PREFIX
"
Start.%u"
,
startsymb
->
sdef_number
);
FPrintF
(
OutFile
,
N_PREFIX
"
%s.%u"
,
start_function_name
,
startsymb
->
sdef_number
);
else
FPrintF
(
OutFile
,
N_PREFIX
"%u"
,
startsymb
->
sdef_number
);
if
(
arity
==
0
&&
strcmp
(
start_function_name
,
"main"
)
==
0
){
GenJsrEval
(
0
);
GenJsrAp
(
1
);
}
GenDAStackLayout
(
1
);
put_instruction_b
(
jmp
);
...
...
@@ -3534,7 +3590,7 @@ void InitFileInfo (ImpMod imod)
put_directive_
(
Dstart
);
if
(
start_sdef
!=
NULL
){
FPrintF
(
OutFile
,
"__%s_
Start"
,
start_sdef
->
sdef_modul
e
);
FPrintF
(
OutFile
,
"__%s_
%s"
,
start_sdef
->
sdef_module
,
start_sdef
->
sdef_ident
->
ident_nam
e
);
}
else
FPutS
(
"_nostart_"
,
OutFile
);
}
...
...
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