mirror of
https://github.com/golang/go
synced 2024-11-26 06:47:58 -07:00
This is really two changes in one but given interdependencies
and expected review latency I needed to combine the CLs. 1. Made the 5* toolpath build using the go build system. Hooked the subdirectories to clean.bash but added a separate make5.bash for now. Minor massage to make the code more similar to the current structure of 6c/6a/6l. 2. Change all references from long to int32 in line with similar change for the other toolchains. The end result is that 5c, 5a and 5l can now be compiled and the executables start up properly. Haven't thrown any input at them yet. R=rsc APPROVED=rsc DELTA=1052 (392 added, 328 deleted, 332 changed) OCL=26757 CL=26761
This commit is contained in:
parent
62fd90ab76
commit
99cc2fee81
42
src/cmd/5a/Makefile
Normal file
42
src/cmd/5a/Makefile
Normal file
@ -0,0 +1,42 @@
|
||||
# Copyright 2009 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
include ../../Make.conf
|
||||
|
||||
TARG=\
|
||||
5a\
|
||||
|
||||
HFILES=\
|
||||
a.h\
|
||||
y.tab.h\
|
||||
../5l/5.out.h\
|
||||
compat.h\
|
||||
|
||||
OFILES=\
|
||||
y.tab.$O\
|
||||
lex.$O\
|
||||
compat.$O\
|
||||
# ../5l/enam.$O\
|
||||
|
||||
YFILES=\
|
||||
a.y\
|
||||
|
||||
$(TARG): $(OFILES)
|
||||
$(LD) -o $(TARG) -L$(GOROOT)/lib $(OFILES) -lbio -l9
|
||||
|
||||
$(OFILES): $(HFILES)
|
||||
|
||||
lex.$O: ../cc/macbody ../cc/lexbody
|
||||
|
||||
y.tab.h: $(YFILES)
|
||||
bison -y $(YFLAGS) $(YFILES)
|
||||
|
||||
y.tab.c: y.tab.h
|
||||
test -f y.tab.c && touch y.tab.c
|
||||
|
||||
clean:
|
||||
rm -f $(OFILES) $(TARG) *.5 enam.c 5.out a.out y.tab.h y.tab.c
|
||||
|
||||
install: $(TARG)
|
||||
cp $(TARG) $(BIN)/$(TARG)
|
@ -30,7 +30,8 @@
|
||||
|
||||
#include <lib9.h>
|
||||
#include <bio.h>
|
||||
#include "../5c/5.out.h"
|
||||
#include "../5l/5.out.h"
|
||||
#include "compat.h"
|
||||
|
||||
#ifndef EXTERN
|
||||
#define EXTERN extern
|
||||
@ -59,7 +60,7 @@ struct Sym
|
||||
{
|
||||
Sym* link;
|
||||
char* macro;
|
||||
long value;
|
||||
int32 value;
|
||||
ushort type;
|
||||
char *name;
|
||||
char sym;
|
||||
@ -91,7 +92,7 @@ EXTERN struct
|
||||
struct Gen
|
||||
{
|
||||
Sym* sym;
|
||||
long offset;
|
||||
int32 offset;
|
||||
short type;
|
||||
short reg;
|
||||
short name;
|
||||
@ -103,8 +104,8 @@ struct Hist
|
||||
{
|
||||
Hist* link;
|
||||
char* name;
|
||||
long line;
|
||||
long offset;
|
||||
int32 line;
|
||||
int32 offset;
|
||||
};
|
||||
#define H ((Hist*)0)
|
||||
|
||||
@ -130,25 +131,25 @@ EXTERN char* include[NINCLUDE];
|
||||
EXTERN Io* iofree;
|
||||
EXTERN Io* ionext;
|
||||
EXTERN Io* iostack;
|
||||
EXTERN long lineno;
|
||||
EXTERN int32 lineno;
|
||||
EXTERN int nerrors;
|
||||
EXTERN long nhunk;
|
||||
EXTERN int32 nhunk;
|
||||
EXTERN int ninclude;
|
||||
EXTERN Gen nullgen;
|
||||
EXTERN char* outfile;
|
||||
EXTERN int pass;
|
||||
EXTERN char* pathname;
|
||||
EXTERN long pc;
|
||||
EXTERN int32 pc;
|
||||
EXTERN int peekc;
|
||||
EXTERN int sym;
|
||||
EXTERN char symb[NSYMB];
|
||||
EXTERN int thechar;
|
||||
EXTERN char* thestring;
|
||||
EXTERN long thunk;
|
||||
EXTERN int32 thunk;
|
||||
EXTERN Biobuf obuf;
|
||||
|
||||
void* alloc(long);
|
||||
void* allocn(void*, long, long);
|
||||
void* alloc(int32);
|
||||
void* allocn(void*, int32, int32);
|
||||
void errorexit(void);
|
||||
void pushio(void);
|
||||
void newio(void);
|
||||
@ -156,7 +157,7 @@ void newfile(char*, int);
|
||||
Sym* slookup(char*);
|
||||
Sym* lookup(void);
|
||||
void syminit(Sym*);
|
||||
long yylex(void);
|
||||
int32 yylex(void);
|
||||
int getc(void);
|
||||
int getnsc(void);
|
||||
void unget(int);
|
||||
@ -182,31 +183,10 @@ void macif(int);
|
||||
void macend(void);
|
||||
void outhist(void);
|
||||
void dodefine(char*);
|
||||
void prfile(long);
|
||||
void prfile(int32);
|
||||
void linehist(char*, int);
|
||||
void gethunk(void);
|
||||
void yyerror(char*, ...);
|
||||
int yyparse(void);
|
||||
void setinclude(char*);
|
||||
int assemble(char*);
|
||||
|
||||
/*
|
||||
* system-dependent stuff from ../cc/compat.c
|
||||
*/
|
||||
|
||||
enum /* keep in synch with ../cc/cc.h */
|
||||
{
|
||||
Plan9 = 1<<0,
|
||||
Unix = 1<<1,
|
||||
Windows = 1<<2,
|
||||
};
|
||||
int mywait(int*);
|
||||
int mycreat(char*, int);
|
||||
int systemtype(int);
|
||||
int pathchar(void);
|
||||
char* mygetwd(char*, int);
|
||||
int myexec(char*, char*[]);
|
||||
int mydup(int, int);
|
||||
int myfork(void);
|
||||
int mypipe(int*);
|
||||
void* mysbrk(ulong);
|
||||
|
@ -34,7 +34,7 @@
|
||||
%union
|
||||
{
|
||||
Sym *sym;
|
||||
long lval;
|
||||
int32 lval;
|
||||
double dval;
|
||||
char sval[8];
|
||||
Gen gen;
|
||||
@ -288,7 +288,7 @@ inst:
|
||||
/*
|
||||
* MULA hi,lo,r1,r2
|
||||
*/
|
||||
| LTYPEN cond reg ',' reg ',' reg ',' spreg
|
||||
| LTYPEN cond reg ',' reg ',' reg ',' spreg
|
||||
{
|
||||
$7.type = D_REGREG;
|
||||
$7.offset = $9;
|
||||
|
@ -444,9 +444,9 @@ cinit(void)
|
||||
}
|
||||
|
||||
pathname = allocn(pathname, 0, 100);
|
||||
if(mygetwd(pathname, 99) == 0) {
|
||||
if(getwd(pathname, 99) == 0) {
|
||||
pathname = allocn(pathname, 100, 900);
|
||||
if(mygetwd(pathname, 999) == 0)
|
||||
if(getwd(pathname, 999) == 0)
|
||||
strcpy(pathname, "/???");
|
||||
}
|
||||
}
|
||||
@ -492,7 +492,7 @@ zname(char *n, int t, int s)
|
||||
void
|
||||
zaddr(Gen *a, int s)
|
||||
{
|
||||
long l;
|
||||
int32 l;
|
||||
int i;
|
||||
char *n;
|
||||
Ieee e;
|
||||
|
38
src/cmd/5c/Makefile
Normal file
38
src/cmd/5c/Makefile
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright 2009 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
include ../../Make.conf
|
||||
|
||||
TARG=\
|
||||
5c\
|
||||
|
||||
HFILES=\
|
||||
gc.h\
|
||||
../5l/5.out.h\
|
||||
../cc/cc.h\
|
||||
|
||||
OFILES=\
|
||||
cgen.$O\
|
||||
list.$O\
|
||||
sgen.$O\
|
||||
swt.$O\
|
||||
txt.$O\
|
||||
mul.$O\
|
||||
reg.$O\
|
||||
peep.$O\
|
||||
../5l/enam.$O\
|
||||
|
||||
LIB=\
|
||||
../cc/cc.a$O
|
||||
|
||||
$(TARG): $(OFILES) $(LIB)
|
||||
$(LD) -o $(TARG) -L$(GOROOT)/lib $(OFILES) $(LIB) -lbio -l9
|
||||
|
||||
$(OFILES): $(HFILES)
|
||||
|
||||
clean:
|
||||
rm -f $(OFILES) $(TARG) *.5 enam.c 5.out a.out
|
||||
|
||||
install: $(TARG)
|
||||
cp $(TARG) $(BIN)/$(TARG)
|
@ -37,7 +37,7 @@ cgen(Node *n, Node *nn, int inrel)
|
||||
Prog *p1;
|
||||
Node nod, nod1, nod2, nod3, nod4;
|
||||
int o, t;
|
||||
long v, curs;
|
||||
int32 v, curs;
|
||||
|
||||
if(debug['g']) {
|
||||
prtree(nn, "cgen lhs");
|
||||
@ -475,7 +475,7 @@ cgen(Node *n, Node *nn, int inrel)
|
||||
diag(n, "DOT and no offset");
|
||||
break;
|
||||
}
|
||||
nod.xoffset += (long)r->vconst;
|
||||
nod.xoffset += (int32)r->vconst;
|
||||
nod.type = n->type;
|
||||
cgen(&nod, nn, 0);
|
||||
}
|
||||
@ -590,7 +590,7 @@ void
|
||||
reglcgen(Node *t, Node *n, Node *nn)
|
||||
{
|
||||
Node *r;
|
||||
long v;
|
||||
int32 v;
|
||||
|
||||
regialloc(t, n, nn);
|
||||
if(n->op == OIND) {
|
||||
@ -705,7 +705,7 @@ boolgen(Node *n, int true, Node *nn)
|
||||
int o;
|
||||
Prog *p1, *p2;
|
||||
Node *l, *r, nod, nod1;
|
||||
long curs;
|
||||
int32 curs;
|
||||
|
||||
if(debug['g']) {
|
||||
prtree(nn, "boolgen lhs");
|
||||
@ -864,12 +864,12 @@ boolgen(Node *n, int true, Node *nn)
|
||||
}
|
||||
|
||||
void
|
||||
sugen(Node *n, Node *nn, long w)
|
||||
sugen(Node *n, Node *nn, int32 w)
|
||||
{
|
||||
Prog *p1;
|
||||
Node nod0, nod1, nod2, nod3, nod4, *l, *r;
|
||||
Type *t;
|
||||
long pc1;
|
||||
int32 pc1;
|
||||
int i, m, c;
|
||||
|
||||
if(n == Z || n->type == T)
|
||||
@ -929,7 +929,7 @@ sugen(Node *n, Node *nn, long w)
|
||||
diag(n, "DOT and no offset");
|
||||
break;
|
||||
}
|
||||
nod1.xoffset += (long)r->vconst;
|
||||
nod1.xoffset += (int32)r->vconst;
|
||||
nod1.type = n->type;
|
||||
sugen(&nod1, nn, w);
|
||||
}
|
||||
|
@ -29,7 +29,7 @@
|
||||
// THE SOFTWARE.
|
||||
|
||||
#include "../cc/cc.h"
|
||||
#include "../5c/5.out.h"
|
||||
#include "../5l/5.out.h"
|
||||
|
||||
/*
|
||||
* 5c/arm
|
||||
@ -60,7 +60,7 @@ typedef struct Rgn Rgn;
|
||||
|
||||
struct Adr
|
||||
{
|
||||
long offset;
|
||||
int32 offset;
|
||||
double dval;
|
||||
char sval[NSNAME];
|
||||
Ieee ieee;
|
||||
@ -79,7 +79,7 @@ struct Prog
|
||||
Adr from;
|
||||
Adr to;
|
||||
Prog* link;
|
||||
long lineno;
|
||||
int32 lineno;
|
||||
char as;
|
||||
char reg;
|
||||
uchar scond;
|
||||
@ -89,21 +89,21 @@ struct Prog
|
||||
struct Case
|
||||
{
|
||||
Case* link;
|
||||
long val;
|
||||
long label;
|
||||
int32 val;
|
||||
int32 label;
|
||||
char def;
|
||||
};
|
||||
#define C ((Case*)0)
|
||||
|
||||
struct C1
|
||||
{
|
||||
long val;
|
||||
long label;
|
||||
int32 val;
|
||||
int32 label;
|
||||
};
|
||||
|
||||
struct Multab
|
||||
{
|
||||
long val;
|
||||
int32 val;
|
||||
char code[20];
|
||||
};
|
||||
|
||||
@ -115,7 +115,7 @@ struct Hintab
|
||||
|
||||
struct Var
|
||||
{
|
||||
long offset;
|
||||
int32 offset;
|
||||
Sym* sym;
|
||||
char name;
|
||||
char etype;
|
||||
@ -123,8 +123,8 @@ struct Var
|
||||
|
||||
struct Reg
|
||||
{
|
||||
long pc;
|
||||
long rpo; /* reverse post ordering */
|
||||
int32 pc;
|
||||
int32 rpo; /* reverse post ordering */
|
||||
|
||||
Bits set;
|
||||
Bits use1;
|
||||
@ -137,12 +137,12 @@ struct Reg
|
||||
Bits regdiff;
|
||||
Bits act;
|
||||
|
||||
long regu;
|
||||
long loop; /* could be shorter */
|
||||
int32 regu;
|
||||
int32 loop; /* could be shorter */
|
||||
|
||||
|
||||
Reg* log5;
|
||||
long active;
|
||||
int32 active;
|
||||
|
||||
Reg* p1;
|
||||
Reg* p2;
|
||||
@ -163,16 +163,16 @@ struct Rgn
|
||||
short regno;
|
||||
};
|
||||
|
||||
EXTERN long breakpc;
|
||||
EXTERN int32 breakpc;
|
||||
EXTERN Case* cases;
|
||||
EXTERN Node constnode;
|
||||
EXTERN Node fconstnode;
|
||||
EXTERN long continpc;
|
||||
EXTERN long curarg;
|
||||
EXTERN long cursafe;
|
||||
EXTERN int32 continpc;
|
||||
EXTERN int32 curarg;
|
||||
EXTERN int32 cursafe;
|
||||
EXTERN Prog* firstp;
|
||||
EXTERN Prog* lastp;
|
||||
EXTERN long maxargsafe;
|
||||
EXTERN int32 maxargsafe;
|
||||
EXTERN int mnstring;
|
||||
EXTERN Multab multab[20];
|
||||
EXTERN int retok;
|
||||
@ -180,18 +180,18 @@ EXTERN int hintabsize;
|
||||
EXTERN Node* nodrat;
|
||||
EXTERN Node* nodret;
|
||||
EXTERN Node* nodsafe;
|
||||
EXTERN long nrathole;
|
||||
EXTERN long nstring;
|
||||
EXTERN int32 nrathole;
|
||||
EXTERN int32 nstring;
|
||||
EXTERN Prog* p;
|
||||
EXTERN long pc;
|
||||
EXTERN int32 pc;
|
||||
EXTERN Node regnode;
|
||||
EXTERN char string[NSNAME];
|
||||
EXTERN Sym* symrathole;
|
||||
EXTERN Node znode;
|
||||
EXTERN Prog zprog;
|
||||
EXTERN char reg[NREG+NFREG];
|
||||
EXTERN long exregoffset;
|
||||
EXTERN long exfregoffset;
|
||||
EXTERN int32 exregoffset;
|
||||
EXTERN int32 exfregoffset;
|
||||
EXTERN int suppress;
|
||||
|
||||
#define BLOAD(r) band(bnot(r->refbehind), r->refahead)
|
||||
@ -216,8 +216,8 @@ EXTERN Bits params;
|
||||
EXTERN Bits consts;
|
||||
EXTERN Bits addrs;
|
||||
|
||||
EXTERN long regbits;
|
||||
EXTERN long exregbits;
|
||||
EXTERN int32 regbits;
|
||||
EXTERN int32 exregbits;
|
||||
|
||||
EXTERN int change;
|
||||
|
||||
@ -226,9 +226,9 @@ EXTERN Reg* lastr;
|
||||
EXTERN Reg zreg;
|
||||
EXTERN Reg* freer;
|
||||
EXTERN Var var[NVAR];
|
||||
EXTERN long* idom;
|
||||
EXTERN int32* idom;
|
||||
EXTERN Reg** rpo2r;
|
||||
EXTERN long maxnr;
|
||||
EXTERN int32 maxnr;
|
||||
|
||||
extern char* anames[];
|
||||
extern Hintab hintab[];
|
||||
@ -251,7 +251,7 @@ void reglcgen(Node*, Node*, Node*);
|
||||
void lcgen(Node*, Node*);
|
||||
void bcgen(Node*, int);
|
||||
void boolgen(Node*, int, Node*);
|
||||
void sugen(Node*, Node*, long);
|
||||
void sugen(Node*, Node*, int32);
|
||||
void layout(Node*, Node*, int, int, Node*);
|
||||
|
||||
/*
|
||||
@ -262,7 +262,7 @@ void gclean(void);
|
||||
void nextpc(void);
|
||||
void gargs(Node*, Node*, Node*);
|
||||
void garg1(Node*, Node*, Node*, int, Node**);
|
||||
Node* nodconst(long);
|
||||
Node* nodconst(int32);
|
||||
Node* nod32const(vlong);
|
||||
Node* nodfconst(double);
|
||||
void nodreg(Node*, Node*, int);
|
||||
@ -285,9 +285,9 @@ void gins(int a, Node*, Node*);
|
||||
void gopcode(int, Node*, Node*, Node*);
|
||||
int samaddr(Node*, Node*);
|
||||
void gbranch(int);
|
||||
void patch(Prog*, long);
|
||||
void patch(Prog*, int32);
|
||||
int sconst(Node*);
|
||||
int sval(long);
|
||||
int sval(int32);
|
||||
void gpseudo(int, Sym*, Node*);
|
||||
|
||||
/*
|
||||
@ -295,16 +295,13 @@ void gpseudo(int, Sym*, Node*);
|
||||
*/
|
||||
int swcmp(const void*, const void*);
|
||||
void doswit(Node*);
|
||||
void swit1(C1*, int, long, Node*, Node*);
|
||||
void swit1(C1*, int, int32, Node*, Node*);
|
||||
void cas(void);
|
||||
void bitload(Node*, Node*, Node*, Node*, Node*);
|
||||
void bitstore(Node*, Node*, Node*, Node*, Node*);
|
||||
long outstring(char*, long);
|
||||
int mulcon(Node*, Node*);
|
||||
Multab* mulcon0(long);
|
||||
Multab* mulcon0(int32);
|
||||
void nullwarn(Node*, Node*);
|
||||
void sextern(Sym*, Node*, long, long);
|
||||
void gextern(Sym*, Node*, long, long);
|
||||
void outcode(void);
|
||||
void ieeedtod(Ieee*, double);
|
||||
|
||||
@ -329,12 +326,12 @@ void regopt(Prog*);
|
||||
void addmove(Reg*, int, int, int);
|
||||
Bits mkvar(Adr*, int);
|
||||
void prop(Reg*, Bits, Bits);
|
||||
void loopit(Reg*, long);
|
||||
void loopit(Reg*, int32);
|
||||
void synch(Reg*, Bits);
|
||||
ulong allreg(ulong, Rgn*);
|
||||
uint32 allreg(uint32, Rgn*);
|
||||
void paint1(Reg*, int);
|
||||
ulong paint2(Reg*, int);
|
||||
void paint3(Reg*, int, long, int);
|
||||
uint32 paint2(Reg*, int);
|
||||
void paint3(Reg*, int, int32, int);
|
||||
void addreg(Adr*, int);
|
||||
|
||||
/*
|
||||
@ -360,10 +357,10 @@ int copyau1(Prog*, Adr*);
|
||||
int copysub(Adr*, Adr*, Adr*, int);
|
||||
int copysub1(Prog*, Adr*, Adr*, int);
|
||||
|
||||
long RtoB(int);
|
||||
long FtoB(int);
|
||||
int BtoR(long);
|
||||
int BtoF(long);
|
||||
int32 RtoB(int);
|
||||
int32 FtoB(int);
|
||||
int BtoR(int32);
|
||||
int BtoF(int32);
|
||||
|
||||
void predicate(void);
|
||||
int isbranch(Prog *);
|
||||
|
@ -28,6 +28,7 @@
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
|
||||
#include "gc.h"
|
||||
|
||||
/*
|
||||
@ -42,15 +43,15 @@
|
||||
|
||||
static int maxmulops = 3; /* max # of ops to replace mul with */
|
||||
static int multabp;
|
||||
static long mulval;
|
||||
static int32 mulval;
|
||||
static char* mulcp;
|
||||
static long valmax;
|
||||
static int32 valmax;
|
||||
static int shmax;
|
||||
|
||||
static int docode(char *hp, char *cp, int r0, int r1);
|
||||
static int gen1(int len);
|
||||
static int gen2(int len, long r1);
|
||||
static int gen3(int len, long r0, long r1, int flag);
|
||||
static int gen2(int len, int32 r1);
|
||||
static int gen3(int len, int32 r0, int32 r1, int flag);
|
||||
enum
|
||||
{
|
||||
SR1 = 1<<0, /* r1 has been shifted */
|
||||
@ -60,7 +61,7 @@ enum
|
||||
};
|
||||
|
||||
Multab*
|
||||
mulcon0(long v)
|
||||
mulcon0(int32 v)
|
||||
{
|
||||
int a1, a2, g;
|
||||
Multab *m, *m1;
|
||||
@ -265,7 +266,7 @@ gen1(int len)
|
||||
}
|
||||
|
||||
static int
|
||||
gen2(int len, long r1)
|
||||
gen2(int len, int32 r1)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -315,10 +316,10 @@ out:
|
||||
}
|
||||
|
||||
static int
|
||||
gen3(int len, long r0, long r1, int flag)
|
||||
gen3(int len, int32 r0, int32 r1, int flag)
|
||||
{
|
||||
int i, f1, f2;
|
||||
long x;
|
||||
int32 x;
|
||||
|
||||
if(r0 <= 0 ||
|
||||
r0 >= r1 ||
|
||||
|
@ -28,6 +28,7 @@
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
|
||||
#include "gc.h"
|
||||
|
||||
void addsplits(void);
|
||||
@ -68,13 +69,13 @@ regopt(Prog *p)
|
||||
Reg *r, *r1, *r2;
|
||||
Prog *p1;
|
||||
int i, z;
|
||||
long initpc, val, npc;
|
||||
ulong vreg;
|
||||
int32 initpc, val, npc;
|
||||
uint32 vreg;
|
||||
Bits bit;
|
||||
struct
|
||||
{
|
||||
long m;
|
||||
long c;
|
||||
int32 m;
|
||||
int32 c;
|
||||
Reg* p;
|
||||
} log5[6], *lp;
|
||||
|
||||
@ -583,7 +584,7 @@ mkvar(Adr *a, int docon)
|
||||
{
|
||||
Var *v;
|
||||
int i, t, n, et, z;
|
||||
long o;
|
||||
int32 o;
|
||||
Bits bit;
|
||||
Sym *s;
|
||||
|
||||
@ -733,8 +734,8 @@ prop(Reg *r, Bits ref, Bits cal)
|
||||
* such a node is a loop head.
|
||||
* recursively, all preds with a greater rpo number are in the loop
|
||||
*/
|
||||
long
|
||||
postorder(Reg *r, Reg **rpo2r, long n)
|
||||
int32
|
||||
postorder(Reg *r, Reg **rpo2r, int32 n)
|
||||
{
|
||||
Reg *r1;
|
||||
|
||||
@ -750,10 +751,10 @@ postorder(Reg *r, Reg **rpo2r, long n)
|
||||
return n;
|
||||
}
|
||||
|
||||
long
|
||||
rpolca(long *idom, long rpo1, long rpo2)
|
||||
int32
|
||||
rpolca(int32 *idom, int32 rpo1, int32 rpo2)
|
||||
{
|
||||
long t;
|
||||
int32 t;
|
||||
|
||||
if(rpo1 == -1)
|
||||
return rpo2;
|
||||
@ -774,7 +775,7 @@ rpolca(long *idom, long rpo1, long rpo2)
|
||||
}
|
||||
|
||||
int
|
||||
doms(long *idom, long r, long s)
|
||||
doms(int32 *idom, int32 r, int32 s)
|
||||
{
|
||||
while(s > r)
|
||||
s = idom[s];
|
||||
@ -782,9 +783,9 @@ doms(long *idom, long r, long s)
|
||||
}
|
||||
|
||||
int
|
||||
loophead(long *idom, Reg *r)
|
||||
loophead(int32 *idom, Reg *r)
|
||||
{
|
||||
long src;
|
||||
int32 src;
|
||||
|
||||
src = r->rpo;
|
||||
if(r->p1 != R && doms(idom, src, r->p1->rpo))
|
||||
@ -796,7 +797,7 @@ loophead(long *idom, Reg *r)
|
||||
}
|
||||
|
||||
void
|
||||
loopmark(Reg **rpo2r, long head, Reg *r)
|
||||
loopmark(Reg **rpo2r, int32 head, Reg *r)
|
||||
{
|
||||
if(r->rpo < head || r->active == head)
|
||||
return;
|
||||
@ -809,14 +810,14 @@ loopmark(Reg **rpo2r, long head, Reg *r)
|
||||
}
|
||||
|
||||
void
|
||||
loopit(Reg *r, long nr)
|
||||
loopit(Reg *r, int32 nr)
|
||||
{
|
||||
Reg *r1;
|
||||
long i, d, me;
|
||||
int32 i, d, me;
|
||||
|
||||
if(nr > maxnr) {
|
||||
rpo2r = alloc(nr * sizeof(Reg*));
|
||||
idom = alloc(nr * sizeof(long));
|
||||
idom = alloc(nr * sizeof(int32));
|
||||
maxnr = nr;
|
||||
}
|
||||
d = postorder(r, rpo2r, 0);
|
||||
@ -878,8 +879,8 @@ synch(Reg *r, Bits dif)
|
||||
}
|
||||
}
|
||||
|
||||
ulong
|
||||
allreg(ulong b, Rgn *r)
|
||||
uint32
|
||||
allreg(uint32 b, Rgn *r)
|
||||
{
|
||||
Var *v;
|
||||
int i;
|
||||
@ -928,7 +929,7 @@ paint1(Reg *r, int bn)
|
||||
Reg *r1;
|
||||
Prog *p;
|
||||
int z;
|
||||
ulong bb;
|
||||
uint32 bb;
|
||||
|
||||
z = bn/32;
|
||||
bb = 1L<<(bn%32);
|
||||
@ -999,12 +1000,12 @@ paint1(Reg *r, int bn)
|
||||
}
|
||||
}
|
||||
|
||||
ulong
|
||||
uint32
|
||||
paint2(Reg *r, int bn)
|
||||
{
|
||||
Reg *r1;
|
||||
int z;
|
||||
ulong bb, vreg;
|
||||
uint32 bb, vreg;
|
||||
|
||||
z = bn/32;
|
||||
bb = 1L << (bn%32);
|
||||
@ -1051,12 +1052,12 @@ paint2(Reg *r, int bn)
|
||||
}
|
||||
|
||||
void
|
||||
paint3(Reg *r, int bn, long rb, int rn)
|
||||
paint3(Reg *r, int bn, int32 rb, int rn)
|
||||
{
|
||||
Reg *r1;
|
||||
Prog *p;
|
||||
int z;
|
||||
ulong bb;
|
||||
uint32 bb;
|
||||
|
||||
z = bn/32;
|
||||
bb = 1L << (bn%32);
|
||||
@ -1142,7 +1143,7 @@ addreg(Adr *a, int rn)
|
||||
* ... ...
|
||||
* 10 R10
|
||||
*/
|
||||
long
|
||||
int32
|
||||
RtoB(int r)
|
||||
{
|
||||
|
||||
@ -1152,7 +1153,7 @@ RtoB(int r)
|
||||
}
|
||||
|
||||
int
|
||||
BtoR(long b)
|
||||
BtoR(int32 b)
|
||||
{
|
||||
b &= 0x07fcL;
|
||||
if(b == 0)
|
||||
@ -1167,7 +1168,7 @@ BtoR(long b)
|
||||
* ... ...
|
||||
* 23 F7
|
||||
*/
|
||||
long
|
||||
int32
|
||||
FtoB(int f)
|
||||
{
|
||||
|
||||
@ -1177,7 +1178,7 @@ FtoB(int f)
|
||||
}
|
||||
|
||||
int
|
||||
BtoF(long b)
|
||||
BtoF(int32 b)
|
||||
{
|
||||
|
||||
b &= 0xfc0000L;
|
||||
|
@ -92,7 +92,7 @@ codgen(Node *n, Node *nn)
|
||||
void
|
||||
supgen(Node *n)
|
||||
{
|
||||
long spc;
|
||||
int32 spc;
|
||||
Prog *sp;
|
||||
|
||||
if(n == Z)
|
||||
@ -113,7 +113,7 @@ gen(Node *n)
|
||||
Node *l, nod;
|
||||
Prog *sp, *spc, *spb;
|
||||
Case *cn;
|
||||
long sbc, scc;
|
||||
int32 sbc, scc;
|
||||
int o, f;
|
||||
|
||||
loop:
|
||||
|
@ -47,7 +47,7 @@ doswit(Node *n)
|
||||
{
|
||||
Case *c;
|
||||
C1 *q, *iq;
|
||||
long def, nc, i;
|
||||
int32 def, nc, i;
|
||||
Node tn;
|
||||
|
||||
def = 0;
|
||||
@ -86,11 +86,11 @@ doswit(Node *n)
|
||||
}
|
||||
|
||||
void
|
||||
swit1(C1 *q, int nc, long def, Node *n, Node *tn)
|
||||
swit1(C1 *q, int nc, int32 def, Node *n, Node *tn)
|
||||
{
|
||||
C1 *r;
|
||||
int i;
|
||||
long v;
|
||||
int32 v;
|
||||
Prog *sp;
|
||||
|
||||
if(nc >= 3) {
|
||||
@ -166,7 +166,7 @@ void
|
||||
bitload(Node *b, Node *n1, Node *n2, Node *n3, Node *nn)
|
||||
{
|
||||
int sh;
|
||||
long v;
|
||||
int32 v;
|
||||
Node *l;
|
||||
|
||||
/*
|
||||
@ -204,7 +204,7 @@ bitload(Node *b, Node *n1, Node *n2, Node *n3, Node *nn)
|
||||
void
|
||||
bitstore(Node *b, Node *n1, Node *n2, Node *n3, Node *nn)
|
||||
{
|
||||
long v;
|
||||
int32 v;
|
||||
Node nod, *l;
|
||||
int sh;
|
||||
|
||||
@ -234,10 +234,10 @@ bitstore(Node *b, Node *n1, Node *n2, Node *n3, Node *nn)
|
||||
regfree(n3);
|
||||
}
|
||||
|
||||
long
|
||||
outstring(char *s, long n)
|
||||
int32
|
||||
outstring(char *s, int32 n)
|
||||
{
|
||||
long r;
|
||||
int32 r;
|
||||
|
||||
if(suppress)
|
||||
return nstring;
|
||||
@ -259,12 +259,12 @@ outstring(char *s, long n)
|
||||
return r;
|
||||
}
|
||||
|
||||
long
|
||||
outlstring(ushort *s, long n)
|
||||
int32
|
||||
outlstring(ushort *s, int32 n)
|
||||
{
|
||||
char buf[2];
|
||||
int c;
|
||||
long r;
|
||||
int32 r;
|
||||
|
||||
if(suppress)
|
||||
return nstring;
|
||||
@ -291,7 +291,7 @@ mulcon(Node *n, Node *nn)
|
||||
{
|
||||
Node *l, *r, nod1, nod2;
|
||||
Multab *m;
|
||||
long v, vs;
|
||||
int32 v, vs;
|
||||
int o;
|
||||
char code[sizeof(m->code)+2], *p;
|
||||
|
||||
@ -391,9 +391,9 @@ nullwarn(Node *l, Node *r)
|
||||
}
|
||||
|
||||
void
|
||||
sextern(Sym *s, Node *a, long o, long w)
|
||||
sextern(Sym *s, Node *a, int32 o, int32 w)
|
||||
{
|
||||
long e, lw;
|
||||
int32 e, lw;
|
||||
|
||||
for(e=0; e<w; e+=NSNAME) {
|
||||
lw = NSNAME;
|
||||
@ -408,7 +408,7 @@ sextern(Sym *s, Node *a, long o, long w)
|
||||
}
|
||||
|
||||
void
|
||||
gextern(Sym *s, Node *a, long o, long w)
|
||||
gextern(Sym *s, Node *a, int32 o, int32 w)
|
||||
{
|
||||
|
||||
if(a->op == OCONST && typev[a->type->etype]) {
|
||||
@ -600,7 +600,7 @@ void
|
||||
zname(Biobuf *b, Sym *s, int t)
|
||||
{
|
||||
char *n, bf[7];
|
||||
ulong sig;
|
||||
uint32 sig;
|
||||
|
||||
n = s->name;
|
||||
if(debug['T'] && t == D_EXTERN && s->sig != SIGDONE && s->type != types[TENUM] && s != symrathole){
|
||||
@ -627,7 +627,7 @@ zname(Biobuf *b, Sym *s, int t)
|
||||
char*
|
||||
zaddr(char *bp, Adr *a, int s)
|
||||
{
|
||||
long l;
|
||||
int32 l;
|
||||
Ieee e;
|
||||
|
||||
bp[0] = a->type;
|
||||
@ -707,13 +707,13 @@ ieeedtod(Ieee *ieee, double native)
|
||||
fr = modf(fr*f, &ho);
|
||||
ieee->l = ho;
|
||||
ieee->l <<= 16;
|
||||
ieee->l |= (long)(fr*f);
|
||||
ieee->l |= (int32)(fr*f);
|
||||
}
|
||||
|
||||
long
|
||||
align(long i, Type *t, int op)
|
||||
int32
|
||||
align(int32 i, Type *t, int op)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
Type *v;
|
||||
int w;
|
||||
|
||||
@ -771,16 +771,16 @@ align(long i, Type *t, int op)
|
||||
w = SZ_LONG; /* because of a pun in cc/dcl.c:contig() */
|
||||
break;
|
||||
}
|
||||
o = round(o, w);
|
||||
o = xround(o, w);
|
||||
if(debug['A'])
|
||||
print("align %s %ld %T = %ld\n", bnames[op], i, t, o);
|
||||
return o;
|
||||
}
|
||||
|
||||
long
|
||||
maxround(long max, long v)
|
||||
int32
|
||||
maxround(int32 max, int32 v)
|
||||
{
|
||||
v = round(v, SZ_LONG);
|
||||
v = xround(v, SZ_LONG);
|
||||
if(v > max)
|
||||
return v;
|
||||
return max;
|
||||
|
@ -165,7 +165,7 @@ nextpc(void)
|
||||
void
|
||||
gargs(Node *n, Node *tn1, Node *tn2)
|
||||
{
|
||||
long regs;
|
||||
int32 regs;
|
||||
Node fnxargs[20], *fnxp;
|
||||
|
||||
regs = cursafe;
|
||||
@ -235,7 +235,7 @@ garg1(Node *n, Node *tn1, Node *tn2, int f, Node **fnxp)
|
||||
}
|
||||
|
||||
Node*
|
||||
nodconst(long v)
|
||||
nodconst(int32 v)
|
||||
{
|
||||
constnode.vconst = v;
|
||||
return &constnode;
|
||||
@ -455,7 +455,7 @@ raddr(Node *n, Prog *p)
|
||||
void
|
||||
naddr(Node *n, Adr *a)
|
||||
{
|
||||
long v;
|
||||
int32 v;
|
||||
|
||||
a->type = D_NONE;
|
||||
if(n == Z)
|
||||
@ -1148,7 +1148,7 @@ gbranch(int o)
|
||||
}
|
||||
|
||||
void
|
||||
patch(Prog *op, long pc)
|
||||
patch(Prog *op, int32 pc)
|
||||
{
|
||||
|
||||
op->to.offset = pc;
|
||||
@ -1165,7 +1165,7 @@ gpseudo(int a, Sym *s, Node *n)
|
||||
p->from.sym = s;
|
||||
p->from.name = D_EXTERN;
|
||||
if(a == ATEXT)
|
||||
p->reg = (profileflg ? 0 : NOPROF);
|
||||
p->reg = textflag;
|
||||
if(s->class == CSTATIC)
|
||||
p->from.name = D_STATIC;
|
||||
naddr(n, &p->to);
|
||||
@ -1195,7 +1195,7 @@ sconst(Node *n)
|
||||
}
|
||||
|
||||
int
|
||||
sval(long v)
|
||||
sval(int32 v)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1204,15 +1204,15 @@ sval(long v)
|
||||
return 1;
|
||||
if((~v & ~0xff) == 0)
|
||||
return 1;
|
||||
v = (v<<2) | ((ulong)v>>30);
|
||||
v = (v<<2) | ((uint32)v>>30);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
exreg(Type *t)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
if(typechlp[t->etype]) {
|
||||
if(exregoffset <= REGEXT-4)
|
||||
@ -1255,7 +1255,7 @@ schar ewidth[NTYPE] =
|
||||
SZ_INT, /* [TENUM] */
|
||||
};
|
||||
|
||||
long ncast[NTYPE] =
|
||||
int32 ncast[NTYPE] =
|
||||
{
|
||||
0, /* [TXXX] */
|
||||
BCHAR|BUCHAR, /* [TCHAR] */
|
||||
|
@ -220,8 +220,8 @@ enum as
|
||||
typedef struct ieee Ieee;
|
||||
struct ieee
|
||||
{
|
||||
long l; /* contains ls-man 0xffffffff */
|
||||
long h; /* contains sign 0x80000000
|
||||
int32 l; /* contains ls-man 0xffffffff */
|
||||
int32 h; /* contains sign 0x80000000
|
||||
exp 0x7ff00000
|
||||
ms-man 0x000fffff */
|
||||
};
|
40
src/cmd/5l/Makefile
Normal file
40
src/cmd/5l/Makefile
Normal file
@ -0,0 +1,40 @@
|
||||
# Copyright 2009 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
include ../../Make.conf
|
||||
|
||||
TARG=\
|
||||
5l\
|
||||
|
||||
OFILES=\
|
||||
asm.$O\
|
||||
compat.$O\
|
||||
enam.$O\
|
||||
list.$O\
|
||||
noop.$O\
|
||||
obj.$O\
|
||||
optab.$O\
|
||||
pass.$O\
|
||||
thumb.$O\
|
||||
span.$O\
|
||||
# go.$O\
|
||||
|
||||
HFILES=\
|
||||
l.h\
|
||||
../5l/5.out.h\
|
||||
|
||||
|
||||
$(TARG): $(OFILES)
|
||||
$(LD) -o $(TARG) -L$(GOROOT)/lib $(OFILES) -lbio -l9
|
||||
|
||||
$(OFILES): $(HFILES)
|
||||
|
||||
enam.c: 5.out.h
|
||||
sh mkenam
|
||||
|
||||
clean:
|
||||
rm -f $(OFILES) $(TARG) *.5 enam.c 5.out a.out
|
||||
|
||||
install: $(TARG)
|
||||
cp $(TARG) $(BIN)/$(TARG)
|
@ -30,11 +30,11 @@
|
||||
|
||||
#include "l.h"
|
||||
|
||||
long OFFSET;
|
||||
int32 OFFSET;
|
||||
|
||||
static Prog *PP;
|
||||
|
||||
long
|
||||
int32
|
||||
entryvalue(void)
|
||||
{
|
||||
char *a;
|
||||
@ -63,7 +63,7 @@ void
|
||||
asmb(void)
|
||||
{
|
||||
Prog *p;
|
||||
long t, etext;
|
||||
int32 t, etext;
|
||||
Optab *o;
|
||||
|
||||
if(debug['v'])
|
||||
@ -286,7 +286,7 @@ cput(int c)
|
||||
|
||||
/*
|
||||
void
|
||||
cput(long c)
|
||||
cput(int32 c)
|
||||
{
|
||||
*cbp++ = c;
|
||||
if(--cbc <= 0)
|
||||
@ -295,7 +295,7 @@ cput(long c)
|
||||
*/
|
||||
|
||||
void
|
||||
wput(long l)
|
||||
wput(int32 l)
|
||||
{
|
||||
|
||||
cbp[0] = l>>8;
|
||||
@ -307,7 +307,7 @@ wput(long l)
|
||||
}
|
||||
|
||||
void
|
||||
hput(long l)
|
||||
hput(int32 l)
|
||||
{
|
||||
|
||||
cbp[0] = l>>8;
|
||||
@ -319,7 +319,7 @@ hput(long l)
|
||||
}
|
||||
|
||||
void
|
||||
lput(long l)
|
||||
lput(int32 l)
|
||||
{
|
||||
|
||||
cbp[0] = l>>24;
|
||||
@ -333,7 +333,7 @@ lput(long l)
|
||||
}
|
||||
|
||||
void
|
||||
lputl(long l)
|
||||
lputl(int32 l)
|
||||
{
|
||||
|
||||
cbp[3] = l>>24;
|
||||
@ -437,7 +437,7 @@ asmsym(void)
|
||||
}
|
||||
|
||||
void
|
||||
putsymb(char *s, int t, long v, int ver)
|
||||
putsymb(char *s, int t, int32 v, int ver)
|
||||
{
|
||||
int i, f;
|
||||
|
||||
@ -486,9 +486,9 @@ putsymb(char *s, int t, long v, int ver)
|
||||
void
|
||||
asmlc(void)
|
||||
{
|
||||
long oldpc, oldlc;
|
||||
int32 oldpc, oldlc;
|
||||
Prog *p;
|
||||
long v, s;
|
||||
int32 v, s;
|
||||
|
||||
oldpc = INITTEXT;
|
||||
oldlc = 0;
|
||||
@ -565,7 +565,7 @@ asmlc(void)
|
||||
}
|
||||
|
||||
static void
|
||||
outt(long f, long l)
|
||||
outt(int32 f, int32 l)
|
||||
{
|
||||
if(debug['L'])
|
||||
Bprint(&bso, "tmap: %lux-%lux\n", f, l);
|
||||
@ -576,7 +576,7 @@ outt(long f, long l)
|
||||
void
|
||||
asmthumbmap(void)
|
||||
{
|
||||
long pc, lastt;
|
||||
int32 pc, lastt;
|
||||
Prog *p;
|
||||
|
||||
if(!seenthumb)
|
||||
@ -616,12 +616,12 @@ asmthumbmap(void)
|
||||
}
|
||||
|
||||
void
|
||||
datblk(long s, long n, int str)
|
||||
datblk(int32 s, int32 n, int str)
|
||||
{
|
||||
Sym *v;
|
||||
Prog *p;
|
||||
char *cast;
|
||||
long a, l, fl, j, d;
|
||||
int32 a, l, fl, j, d;
|
||||
int i, c;
|
||||
|
||||
memset(buf.dbuf, 0, n+100);
|
||||
@ -747,7 +747,7 @@ datblk(long s, long n, int str)
|
||||
void
|
||||
asmout(Prog *p, Optab *o)
|
||||
{
|
||||
long o1, o2, o3, o4, o5, o6, v;
|
||||
int32 o1, o2, o3, o4, o5, o6, v;
|
||||
int r, rf, rt, rt2;
|
||||
Sym *s;
|
||||
|
||||
@ -759,7 +759,7 @@ PP = p;
|
||||
o5 = 0;
|
||||
o6 = 0;
|
||||
armsize += o->size;
|
||||
if(debug['P']) print("%ulx: %P type %d\n", (ulong)(p->pc), p, o->type);
|
||||
if(debug['P']) print("%ulx: %P type %d\n", (uint32)(p->pc), p, o->type);
|
||||
switch(o->type) {
|
||||
default:
|
||||
diag("unknown asm %d", o->type);
|
||||
@ -767,7 +767,7 @@ if(debug['P']) print("%ulx: %P type %d\n", (ulong)(p->pc), p, o->type);
|
||||
break;
|
||||
|
||||
case 0: /* pseudo ops */
|
||||
if(debug['G']) print("%ulx: %s: arm %d %d %d %d\n", (ulong)(p->pc), p->from.sym->name, p->from.sym->thumb, p->from.sym->foreign, p->from.sym->fnptr, p->from.sym->used);
|
||||
if(debug['G']) print("%ulx: %s: arm %d %d %d %d\n", (uint32)(p->pc), p->from.sym->name, p->from.sym->thumb, p->from.sym->foreign, p->from.sym->fnptr, p->from.sym->used);
|
||||
break;
|
||||
|
||||
case 1: /* op R,[R],R */
|
||||
@ -832,7 +832,7 @@ if(debug['G']) print("%ulx: %s: arm %d %d %d %d\n", (ulong)(p->pc), p->from.sym-
|
||||
s = p->to.sym;
|
||||
if(s->type != SUNDEF)
|
||||
diag("bad branch sym type");
|
||||
v = (ulong)s->value >> (Roffset-2);
|
||||
v = (uint32)s->value >> (Roffset-2);
|
||||
dynreloc(s, p->pc, 0);
|
||||
}
|
||||
else if(p->cond != P)
|
||||
@ -1209,7 +1209,7 @@ if(debug['G']) print("%ulx: %s: arm %d %d %d %d\n", (ulong)(p->pc), p->from.sym-
|
||||
o1 = ofsr(p->as, p->to.reg, v, r, p->scond, p) | (1<<20);
|
||||
break;
|
||||
|
||||
case 52: /* floating point store, long offset UGLY */
|
||||
case 52: /* floating point store, int32 offset UGLY */
|
||||
o1 = omvl(p, &p->to, REGTMP);
|
||||
if(!o1)
|
||||
break;
|
||||
@ -1220,7 +1220,7 @@ if(debug['G']) print("%ulx: %s: arm %d %d %d %d\n", (ulong)(p->pc), p->from.sym-
|
||||
o3 = ofsr(p->as, p->from.reg, 0, REGTMP, p->scond, p);
|
||||
break;
|
||||
|
||||
case 53: /* floating point load, long offset UGLY */
|
||||
case 53: /* floating point load, int32 offset UGLY */
|
||||
o1 = omvl(p, &p->from, REGTMP);
|
||||
if(!o1)
|
||||
break;
|
||||
@ -1547,10 +1547,10 @@ if(debug['G']) print("%ulx: %s: arm %d %d %d %d\n", (ulong)(p->pc), p->from.sym-
|
||||
}
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
oprrr(int a, int sc)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
o = (sc & C_SCOND) << 28;
|
||||
if(sc & C_SBIT)
|
||||
@ -1612,7 +1612,7 @@ oprrr(int a, int sc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
opbra(int a, int sc)
|
||||
{
|
||||
|
||||
@ -1647,10 +1647,10 @@ opbra(int a, int sc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long
|
||||
olr(long v, int b, int r, int sc)
|
||||
int32
|
||||
olr(int32 v, int b, int r, int sc)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
if(sc & C_SBIT)
|
||||
diag(".S on LDR/STR instruction");
|
||||
@ -1674,10 +1674,10 @@ olr(long v, int b, int r, int sc)
|
||||
return o;
|
||||
}
|
||||
|
||||
long
|
||||
olhr(long v, int b, int r, int sc)
|
||||
int32
|
||||
olhr(int32 v, int b, int r, int sc)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
if(sc & C_SBIT)
|
||||
diag(".S on LDRH/STRH instruction");
|
||||
@ -1699,10 +1699,10 @@ olhr(long v, int b, int r, int sc)
|
||||
return o;
|
||||
}
|
||||
|
||||
long
|
||||
osr(int a, int r, long v, int b, int sc)
|
||||
int32
|
||||
osr(int a, int r, int32 v, int b, int sc)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
o = olr(v, b, r, sc) ^ (1<<20);
|
||||
if(a != AMOVW)
|
||||
@ -1710,46 +1710,46 @@ osr(int a, int r, long v, int b, int sc)
|
||||
return o;
|
||||
}
|
||||
|
||||
long
|
||||
oshr(int r, long v, int b, int sc)
|
||||
int32
|
||||
oshr(int r, int32 v, int b, int sc)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
o = olhr(v, b, r, sc) ^ (1<<20);
|
||||
return o;
|
||||
}
|
||||
|
||||
|
||||
long
|
||||
int32
|
||||
osrr(int r, int i, int b, int sc)
|
||||
{
|
||||
|
||||
return olr(i, b, r, sc) ^ ((1<<25) | (1<<20));
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
oshrr(int r, int i, int b, int sc)
|
||||
{
|
||||
return olhr(i, b, r, sc) ^ ((1<<22) | (1<<20));
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
olrr(int i, int b, int r, int sc)
|
||||
{
|
||||
|
||||
return olr(i, b, r, sc) ^ (1<<25);
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
olhrr(int i, int b, int r, int sc)
|
||||
{
|
||||
return olhr(i, b, r, sc) ^ (1<<22);
|
||||
}
|
||||
|
||||
long
|
||||
ofsr(int a, int r, long v, int b, int sc, Prog *p)
|
||||
int32
|
||||
ofsr(int a, int r, int32 v, int b, int sc, Prog *p)
|
||||
{
|
||||
long o;
|
||||
int32 o;
|
||||
|
||||
if(sc & C_SBIT)
|
||||
diag(".S on FLDR/FSTR instruction");
|
||||
@ -1783,10 +1783,10 @@ ofsr(int a, int r, long v, int b, int sc, Prog *p)
|
||||
return o;
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
omvl(Prog *p, Adr *a, int dr)
|
||||
{
|
||||
long v, o1;
|
||||
int32 v, o1;
|
||||
if(!p->cond) {
|
||||
aclass(a);
|
||||
v = immrot(~instoffset);
|
||||
|
114
src/cmd/5l/l.h
114
src/cmd/5l/l.h
@ -30,7 +30,7 @@
|
||||
|
||||
#include <lib9.h>
|
||||
#include <bio.h>
|
||||
#include "../5c/5.out.h"
|
||||
#include "../5l/5.out.h"
|
||||
|
||||
#ifndef EXTERN
|
||||
#define EXTERN extern
|
||||
@ -58,7 +58,7 @@ struct Adr
|
||||
{
|
||||
union
|
||||
{
|
||||
long u0offset;
|
||||
int32 u0offset;
|
||||
char* u0sval;
|
||||
Ieee* u0ieee;
|
||||
} u0;
|
||||
@ -86,13 +86,13 @@ struct Prog
|
||||
Adr to;
|
||||
union
|
||||
{
|
||||
long u0regused;
|
||||
int32 u0regused;
|
||||
Prog* u0forwd;
|
||||
} u0;
|
||||
Prog* cond;
|
||||
Prog* link;
|
||||
long pc;
|
||||
long line;
|
||||
int32 pc;
|
||||
int32 line;
|
||||
uchar mark;
|
||||
uchar optab;
|
||||
uchar as;
|
||||
@ -112,8 +112,8 @@ struct Sym
|
||||
short frame;
|
||||
uchar subtype;
|
||||
ushort file;
|
||||
long value;
|
||||
long sig;
|
||||
int32 value;
|
||||
int32 sig;
|
||||
uchar used;
|
||||
uchar thumb; // thumb code
|
||||
uchar foreign; // called by arm if thumb, by thumb if arm
|
||||
@ -128,7 +128,7 @@ struct Autom
|
||||
{
|
||||
Sym* asym;
|
||||
Auto* link;
|
||||
long aoffset;
|
||||
int32 aoffset;
|
||||
short type;
|
||||
};
|
||||
struct Optab
|
||||
@ -149,8 +149,8 @@ struct Oprang
|
||||
};
|
||||
struct Count
|
||||
{
|
||||
long count;
|
||||
long outof;
|
||||
int32 count;
|
||||
int32 outof;
|
||||
};
|
||||
struct Use
|
||||
{
|
||||
@ -275,15 +275,15 @@ EXTERN union
|
||||
|
||||
#ifndef COFFCVT
|
||||
|
||||
EXTERN long HEADR; /* length of header */
|
||||
EXTERN int32 HEADR; /* length of header */
|
||||
EXTERN int HEADTYPE; /* type of header */
|
||||
EXTERN long INITDAT; /* data location */
|
||||
EXTERN long INITRND; /* data round above text location */
|
||||
EXTERN long INITTEXT; /* text location */
|
||||
EXTERN int32 INITDAT; /* data location */
|
||||
EXTERN int32 INITRND; /* data round above text location */
|
||||
EXTERN int32 INITTEXT; /* text location */
|
||||
EXTERN char* INITENTRY; /* entry point */
|
||||
EXTERN long autosize;
|
||||
EXTERN int32 autosize;
|
||||
EXTERN Biobuf bso;
|
||||
EXTERN long bsssize;
|
||||
EXTERN int32 bsssize;
|
||||
EXTERN int cbc;
|
||||
EXTERN uchar* cbp;
|
||||
EXTERN int cout;
|
||||
@ -292,7 +292,7 @@ EXTERN Auto* curhist;
|
||||
EXTERN Prog* curp;
|
||||
EXTERN Prog* curtext;
|
||||
EXTERN Prog* datap;
|
||||
EXTERN long datsize;
|
||||
EXTERN int32 datsize;
|
||||
EXTERN char debug[128];
|
||||
EXTERN Prog* etextp;
|
||||
EXTERN Prog* firstp;
|
||||
@ -312,21 +312,21 @@ EXTERN char inuxi1[1];
|
||||
EXTERN char inuxi2[2];
|
||||
EXTERN char inuxi4[4];
|
||||
EXTERN Prog* lastp;
|
||||
EXTERN long lcsize;
|
||||
EXTERN int32 lcsize;
|
||||
EXTERN char literal[32];
|
||||
EXTERN int nerrors;
|
||||
EXTERN long nhunk;
|
||||
EXTERN long instoffset;
|
||||
EXTERN int32 nhunk;
|
||||
EXTERN int32 instoffset;
|
||||
EXTERN Opcross opcross[8];
|
||||
EXTERN Oprang oprange[ALAST];
|
||||
EXTERN Oprang thumboprange[ALAST];
|
||||
EXTERN char* outfile;
|
||||
EXTERN long pc;
|
||||
EXTERN int32 pc;
|
||||
EXTERN uchar repop[ALAST];
|
||||
EXTERN long symsize;
|
||||
EXTERN int32 symsize;
|
||||
EXTERN Prog* textp;
|
||||
EXTERN long textsize;
|
||||
EXTERN long thunk;
|
||||
EXTERN int32 textsize;
|
||||
EXTERN int32 thunk;
|
||||
EXTERN int version;
|
||||
EXTERN char xcmp[C_GOK+1][C_GOK+1];
|
||||
EXTERN Prog zprg;
|
||||
@ -373,7 +373,7 @@ int Pconv(Fmt*);
|
||||
int Sconv(Fmt*);
|
||||
int aclass(Adr*);
|
||||
int thumbaclass(Adr*, Prog*);
|
||||
void addhist(long, int);
|
||||
void addhist(int32, int);
|
||||
void append(Prog*, Prog*);
|
||||
void asmb(void);
|
||||
void asmdyn(void);
|
||||
@ -382,87 +382,87 @@ void asmthumbmap(void);
|
||||
void asmout(Prog*, Optab*);
|
||||
void thumbasmout(Prog*, Optab*);
|
||||
void asmsym(void);
|
||||
long atolwhex(char*);
|
||||
int32 atolwhex(char*);
|
||||
Prog* brloop(Prog*);
|
||||
void buildop(void);
|
||||
void thumbbuildop(void);
|
||||
void buildrep(int, int);
|
||||
void cflush(void);
|
||||
void ckoff(Sym*, long);
|
||||
void ckoff(Sym*, int32);
|
||||
int chipfloat(Ieee*);
|
||||
int cmp(int, int);
|
||||
int compound(Prog*);
|
||||
double cputime(void);
|
||||
void datblk(long, long, int);
|
||||
void datblk(int32, int32, int);
|
||||
void diag(char*, ...);
|
||||
void divsig(void);
|
||||
void dodata(void);
|
||||
void doprof1(void);
|
||||
void doprof2(void);
|
||||
void dynreloc(Sym*, long, int);
|
||||
long entryvalue(void);
|
||||
void dynreloc(Sym*, int32, int);
|
||||
int32 entryvalue(void);
|
||||
void errorexit(void);
|
||||
void exchange(Prog*);
|
||||
void export(void);
|
||||
int find1(long, int);
|
||||
int find1(int32, int);
|
||||
void follow(void);
|
||||
void gethunk(void);
|
||||
void histtoauto(void);
|
||||
void hputl(int);
|
||||
double ieeedtod(Ieee*);
|
||||
long ieeedtof(Ieee*);
|
||||
int32 ieeedtof(Ieee*);
|
||||
void import(void);
|
||||
int isnop(Prog*);
|
||||
void ldobj(int, long, char*);
|
||||
void ldobj(int, int32, char*);
|
||||
void loadlib(void);
|
||||
void listinit(void);
|
||||
Sym* lookup(char*, int);
|
||||
void cput(int);
|
||||
void hput(long);
|
||||
void lput(long);
|
||||
void lputl(long);
|
||||
void hput(int32);
|
||||
void lput(int32);
|
||||
void lputl(int32);
|
||||
void mkfwd(void);
|
||||
void* mysbrk(ulong);
|
||||
void* mysbrk(uint32);
|
||||
void names(void);
|
||||
void nocache(Prog*);
|
||||
void nuxiinit(void);
|
||||
void objfile(char*);
|
||||
int ocmp(const void*, const void*);
|
||||
long opirr(int);
|
||||
int32 opirr(int);
|
||||
Optab* oplook(Prog*);
|
||||
long oprrr(int, int);
|
||||
long olr(long, int, int, int);
|
||||
long olhr(long, int, int, int);
|
||||
long olrr(int, int, int, int);
|
||||
long olhrr(int, int, int, int);
|
||||
long osr(int, int, long, int, int);
|
||||
long oshr(int, long, int, int);
|
||||
long ofsr(int, int, long, int, int, Prog*);
|
||||
long osrr(int, int, int, int);
|
||||
long oshrr(int, int, int, int);
|
||||
long omvl(Prog*, Adr*, int);
|
||||
int32 oprrr(int, int);
|
||||
int32 olr(int32, int, int, int);
|
||||
int32 olhr(int32, int, int, int);
|
||||
int32 olrr(int, int, int, int);
|
||||
int32 olhrr(int, int, int, int);
|
||||
int32 osr(int, int, int32, int, int);
|
||||
int32 oshr(int, int32, int, int);
|
||||
int32 ofsr(int, int, int32, int, int, Prog*);
|
||||
int32 osrr(int, int, int, int);
|
||||
int32 oshrr(int, int, int, int);
|
||||
int32 omvl(Prog*, Adr*, int);
|
||||
void patch(void);
|
||||
void prasm(Prog*);
|
||||
void prepend(Prog*, Prog*);
|
||||
Prog* prg(void);
|
||||
int pseudo(Prog*);
|
||||
void putsymb(char*, int, long, int);
|
||||
void putsymb(char*, int, int32, int);
|
||||
void readundefs(char*, int);
|
||||
long regoff(Adr*);
|
||||
int32 regoff(Adr*);
|
||||
int relinv(int);
|
||||
long rnd(long, long);
|
||||
int32 rnd(int32, int32);
|
||||
void span(void);
|
||||
void strnput(char*, int);
|
||||
void undef(void);
|
||||
void undefsym(Sym*);
|
||||
void wput(long);
|
||||
void xdefine(char*, int, long);
|
||||
void wput(int32);
|
||||
void xdefine(char*, int, int32);
|
||||
void xfol(Prog*);
|
||||
void zerosig(char*);
|
||||
void noops(void);
|
||||
long immrot(ulong);
|
||||
long immaddr(long);
|
||||
long opbra(int, int);
|
||||
int32 immrot(uint32);
|
||||
int32 immaddr(int32);
|
||||
int32 opbra(int, int);
|
||||
int brextra(Prog*);
|
||||
int isbranch(Prog*);
|
||||
int fnpinc(Sym *);
|
||||
|
@ -156,7 +156,7 @@ Dconv(Fmt *fp)
|
||||
char str[STRINGSZ];
|
||||
char *op;
|
||||
Adr *a;
|
||||
long v;
|
||||
int32 v;
|
||||
|
||||
a = va_arg(fp->args, Adr*);
|
||||
switch(a->type) {
|
||||
@ -335,7 +335,7 @@ Sconv(Fmt *fp)
|
||||
|
||||
a = va_arg(fp->args, char*);
|
||||
p = str;
|
||||
for(i=0; i<sizeof(long); i++) {
|
||||
for(i=0; i<sizeof(int32); i++) {
|
||||
c = a[i] & 0xff;
|
||||
if(c >= 'a' && c <= 'z' ||
|
||||
c >= 'A' && c <= 'Z' ||
|
||||
|
@ -28,7 +28,7 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
ed - ../5c/5.out.h <<'!'
|
||||
ed - ../5l/5.out.h <<'!'
|
||||
v/^ A/d
|
||||
,s/^ A/ "/
|
||||
g/ .*$/s///
|
@ -66,7 +66,7 @@ fnret(Prog *q, int rs, int foreign, Prog *p)
|
||||
}
|
||||
|
||||
static Prog *
|
||||
aword(long w, Prog *p)
|
||||
aword(int32 w, Prog *p)
|
||||
{
|
||||
Prog *q;
|
||||
|
||||
@ -83,7 +83,7 @@ aword(long w, Prog *p)
|
||||
}
|
||||
|
||||
static Prog *
|
||||
adword(long w1, long w2, Prog *p)
|
||||
adword(int32 w1, int32 w2, Prog *p)
|
||||
{
|
||||
Prog *q;
|
||||
|
||||
|
@ -321,7 +321,7 @@ void
|
||||
loadlib(void)
|
||||
{
|
||||
int i;
|
||||
long h;
|
||||
int32 h;
|
||||
Sym *s;
|
||||
|
||||
loop:
|
||||
@ -354,7 +354,7 @@ errorexit(void)
|
||||
void
|
||||
objfile(char *file)
|
||||
{
|
||||
long off, esym, cnt, l;
|
||||
int32 off, esym, cnt, l;
|
||||
int f, work;
|
||||
Sym *s;
|
||||
char magbuf[SARMAG];
|
||||
@ -464,7 +464,7 @@ int
|
||||
zaddr(uchar *p, Adr *a, Sym *h[])
|
||||
{
|
||||
int i, c;
|
||||
long l;
|
||||
int32 l;
|
||||
Sym *s;
|
||||
Auto *u;
|
||||
|
||||
@ -649,7 +649,7 @@ addlib(char *obj)
|
||||
}
|
||||
|
||||
void
|
||||
addhist(long line, int type)
|
||||
addhist(int32 line, int type)
|
||||
{
|
||||
Auto *u;
|
||||
Sym *s;
|
||||
@ -752,14 +752,14 @@ readsome(int f, uchar *buf, uchar *good, uchar *stop, int max)
|
||||
static void puntfp(Prog *);
|
||||
|
||||
void
|
||||
ldobj(int f, long c, char *pn)
|
||||
ldobj(int f, int32 c, char *pn)
|
||||
{
|
||||
long ipc;
|
||||
int32 ipc;
|
||||
Prog *p, *t;
|
||||
uchar *bloc, *bsize, *stop;
|
||||
Sym *h[NSYM], *s, *di;
|
||||
int v, o, r, skip;
|
||||
ulong sig;
|
||||
uint32 sig;
|
||||
static int files;
|
||||
static char **filen;
|
||||
char **nfilen;
|
||||
@ -1153,7 +1153,7 @@ lookup(char *symb, int v)
|
||||
{
|
||||
Sym *s;
|
||||
char *p;
|
||||
long h;
|
||||
int32 h;
|
||||
int c, l;
|
||||
|
||||
h = v;
|
||||
@ -1207,7 +1207,7 @@ void
|
||||
gethunk(void)
|
||||
{
|
||||
char *h;
|
||||
long nh;
|
||||
int32 nh;
|
||||
|
||||
nh = NHUNK;
|
||||
if(thunk >= 5L*NHUNK) {
|
||||
@ -1229,7 +1229,7 @@ void
|
||||
doprof1(void)
|
||||
{
|
||||
Sym *s;
|
||||
long n;
|
||||
int32 n;
|
||||
Prog *p, *q;
|
||||
|
||||
if(debug['v'])
|
||||
@ -1448,7 +1448,7 @@ nuxiinit(void)
|
||||
}
|
||||
|
||||
int
|
||||
find1(long l, int c)
|
||||
find1(int32 l, int c)
|
||||
{
|
||||
char *p;
|
||||
int i;
|
||||
@ -1460,11 +1460,11 @@ find1(long l, int c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
ieeedtof(Ieee *ieeep)
|
||||
{
|
||||
int exp;
|
||||
long v;
|
||||
int32 v;
|
||||
|
||||
if(ieeep->h == 0)
|
||||
return 0;
|
||||
|
@ -36,7 +36,7 @@ dodata(void)
|
||||
int i, t;
|
||||
Sym *s;
|
||||
Prog *p;
|
||||
long orig, v;
|
||||
int32 orig, v;
|
||||
|
||||
if(debug['v'])
|
||||
Bprint(&bso, "%5.2f dodata\n", cputime());
|
||||
@ -316,7 +316,7 @@ loop:
|
||||
void
|
||||
patch(void)
|
||||
{
|
||||
long c, vexit;
|
||||
int32 c, vexit;
|
||||
Prog *p, *q;
|
||||
Sym *s, *s1;
|
||||
int a;
|
||||
@ -410,7 +410,7 @@ void
|
||||
mkfwd(void)
|
||||
{
|
||||
Prog *p;
|
||||
long dwn[LOG], cnt[LOG], i;
|
||||
int32 dwn[LOG], cnt[LOG], i;
|
||||
Prog *lst[LOG];
|
||||
|
||||
for(i=0; i<LOG; i++) {
|
||||
@ -458,10 +458,10 @@ brloop(Prog *p)
|
||||
return P;
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
atolwhex(char *s)
|
||||
{
|
||||
long n;
|
||||
int32 n;
|
||||
int f;
|
||||
|
||||
n = 0;
|
||||
@ -498,10 +498,10 @@ atolwhex(char *s)
|
||||
return n;
|
||||
}
|
||||
|
||||
long
|
||||
rnd(long v, long r)
|
||||
int32
|
||||
rnd(int32 v, int32 r)
|
||||
{
|
||||
long c;
|
||||
int32 c;
|
||||
|
||||
if(r <= 0)
|
||||
return v;
|
||||
@ -849,7 +849,7 @@ import(void)
|
||||
}
|
||||
|
||||
void
|
||||
ckoff(Sym *s, long v)
|
||||
ckoff(Sym *s, int32 v)
|
||||
{
|
||||
if(v < 0 || v >= 1<<Roffset)
|
||||
diag("relocation offset %ld for %s out of range", v, s->name);
|
||||
@ -917,13 +917,13 @@ export(void)
|
||||
Bprint(&bso, "EXPORT: %s sig=%lux t=%d\n", s->name, s->sig, s->type);
|
||||
|
||||
/* signature */
|
||||
p = newdata(et, off, sizeof(long), D_EXTERN);
|
||||
off += sizeof(long);
|
||||
p = newdata(et, off, sizeof(int32), D_EXTERN);
|
||||
off += sizeof(int32);
|
||||
p->to.offset = s->sig;
|
||||
|
||||
/* address */
|
||||
p = newdata(et, off, sizeof(long), D_EXTERN);
|
||||
off += sizeof(long);
|
||||
p = newdata(et, off, sizeof(int32), D_EXTERN);
|
||||
off += sizeof(int32);
|
||||
p->to.name = D_EXTERN;
|
||||
p->to.sym = s;
|
||||
|
||||
@ -945,8 +945,8 @@ export(void)
|
||||
}
|
||||
|
||||
/* name */
|
||||
p = newdata(et, off, sizeof(long), D_EXTERN);
|
||||
off += sizeof(long);
|
||||
p = newdata(et, off, sizeof(int32), D_EXTERN);
|
||||
off += sizeof(int32);
|
||||
p->to.name = D_STATIC;
|
||||
p->to.sym = str;
|
||||
p->to.offset = sv-n;
|
||||
@ -960,8 +960,8 @@ export(void)
|
||||
}
|
||||
|
||||
for(i = 0; i < 3; i++){
|
||||
newdata(et, off, sizeof(long), D_EXTERN);
|
||||
off += sizeof(long);
|
||||
newdata(et, off, sizeof(int32), D_EXTERN);
|
||||
off += sizeof(int32);
|
||||
}
|
||||
et->value = off;
|
||||
if(sv == 0)
|
||||
|
@ -31,9 +31,9 @@
|
||||
#include "l.h"
|
||||
|
||||
static struct {
|
||||
ulong start;
|
||||
ulong size;
|
||||
ulong extra;
|
||||
uint32 start;
|
||||
uint32 size;
|
||||
uint32 extra;
|
||||
} pool;
|
||||
|
||||
int checkpool(Prog*, int);
|
||||
@ -140,11 +140,11 @@ scan(Prog *op, Prog *p, int c)
|
||||
}
|
||||
|
||||
/* size of a case statement including jump table */
|
||||
static long
|
||||
static int32
|
||||
casesz(Prog *p)
|
||||
{
|
||||
int jt = 0;
|
||||
long n = 0;
|
||||
int32 n = 0;
|
||||
Optab *o;
|
||||
|
||||
for( ; p != P; p = p->link){
|
||||
@ -165,7 +165,7 @@ span(void)
|
||||
Sym *setext, *s;
|
||||
Optab *o;
|
||||
int m, bflag, i;
|
||||
long c, otxt, v;
|
||||
int32 c, otxt, v;
|
||||
int lastthumb = -1;
|
||||
|
||||
if(debug['v'])
|
||||
@ -517,7 +517,7 @@ addpool(Prog *p, Adr *a)
|
||||
}
|
||||
|
||||
void
|
||||
xdefine(char *p, int t, long v)
|
||||
xdefine(char *p, int t, int32 v)
|
||||
{
|
||||
Sym *s;
|
||||
|
||||
@ -528,7 +528,7 @@ xdefine(char *p, int t, long v)
|
||||
}
|
||||
}
|
||||
|
||||
long
|
||||
int32
|
||||
regoff(Adr *a)
|
||||
{
|
||||
|
||||
@ -537,8 +537,8 @@ regoff(Adr *a)
|
||||
return instoffset;
|
||||
}
|
||||
|
||||
long
|
||||
immrot(ulong v)
|
||||
int32
|
||||
immrot(uint32 v)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -550,8 +550,8 @@ immrot(ulong v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long
|
||||
immaddr(long v)
|
||||
int32
|
||||
immaddr(int32 v)
|
||||
{
|
||||
if(v >= 0 && v <= 0xfff)
|
||||
return (v & 0xfff) |
|
||||
@ -564,13 +564,13 @@ immaddr(long v)
|
||||
}
|
||||
|
||||
int
|
||||
immfloat(long v)
|
||||
immfloat(int32 v)
|
||||
{
|
||||
return (v & 0xC03) == 0; /* offset will fit in floating-point load/store */
|
||||
}
|
||||
|
||||
int
|
||||
immhalf(long v)
|
||||
immhalf(int32 v)
|
||||
{
|
||||
if(v >= 0 && v <= 0xff)
|
||||
return v|
|
||||
@ -1151,7 +1151,7 @@ struct Reloc
|
||||
int n;
|
||||
int t;
|
||||
uchar *m;
|
||||
ulong *a;
|
||||
uint32 *a;
|
||||
};
|
||||
|
||||
Reloc rels;
|
||||
@ -1161,26 +1161,26 @@ grow(Reloc *r)
|
||||
{
|
||||
int t;
|
||||
uchar *m, *nm;
|
||||
ulong *a, *na;
|
||||
uint32 *a, *na;
|
||||
|
||||
t = r->t;
|
||||
r->t += 64;
|
||||
m = r->m;
|
||||
a = r->a;
|
||||
r->m = nm = malloc(r->t*sizeof(uchar));
|
||||
r->a = na = malloc(r->t*sizeof(ulong));
|
||||
r->a = na = malloc(r->t*sizeof(uint32));
|
||||
memmove(nm, m, t*sizeof(uchar));
|
||||
memmove(na, a, t*sizeof(ulong));
|
||||
memmove(na, a, t*sizeof(uint32));
|
||||
free(m);
|
||||
free(a);
|
||||
}
|
||||
|
||||
void
|
||||
dynreloc(Sym *s, long v, int abs)
|
||||
dynreloc(Sym *s, int32 v, int abs)
|
||||
{
|
||||
int i, k, n;
|
||||
uchar *m;
|
||||
ulong *a;
|
||||
uint32 *a;
|
||||
Reloc *r;
|
||||
|
||||
if(v&3)
|
||||
@ -1228,7 +1228,7 @@ asmdyn()
|
||||
{
|
||||
int i, n, t, c;
|
||||
Sym *s;
|
||||
ulong la, ra, *a;
|
||||
uint32 la, ra, *a;
|
||||
vlong off;
|
||||
uchar *m;
|
||||
Reloc *r;
|
||||
|
@ -30,13 +30,13 @@
|
||||
|
||||
#include "l.h"
|
||||
|
||||
static long thumboprr(int);
|
||||
static long thumboprrr(int, int);
|
||||
static long thumbopirr(int , int);
|
||||
static long thumbopri(int);
|
||||
static long thumbophh(int);
|
||||
static long thumbopbra(int);
|
||||
static long thumbopmv(int, int);
|
||||
static int32 thumboprr(int);
|
||||
static int32 thumboprrr(int, int);
|
||||
static int32 thumbopirr(int , int);
|
||||
static int32 thumbopri(int);
|
||||
static int32 thumbophh(int);
|
||||
static int32 thumbopbra(int);
|
||||
static int32 thumbopmv(int, int);
|
||||
static void lowreg(Prog *, int);
|
||||
static void mult(Prog *, int, int);
|
||||
static void numr(Prog *, int, int, int);
|
||||
@ -327,7 +327,7 @@ thumbaclass(Adr *a, Prog *p)
|
||||
v += e;
|
||||
va += e;
|
||||
instoffset += e;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if(v >= -4194304 && v <= 4194302)
|
||||
return C_SBRA;
|
||||
@ -528,7 +528,7 @@ brextra(Prog *p)
|
||||
|
||||
#define high(r) ((r)>=8)
|
||||
|
||||
static long
|
||||
static int32
|
||||
mv(Prog *p, int r, int off)
|
||||
{
|
||||
int v, o;
|
||||
@ -552,7 +552,7 @@ mv(Prog *p, int r, int off)
|
||||
}
|
||||
|
||||
static void
|
||||
mvcon(Prog *p, int r, int c, long *o1, long *o2)
|
||||
mvcon(Prog *p, int r, int c, int32 *o1, int32 *o2)
|
||||
{
|
||||
int op = 0, n = 0;
|
||||
|
||||
@ -593,7 +593,7 @@ mvcon(Prog *p, int r, int c, long *o1, long *o2)
|
||||
}
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
mvlh(int rs, int rd)
|
||||
{
|
||||
int o = 0x46<<8;
|
||||
@ -676,14 +676,14 @@ thumbbuildop()
|
||||
void
|
||||
thumbasmout(Prog *p, Optab *o)
|
||||
{
|
||||
long o1, o2, o3, o4, o5, o6, o7, v;
|
||||
int32 o1, o2, o3, o4, o5, o6, o7, v;
|
||||
int r, rf, rt;
|
||||
|
||||
rf = p->from.reg;
|
||||
rt = p->to.reg;
|
||||
r = p->reg;
|
||||
o1 = o2 = o3 = o4 = o5 = o6 = o7 = 0;
|
||||
if(debug['P']) print("%ulx: %P type %d %d\n", (ulong)(p->pc), p, o->type, p->align);
|
||||
if(debug['P']) print("%ulx: %P type %d %d\n", (uint32)(p->pc), p, o->type, p->align);
|
||||
opcount[o->type] += o->size;
|
||||
switch(o->type) {
|
||||
default:
|
||||
@ -691,7 +691,7 @@ if(debug['P']) print("%ulx: %P type %d %d\n", (ulong)(p->pc), p, o->type, p->ali
|
||||
prasm(p);
|
||||
break;
|
||||
case 0: /* pseudo ops */
|
||||
if(debug['G']) print("%ulx: %s: thumb\n", (ulong)(p->pc), p->from.sym->name);
|
||||
if(debug['G']) print("%ulx: %s: thumb\n", (uint32)(p->pc), p->from.sym->name);
|
||||
break;
|
||||
case 1: /* op R, -, R or op R, R, - */
|
||||
o1 = thumboprr(p->as);
|
||||
@ -735,7 +735,7 @@ if(debug['G']) print("%ulx: %s: thumb\n", (ulong)(p->pc), p->from.sym->name);
|
||||
break;
|
||||
case 5: /* add/sub/mov $I, -, R or cmp $I, R, - */
|
||||
thumbaclass(&p->from, p);
|
||||
o1 = thumbopri(p->as);
|
||||
o1 = thumbopri(p->as);
|
||||
if(rt == NREG)
|
||||
rt = r;
|
||||
numr(p, instoffset, 0, 255);
|
||||
@ -1077,7 +1077,7 @@ if(debug['G']) print("%ulx: %s: thumb\n", (ulong)(p->pc), p->from.sym->name);
|
||||
break;
|
||||
case 42: /* Bcc GBRA */
|
||||
thumbaclass(&p->to, p);
|
||||
o1 = (0xd<<12) | thumbopbra(relinv(p->as)) | (6>>1); // bccnot
|
||||
o1 = (0xd<<12) | thumbopbra(relinv(p->as)) | (6>>1); // bccnot
|
||||
// ab lbra
|
||||
o2 = (0x9<<11) | (REGTMPT<<8); // mov 0(pc), r7
|
||||
o3 = mvlh(REGTMPT, REGPC); // mov r7, pc
|
||||
@ -1119,7 +1119,7 @@ if(debug['G']) print("%ulx: %s: thumb\n", (ulong)(p->pc), p->from.sym->name);
|
||||
break;
|
||||
case 46: /* Bcc LBRA */
|
||||
thumbaclass(&p->to, p);
|
||||
o1 = (0xd<<12) | thumbopbra(relinv(p->as)) | (0>>1); // bccnot
|
||||
o1 = (0xd<<12) | thumbopbra(relinv(p->as)) | (0>>1); // bccnot
|
||||
// ab lbra
|
||||
instoffset -= 2;
|
||||
numr(p, instoffset, -2048, 2046);
|
||||
@ -1242,7 +1242,7 @@ if(debug['G']) print("%ulx: %s: thumb\n", (ulong)(p->pc), p->from.sym->name);
|
||||
}
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
thumboprr(int a)
|
||||
{
|
||||
switch(a) {
|
||||
@ -1267,7 +1267,7 @@ thumboprr(int a)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
thumbopirr(int a, int ld)
|
||||
{
|
||||
if(ld)
|
||||
@ -1281,8 +1281,8 @@ thumbopirr(int a, int ld)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
|
||||
static int32
|
||||
thumboprrr(int a, int ld)
|
||||
{
|
||||
if(ld){
|
||||
@ -1308,7 +1308,7 @@ thumboprrr(int a, int ld)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
thumbopri(int a)
|
||||
{
|
||||
switch(a) {
|
||||
@ -1325,7 +1325,7 @@ thumbopri(int a)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
thumbophh(int a)
|
||||
{
|
||||
switch(a) {
|
||||
@ -1338,7 +1338,7 @@ thumbophh(int a)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
thumbopbra(int a)
|
||||
{
|
||||
switch(a) {
|
||||
@ -1364,7 +1364,7 @@ thumbopbra(int a)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
static int32
|
||||
thumbopmv(int a, int ld)
|
||||
{
|
||||
switch(a) {
|
||||
@ -1379,7 +1379,7 @@ thumbopmv(int a, int ld)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
lowreg(Prog *p, int r)
|
||||
{
|
||||
if(high(r))
|
||||
@ -1393,14 +1393,14 @@ mult(Prog *p, int n, int m)
|
||||
diag("%d not M(%d) [%P]", n, m, p);
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
numr(Prog *p, int n, int min, int max)
|
||||
{
|
||||
if(n < min || n > max)
|
||||
diag("%d not in %d-%d [%P]", n, min, max, p);
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
regis(Prog *p, int r, int r1, int r2)
|
||||
{
|
||||
if(r != r1 && r != r2)
|
||||
@ -1432,7 +1432,7 @@ thumbcount()
|
||||
print("%d: %d %d %d%%\n", i, opcount[i], c, (opcount[i]*100+t/2)/t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
char *op1[] = { "lsl", "lsr", "asr" };
|
||||
char *op2[] = { "add", "sub" };
|
||||
char *op3[] = { "movw", "cmp", "add", "sub" };
|
||||
@ -1513,7 +1513,7 @@ lhreg(int r, int lh)
|
||||
sprint(s[i], "r%d", r+8);
|
||||
return s[i];
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
illegal(int i, int pc)
|
||||
{
|
||||
|
@ -3,7 +3,7 @@
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
for i in cc 6l 6a 6c 8l 8a 8c gc 6g ar db nm acid cov gobuild prof gotest
|
||||
for i in cc 6l 6a 6c 8l 8a 8c 5l 5a 5c gc 6g ar db nm acid cov gobuild prof gotest
|
||||
do
|
||||
cd $i
|
||||
make clean
|
||||
|
22
src/cmd/make5.bash
Normal file
22
src/cmd/make5.bash
Normal file
@ -0,0 +1,22 @@
|
||||
# Copyright 2009 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
bash clean.bash
|
||||
|
||||
cd 5l
|
||||
bash mkenam
|
||||
make enam.o
|
||||
cd ..
|
||||
|
||||
for i in cc 5l 5a 5c gc ar db nm acid cov gobuild prof gotest
|
||||
do
|
||||
echo; echo; echo %%%% making $i %%%%; echo
|
||||
cd $i
|
||||
make install
|
||||
cd ..
|
||||
done
|
Loading…
Reference in New Issue
Block a user