summaryrefslogtreecommitdiff
path: root/6
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2017-01-08 21:39:08 -0800
committerOri Bernstein <ori@eigenstate.org>2017-01-08 21:39:08 -0800
commit4ff322bbbc9b8c181b6f48b55c72f5482cec3c88 (patch)
tree3eed9e6c0d33a3ec0dc28119b9a3115c9a007944 /6
parent186c4e4026e1d9db729153e185bd717377060926 (diff)
downloadmc-4ff322bbbc9b8c181b6f48b55c72f5482cec3c88.tar.gz
Dedup const initialization.
Diffstat (limited to '6')
-rw-r--r--6/asm.h1
-rw-r--r--6/gen.c25
-rw-r--r--6/gengas.c25
-rw-r--r--6/genp9.c24
4 files changed, 26 insertions, 49 deletions
diff --git a/6/asm.h b/6/asm.h
index cf08738..f9fa996 100644
--- a/6/asm.h
+++ b/6/asm.h
@@ -250,6 +250,7 @@ extern Node *abortoob;
extern int extracheck;
extern Asmsyntax asmsyntax;
+void initconsts(Htab *globls);
void fillglobls(Stab *st, Htab *globls);
void simpglobl(Node *dcl, Htab *globls, Func ***fn, size_t *nfn, Node ***blob, size_t *nblob);
void selfunc(Isel *is, Func *fn, Htab *globls, Htab *strtab);
diff --git a/6/gen.c b/6/gen.c
index 1dd387a..538bf50 100644
--- a/6/gen.c
+++ b/6/gen.c
@@ -45,6 +45,31 @@ void fillglobls(Stab *st, Htab *globls)
free(ns);
}
+
+void initconsts(Htab *globls)
+{
+ Type *ty;
+ Node *name;
+ Node *dcl;
+
+ tyintptr = mktype(Zloc, Tyuint64);
+ tyword = mktype(Zloc, Tyuint);
+ tyvoid = mktype(Zloc, Tyvoid);
+
+ ty = mktyfunc(Zloc, NULL, 0, mktype(Zloc, Tyvoid));
+ ty->type = Tycode;
+ name = mknsname(Zloc, "_rt", "abort_oob");
+ dcl = mkdecl(Zloc, name, ty);
+ dcl->decl.isconst = 1;
+ dcl->decl.isextern = 1;
+ htput(globls, dcl, asmname(dcl));
+
+ abortoob = mkexpr(Zloc, Ovar, name, NULL);
+ abortoob->expr.type = ty;
+ abortoob->expr.did = dcl->decl.did;
+ abortoob->expr.isconst = 1;
+}
+
Type *codetype(Type *ft)
{
ft = tybase(ft);
diff --git a/6/gengas.c b/6/gengas.c
index d315684..3be3224 100644
--- a/6/gengas.c
+++ b/6/gengas.c
@@ -41,31 +41,6 @@ static char* modenames[] = {
static void locprint(FILE *fd, Loc *l, char spec);
-static void initconsts(Htab *globls)
-{
- Type *ty;
- Node *name;
- Node *dcl;
-
- tyintptr = mktype(Zloc, Tyuint64);
- tyword = mktype(Zloc, Tyuint);
- tyvoid = mktype(Zloc, Tyvoid);
-
- ty = mktyfunc(Zloc, NULL, 0, mktype(Zloc, Tyvoid));
- ty->type = Tycode;
- name = mknsname(Zloc, "_rt", "abort_oob");
- dcl = mkdecl(Zloc, name, ty);
- dcl->decl.isconst = 1;
- dcl->decl.isextern = 1;
- dcl->decl.isglobl = 1;
- htput(globls, dcl, asmname(dcl));
-
- abortoob = mkexpr(Zloc, Ovar, name, NULL);
- abortoob->expr.type = ty;
- abortoob->expr.did = dcl->decl.did;
- abortoob->expr.isconst = 1;
-}
-
void printmem(FILE *fd, Loc *l, char spec)
{
if (l->type == Locmem) {
diff --git a/6/genp9.c b/6/genp9.c
index 0a125b2..84d845c 100644
--- a/6/genp9.c
+++ b/6/genp9.c
@@ -40,30 +40,6 @@ static char* modenames[] = {
static void locprint(FILE *fd, Loc *l, char spec);
-static void initconsts(Htab *globls)
-{
- Type *ty;
- Node *name;
- Node *dcl;
-
- tyintptr = mktype(Zloc, Tyuint64);
- tyword = mktype(Zloc, Tyuint);
- tyvoid = mktype(Zloc, Tyvoid);
-
- ty = mktyfunc(Zloc, NULL, 0, mktype(Zloc, Tyvoid));
- ty->type = Tycode;
- name = mknsname(Zloc, "_rt", "abort_oob");
- dcl = mkdecl(Zloc, name, ty);
- dcl->decl.isconst = 1;
- dcl->decl.isextern = 1;
- htput(globls, dcl, asmname(dcl));
-
- abortoob = mkexpr(Zloc, Ovar, name, NULL);
- abortoob->expr.type = ty;
- abortoob->expr.did = dcl->decl.did;
- abortoob->expr.isconst = 1;
-}
-
static void printmem(FILE *fd, Loc *l, char spec)
{
if (l->type == Locmem) {