Run through clang-format.
This commit is contained in:
parent
671bf250f5
commit
44b6421519
362
util/ego/ic/ic.c
362
util/ego/ic/ic.c
|
@ -29,41 +29,36 @@
|
||||||
#include "../share/put.h"
|
#include "../share/put.h"
|
||||||
#include "../share/aux.h"
|
#include "../share/aux.h"
|
||||||
|
|
||||||
|
|
||||||
/* Global variables */
|
/* Global variables */
|
||||||
|
|
||||||
|
dblock_p db;
|
||||||
|
dblock_p hol0_db; /* dblock for ABS block */
|
||||||
|
char* curhol; /* name of hol block in current scope */
|
||||||
|
dblock_p ldblock; /* last dblock */
|
||||||
|
proc_p lproc; /* last proc */
|
||||||
|
short tabval; /* used by table1, table2 and table3 */
|
||||||
|
offset tabval2;
|
||||||
|
char string[IDL + 1];
|
||||||
|
line_p firstline; /* first line of current procedure */
|
||||||
|
line_p lastline; /* last line read */
|
||||||
|
int labelcount; /* # labels in current procedure */
|
||||||
|
short fragm_type = DUNKNOWN; /* fragm. type: DCON, DROM or DUNKNOWN */
|
||||||
|
short fragm_nr = 0; /* fragment number */
|
||||||
|
obj_id lastoid = 0;
|
||||||
|
proc_id lastpid = 0;
|
||||||
|
dblock_id lastdid = 0;
|
||||||
|
lab_id lastlid = 0;
|
||||||
|
|
||||||
dblock_p db;
|
offset mespar = UNKNOWN_SIZE;
|
||||||
dblock_p hol0_db; /* dblock for ABS block */
|
/* argumument of ps_par message of current procedure */
|
||||||
char *curhol; /* name of hol block in current scope */
|
|
||||||
dblock_p ldblock; /* last dblock */
|
|
||||||
proc_p lproc; /* last proc */
|
|
||||||
short tabval; /* used by table1, table2 and table3 */
|
|
||||||
offset tabval2;
|
|
||||||
char string[IDL+1];
|
|
||||||
line_p firstline; /* first line of current procedure */
|
|
||||||
line_p lastline; /* last line read */
|
|
||||||
int labelcount; /* # labels in current procedure */
|
|
||||||
short fragm_type = DUNKNOWN; /* fragm. type: DCON, DROM or DUNKNOWN */
|
|
||||||
short fragm_nr = 0; /* fragment number */
|
|
||||||
obj_id lastoid = 0;
|
|
||||||
proc_id lastpid = 0;
|
|
||||||
dblock_id lastdid = 0;
|
|
||||||
lab_id lastlid = 0;
|
|
||||||
|
|
||||||
offset mespar = UNKNOWN_SIZE;
|
extern process_lines();
|
||||||
/* argumument of ps_par message of current procedure */
|
extern int readline();
|
||||||
|
extern line_p readoperand();
|
||||||
|
extern line_p inpseudo();
|
||||||
|
|
||||||
|
main(argc, argv) int argc;
|
||||||
extern process_lines();
|
char* argv[];
|
||||||
extern int readline();
|
|
||||||
extern line_p readoperand();
|
|
||||||
extern line_p inpseudo();
|
|
||||||
|
|
||||||
|
|
||||||
main(argc,argv)
|
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
/* The input files must be legal EM Compact
|
/* The input files must be legal EM Compact
|
||||||
* Assembly Language files, as produced by the EM Peephole
|
* Assembly Language files, as produced by the EM Peephole
|
||||||
|
@ -77,25 +72,26 @@ main(argc,argv)
|
||||||
* - ddump: the names of all data blocks
|
* - ddump: the names of all data blocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FILE *lfile, *dfile, *pfile, *pdump, *ddump;
|
FILE* lfile, *dfile, *pfile, *pdump, *ddump;
|
||||||
|
|
||||||
lfile = openfile(lname2,"w");
|
lfile = openfile(lname2, "w");
|
||||||
pdump = openfile(argv[1],"w");
|
pdump = openfile(argv[1], "w");
|
||||||
ddump = openfile(argv[2],"w");
|
ddump = openfile(argv[2], "w");
|
||||||
hol0_db = block_of_lab((char *) 0);
|
hol0_db = block_of_lab((char*)0);
|
||||||
while (next_file(argc,argv) != NULL) {
|
while (next_file(argc, argv) != NULL)
|
||||||
|
{
|
||||||
/* Read all EM input files, process the code
|
/* Read all EM input files, process the code
|
||||||
* and concatenate all output.
|
* and concatenate all output.
|
||||||
*/
|
*/
|
||||||
curhol = (char *) 0;
|
curhol = (char*)0;
|
||||||
process_lines(lfile);
|
process_lines(lfile);
|
||||||
dump_procnames(prochash,NPROCHASH,pdump);
|
dump_procnames(prochash, NPROCHASH, pdump);
|
||||||
dump_dblocknames(symhash,NSYMHASH,ddump);
|
dump_dblocknames(symhash, NSYMHASH, ddump);
|
||||||
/* Save the names of all procedures that were
|
/* Save the names of all procedures that were
|
||||||
* first come accross in this file.
|
* first come accross in this file.
|
||||||
*/
|
*/
|
||||||
cleanprocs(prochash,NPROCHASH,PF_EXTERNAL);
|
cleanprocs(prochash, NPROCHASH, PF_EXTERNAL);
|
||||||
cleandblocks(symhash,NSYMHASH,DF_EXTERNAL);
|
cleandblocks(symhash, NSYMHASH, DF_EXTERNAL);
|
||||||
/* Make all procedure names that were internal
|
/* Make all procedure names that were internal
|
||||||
* in this input file invisible.
|
* in this input file invisible.
|
||||||
*/
|
*/
|
||||||
|
@ -104,29 +100,25 @@ main(argc,argv)
|
||||||
fclose(pdump);
|
fclose(pdump);
|
||||||
fclose(ddump);
|
fclose(ddump);
|
||||||
|
|
||||||
|
|
||||||
/* remove the remainder of the hashing tables */
|
/* remove the remainder of the hashing tables */
|
||||||
cleanprocs(prochash,NPROCHASH,0);
|
cleanprocs(prochash, NPROCHASH, 0);
|
||||||
cleandblocks(symhash,NSYMHASH,0);
|
cleandblocks(symhash, NSYMHASH, 0);
|
||||||
/* Now write the datablock table and the proctable */
|
/* Now write the datablock table and the proctable */
|
||||||
dfile = openfile(dname2,"w");
|
dfile = openfile(dname2, "w");
|
||||||
putdtable(fdblock, dfile);
|
putdtable(fdblock, dfile);
|
||||||
pfile = openfile(pname2,"w");
|
pfile = openfile(pname2, "w");
|
||||||
putptable(fproc, pfile,FALSE);
|
putptable(fproc, pfile, FALSE);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Value returned by readline */
|
/* Value returned by readline */
|
||||||
|
|
||||||
#define NORMAL 0
|
#define NORMAL 0
|
||||||
#define WITH_OPERAND 1
|
#define WITH_OPERAND 1
|
||||||
#define EOFILE 2
|
#define EOFILE 2
|
||||||
#define PRO_INSTR 3
|
#define PRO_INSTR 3
|
||||||
#define END_INSTR 4
|
#define END_INSTR 4
|
||||||
#define DELETED_INSTR 5
|
#define DELETED_INSTR 5
|
||||||
|
|
||||||
|
|
||||||
STATIC add_end()
|
STATIC add_end()
|
||||||
{
|
{
|
||||||
|
@ -137,13 +129,12 @@ STATIC add_end()
|
||||||
lastline->l_instr = ps_end;
|
lastline->l_instr = ps_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
process_lines(fout)
|
process_lines(fout)
|
||||||
FILE *fout;
|
FILE* fout;
|
||||||
{
|
{
|
||||||
line_p lnp;
|
line_p lnp;
|
||||||
short instr;
|
short instr;
|
||||||
bool eof;
|
bool eof;
|
||||||
|
|
||||||
/* Read and process the code contained in the current file,
|
/* Read and process the code contained in the current file,
|
||||||
* on a per procedure basis.
|
* on a per procedure basis.
|
||||||
|
@ -162,20 +153,23 @@ process_lines(fout)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
eof = FALSE;
|
eof = FALSE;
|
||||||
firstline = (line_p) 0;
|
firstline = (line_p)0;
|
||||||
lastline = (line_p) 0;
|
lastline = (line_p)0;
|
||||||
while (!eof) {
|
while (!eof)
|
||||||
linecount++; /* for error messages */
|
{
|
||||||
switch(readline(&instr, &lnp)) {
|
linecount++; /* for error messages */
|
||||||
|
switch (readline(&instr, &lnp))
|
||||||
|
{
|
||||||
/* read one line, see what kind it is */
|
/* read one line, see what kind it is */
|
||||||
case WITH_OPERAND:
|
case WITH_OPERAND:
|
||||||
/* instruction with operand, e.g. LOL 10 */
|
/* instruction with operand, e.g. LOL 10 */
|
||||||
lnp = readoperand(instr);
|
lnp = readoperand(instr);
|
||||||
lnp->l_instr = instr;
|
lnp->l_instr = instr;
|
||||||
/* Fall through! */
|
/* Fall through! */
|
||||||
case NORMAL:
|
case NORMAL:
|
||||||
VL(lnp);
|
VL(lnp);
|
||||||
if (lastline != (line_p) 0) {
|
if (lastline != (line_p)0)
|
||||||
|
{
|
||||||
lastline->l_next = lnp;
|
lastline->l_next = lnp;
|
||||||
}
|
}
|
||||||
lastline = lnp;
|
lastline = lnp;
|
||||||
|
@ -183,21 +177,23 @@ process_lines(fout)
|
||||||
case EOFILE:
|
case EOFILE:
|
||||||
eof = TRUE;
|
eof = TRUE;
|
||||||
fragm_type = DUNKNOWN;
|
fragm_type = DUNKNOWN;
|
||||||
if (firstline != (line_p) 0) {
|
if (firstline != (line_p)0)
|
||||||
|
{
|
||||||
add_end();
|
add_end();
|
||||||
putlines(firstline,fout);
|
putlines(firstline, fout);
|
||||||
firstline = (line_p) 0;
|
firstline = (line_p)0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PRO_INSTR:
|
case PRO_INSTR:
|
||||||
VL(lnp);
|
VL(lnp);
|
||||||
labelcount = 0;
|
labelcount = 0;
|
||||||
if (firstline != lnp) {
|
if (firstline != lnp)
|
||||||
|
{
|
||||||
/* If PRO is not the first
|
/* If PRO is not the first
|
||||||
* instruction:
|
* instruction:
|
||||||
*/
|
*/
|
||||||
add_end();
|
add_end();
|
||||||
putlines(firstline,fout);
|
putlines(firstline, fout);
|
||||||
firstline = lnp;
|
firstline = lnp;
|
||||||
}
|
}
|
||||||
lastline = lnp;
|
lastline = lnp;
|
||||||
|
@ -205,12 +201,12 @@ process_lines(fout)
|
||||||
case END_INSTR:
|
case END_INSTR:
|
||||||
curproc->p_nrformals = mespar;
|
curproc->p_nrformals = mespar;
|
||||||
mespar = UNKNOWN_SIZE;
|
mespar = UNKNOWN_SIZE;
|
||||||
assert(lastline != (line_p) 0);
|
assert(lastline != (line_p)0);
|
||||||
lastline->l_next = lnp;
|
lastline->l_next = lnp;
|
||||||
putlines(firstline,fout);
|
putlines(firstline, fout);
|
||||||
/* write and delete code */
|
/* write and delete code */
|
||||||
firstline = (line_p) 0;
|
firstline = (line_p)0;
|
||||||
lastline = (line_p) 0;
|
lastline = (line_p)0;
|
||||||
cleaninstrlabs();
|
cleaninstrlabs();
|
||||||
/* scope of instruction labels ends here,
|
/* scope of instruction labels ends here,
|
||||||
* so forget about them.
|
* so forget about them.
|
||||||
|
@ -226,11 +222,8 @@ process_lines(fout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int readline(instr_out, lnp_out) short* instr_out;
|
||||||
|
line_p* lnp_out;
|
||||||
int readline(instr_out, lnp_out)
|
|
||||||
short *instr_out;
|
|
||||||
line_p *lnp_out;
|
|
||||||
{
|
{
|
||||||
register line_p lnp;
|
register line_p lnp;
|
||||||
short n;
|
short n;
|
||||||
|
@ -241,9 +234,10 @@ int readline(instr_out, lnp_out)
|
||||||
* return the instruction code via instr_out.
|
* return the instruction code via instr_out.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
VA((short *) instr_out);
|
VA((short*)instr_out);
|
||||||
VA((short *) lnp_out);
|
VA((short*)lnp_out);
|
||||||
switch(table1()) {
|
switch (table1())
|
||||||
|
{
|
||||||
/* table1 sets string, tabval or tabval2 and
|
/* table1 sets string, tabval or tabval2 and
|
||||||
* returns an indication of what was read.
|
* returns an indication of what was read.
|
||||||
*/
|
*/
|
||||||
|
@ -259,10 +253,11 @@ int readline(instr_out, lnp_out)
|
||||||
db = block_of_lab(string);
|
db = block_of_lab(string);
|
||||||
/* global variable, used by inpseudo */
|
/* global variable, used by inpseudo */
|
||||||
lnp = newline(OPSHORT);
|
lnp = newline(OPSHORT);
|
||||||
SHORT(lnp) = (short) db->d_id;
|
SHORT(lnp) = (short)db->d_id;
|
||||||
lnp->l_instr = ps_sym;
|
lnp->l_instr = ps_sym;
|
||||||
*lnp_out = lnp;
|
*lnp_out = lnp;
|
||||||
if (firstline == (line_p) 0) {
|
if (firstline == (line_p)0)
|
||||||
|
{
|
||||||
firstline = lnp;
|
firstline = lnp;
|
||||||
/* only a pseudo (e.g. PRO) or data label
|
/* only a pseudo (e.g. PRO) or data label
|
||||||
* can be the first instruction.
|
* can be the first instruction.
|
||||||
|
@ -280,43 +275,47 @@ int readline(instr_out, lnp_out)
|
||||||
case PSEU:
|
case PSEU:
|
||||||
n = tabval;
|
n = tabval;
|
||||||
lnp = inpseudo(n); /* read a pseudo */
|
lnp = inpseudo(n); /* read a pseudo */
|
||||||
if (n == ps_hol) n = ps_bss;
|
if (n == ps_hol)
|
||||||
if (lnp == (line_p) 0) return DELETED_INSTR;
|
n = ps_bss;
|
||||||
|
if (lnp == (line_p)0)
|
||||||
|
return DELETED_INSTR;
|
||||||
*lnp_out = lnp;
|
*lnp_out = lnp;
|
||||||
lnp->l_instr = n;
|
lnp->l_instr = n;
|
||||||
if (firstline == (line_p) 0) {
|
if (firstline == (line_p)0)
|
||||||
|
{
|
||||||
firstline = lnp;
|
firstline = lnp;
|
||||||
/* only a pseudo (e.g. PRO) or data label
|
/* only a pseudo (e.g. PRO) or data label
|
||||||
* can be the first instruction.
|
* can be the first instruction.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
if (n == ps_end) return END_INSTR;
|
if (n == ps_end)
|
||||||
if (n == ps_pro) return PRO_INSTR;
|
return END_INSTR;
|
||||||
|
if (n == ps_pro)
|
||||||
|
return PRO_INSTR;
|
||||||
return NORMAL;
|
return NORMAL;
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
line_p readoperand(instr) short instr;
|
||||||
line_p readoperand(instr)
|
|
||||||
short instr;
|
|
||||||
{
|
{
|
||||||
/* Read the operand of the given instruction.
|
/* Read the operand of the given instruction.
|
||||||
* Create a line struct and return a pointer to it.
|
* Create a line struct and return a pointer to it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
register line_p lnp;
|
register line_p lnp;
|
||||||
short flag;
|
short flag;
|
||||||
|
|
||||||
VI(instr);
|
VI(instr);
|
||||||
flag = em_flag[ instr - sp_fmnem] & EM_PAR;
|
flag = em_flag[instr - sp_fmnem] & EM_PAR;
|
||||||
if (flag == PAR_NO) {
|
if (flag == PAR_NO)
|
||||||
|
{
|
||||||
return (newline(OPNO));
|
return (newline(OPNO));
|
||||||
}
|
}
|
||||||
switch(table2()) {
|
switch (table2())
|
||||||
|
{
|
||||||
case sp_cend:
|
case sp_cend:
|
||||||
return(newline(OPNO));
|
return (newline(OPNO));
|
||||||
case CSTX1:
|
case CSTX1:
|
||||||
/* constant */
|
/* constant */
|
||||||
/* If the instruction has the address
|
/* If the instruction has the address
|
||||||
|
@ -327,31 +326,31 @@ line_p readoperand(instr)
|
||||||
* Similarly, the instruction may have
|
* Similarly, the instruction may have
|
||||||
* an instruction label as argument.
|
* an instruction label as argument.
|
||||||
*/
|
*/
|
||||||
switch(flag) {
|
switch (flag)
|
||||||
case PAR_G:
|
{
|
||||||
lnp = newline(OPOBJECT);
|
case PAR_G:
|
||||||
OBJ(lnp) =
|
lnp = newline(OPOBJECT);
|
||||||
object(curhol,(offset) tabval,
|
OBJ(lnp) = object(curhol, (offset)tabval,
|
||||||
opr_size(instr));
|
opr_size(instr));
|
||||||
break;
|
break;
|
||||||
case PAR_B:
|
case PAR_B:
|
||||||
lnp = newline(OPINSTRLAB);
|
lnp = newline(OPINSTRLAB);
|
||||||
INSTRLAB(lnp) = instr_lab(tabval);
|
INSTRLAB(lnp) = instr_lab(tabval);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lnp = newline(OPSHORT);
|
lnp = newline(OPSHORT);
|
||||||
SHORT(lnp) = tabval;
|
SHORT(lnp) = tabval;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#ifdef LONGOFF
|
#ifdef LONGOFF
|
||||||
case CSTX2:
|
case CSTX2:
|
||||||
/* double constant */
|
/* double constant */
|
||||||
if (flag == PAR_G) {
|
if (flag == PAR_G)
|
||||||
|
{
|
||||||
lnp = newline(OPOBJECT);
|
lnp = newline(OPOBJECT);
|
||||||
OBJ(lnp) =
|
OBJ(lnp) = object(curhol, tabval2,
|
||||||
object(curhol, tabval2,
|
opr_size(instr));
|
||||||
opr_size(instr));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
lnp = newline(OPOFFSET);
|
lnp = newline(OPOFFSET);
|
||||||
|
@ -366,24 +365,24 @@ line_p readoperand(instr)
|
||||||
case DLBX:
|
case DLBX:
|
||||||
/* applied occurrence data label */
|
/* applied occurrence data label */
|
||||||
lnp = newline(OPOBJECT);
|
lnp = newline(OPOBJECT);
|
||||||
OBJ(lnp) = object(string, (offset) 0,
|
OBJ(lnp) = object(string, (offset)0,
|
||||||
opr_size(instr) );
|
opr_size(instr));
|
||||||
break;
|
break;
|
||||||
case VALX1:
|
case VALX1:
|
||||||
lnp = newline(OPOBJECT);
|
lnp = newline(OPOBJECT);
|
||||||
OBJ(lnp) = object(string, (offset) tabval,
|
OBJ(lnp) = object(string, (offset)tabval,
|
||||||
opr_size(instr) );
|
opr_size(instr));
|
||||||
break;
|
break;
|
||||||
#ifdef LONGOFF
|
#ifdef LONGOFF
|
||||||
case VALX2:
|
case VALX2:
|
||||||
lnp = newline(OPOBJECT);
|
lnp = newline(OPOBJECT);
|
||||||
OBJ(lnp) = object(string,tabval2,
|
OBJ(lnp) = object(string, tabval2,
|
||||||
opr_size(instr) );
|
opr_size(instr));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case sp_pnam:
|
case sp_pnam:
|
||||||
lnp = newline(OPPROC);
|
lnp = newline(OPPROC);
|
||||||
PROC(lnp) = proclookup(string,OCCURRING);
|
PROC(lnp) = proclookup(string, OCCURRING);
|
||||||
VP(PROC(lnp));
|
VP(PROC(lnp));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -392,36 +391,35 @@ line_p readoperand(instr)
|
||||||
return lnp;
|
return lnp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char* hol_label()
|
||||||
static char *hol_label()
|
|
||||||
{
|
{
|
||||||
static int holno;
|
static int holno;
|
||||||
line_p lnp;
|
line_p lnp;
|
||||||
extern char *lastname;
|
extern char* lastname;
|
||||||
|
|
||||||
/* Create a label for a hol pseudo, so that it can be converted
|
/* Create a label for a hol pseudo, so that it can be converted
|
||||||
* into a bss. The label is appended to the list of instructions.
|
* into a bss. The label is appended to the list of instructions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sprintf(string, "_HH%d", ++holno);
|
sprintf(string, "_HH%d", ++holno);
|
||||||
symlookup(string, OCCURRING); /* to make it exa */
|
symlookup(string, OCCURRING); /* to make it exa */
|
||||||
db = block_of_lab(string);
|
db = block_of_lab(string);
|
||||||
lnp = newline(OPSHORT);
|
lnp = newline(OPSHORT);
|
||||||
SHORT(lnp) = (short) db->d_id;
|
SHORT(lnp) = (short)db->d_id;
|
||||||
lnp->l_instr = ps_sym;
|
lnp->l_instr = ps_sym;
|
||||||
if (firstline == (line_p) 0) {
|
if (firstline == (line_p)0)
|
||||||
|
{
|
||||||
firstline = lnp;
|
firstline = lnp;
|
||||||
}
|
}
|
||||||
if (lastline != (line_p) 0) {
|
if (lastline != (line_p)0)
|
||||||
|
{
|
||||||
lastline->l_next = lnp;
|
lastline->l_next = lnp;
|
||||||
}
|
}
|
||||||
lastline = lnp;
|
lastline = lnp;
|
||||||
return lastname;
|
return lastname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
line_p inpseudo(n) short n;
|
||||||
line_p inpseudo(n)
|
|
||||||
short n;
|
|
||||||
{
|
{
|
||||||
int m;
|
int m;
|
||||||
line_p lnp;
|
line_p lnp;
|
||||||
|
@ -436,45 +434,50 @@ line_p inpseudo(n)
|
||||||
* be recorded in the datablock or procedure table.
|
* be recorded in the datablock or procedure table.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
switch (n)
|
||||||
switch(n) {
|
{
|
||||||
case ps_hol:
|
case ps_hol:
|
||||||
/* hol pseudos are carefully converted into bss
|
/* hol pseudos are carefully converted into bss
|
||||||
* pseudos, so that the IL phase will not be
|
* pseudos, so that the IL phase will not be
|
||||||
* bothered by this. Also, references to the ABS
|
* bothered by this. Also, references to the ABS
|
||||||
* block will still work when passed through EGO.
|
* block will still work when passed through EGO.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (lastline != (line_p) 0 && is_datalabel(lastline)) {
|
if (lastline != (line_p)0 && is_datalabel(lastline))
|
||||||
extern char *lastname;
|
{
|
||||||
|
extern char* lastname;
|
||||||
|
|
||||||
curhol = lastname;
|
curhol = lastname;
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
curhol = hol_label();
|
curhol = hol_label();
|
||||||
}
|
}
|
||||||
n = ps_bss;
|
n = ps_bss;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case ps_bss:
|
case ps_bss:
|
||||||
case ps_rom:
|
case ps_rom:
|
||||||
case ps_con:
|
case ps_con:
|
||||||
if (lastline == (line_p) 0 || !is_datalabel(lastline)) {
|
if (lastline == (line_p)0 || !is_datalabel(lastline))
|
||||||
assert(lastline != (line_p) 0);
|
{
|
||||||
|
assert(lastline != (line_p)0);
|
||||||
nlast = INSTR(lastline);
|
nlast = INSTR(lastline);
|
||||||
if (n == nlast &&
|
if (n == nlast && (n == ps_rom || n == ps_con))
|
||||||
(n == ps_rom || n == ps_con)) {
|
{
|
||||||
/* Two successive roms/cons are
|
/* Two successive roms/cons are
|
||||||
* combined into one data block
|
* combined into one data block
|
||||||
* if the second is not preceded by
|
* if the second is not preceded by
|
||||||
* a data label.
|
* a data label.
|
||||||
*/
|
*/
|
||||||
lnp = arglist(0);
|
lnp = arglist(0);
|
||||||
pseu = (byte) (n == ps_rom?DROM:DCON);
|
pseu = (byte)(n == ps_rom ? DROM : DCON);
|
||||||
combine(db,lastline,lnp,pseu);
|
combine(db, lastline, lnp, pseu);
|
||||||
oldline(lnp);
|
oldline(lnp);
|
||||||
return (line_p) 0;
|
return (line_p)0;
|
||||||
} else {
|
}
|
||||||
error("datablock without label");
|
else
|
||||||
|
{
|
||||||
|
error("datablock without label");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VD(db);
|
VD(db);
|
||||||
|
@ -483,14 +486,16 @@ line_p inpseudo(n)
|
||||||
/* Read the arguments, 3 for hol or bss and a list
|
/* Read the arguments, 3 for hol or bss and a list
|
||||||
* of undetermined length for rom and con.
|
* of undetermined length for rom and con.
|
||||||
*/
|
*/
|
||||||
dblockdef(db,n,lnp);
|
dblockdef(db, n, lnp);
|
||||||
/* Fill in d_pseudo, d_size and d_values fields of db */
|
/* Fill in d_pseudo, d_size and d_values fields of db */
|
||||||
if (fragm_type != db->d_pseudo) {
|
if (fragm_type != db->d_pseudo)
|
||||||
|
{
|
||||||
/* Keep track of fragment numbers,
|
/* Keep track of fragment numbers,
|
||||||
* enter a new fragment.
|
* enter a new fragment.
|
||||||
*/
|
*/
|
||||||
fragm_nr++;
|
fragm_nr++;
|
||||||
switch(db->d_pseudo) {
|
switch (db->d_pseudo)
|
||||||
|
{
|
||||||
case DCON:
|
case DCON:
|
||||||
case DROM:
|
case DROM:
|
||||||
fragm_type = db->d_pseudo;
|
fragm_type = db->d_pseudo;
|
||||||
|
@ -511,16 +516,16 @@ line_p inpseudo(n)
|
||||||
* the EM visibility rules).
|
* the EM visibility rules).
|
||||||
* The result (a dblock pointer) is voided.
|
* The result (a dblock pointer) is voided.
|
||||||
*/
|
*/
|
||||||
return (line_p) 0;
|
return (line_p)0;
|
||||||
case ps_inp:
|
case ps_inp:
|
||||||
getproc(DEFINING); /* same idea */
|
getproc(DEFINING); /* same idea */
|
||||||
return (line_p) 0;
|
return (line_p)0;
|
||||||
case ps_exa:
|
case ps_exa:
|
||||||
getsym(OCCURRING);
|
getsym(OCCURRING);
|
||||||
return (line_p) 0;
|
return (line_p)0;
|
||||||
case ps_exp:
|
case ps_exp:
|
||||||
getproc(OCCURRING);
|
getproc(OCCURRING);
|
||||||
return (line_p) 0;
|
return (line_p)0;
|
||||||
case ps_pro:
|
case ps_pro:
|
||||||
curproc = getproc(DEFINING);
|
curproc = getproc(DEFINING);
|
||||||
/* This is a real defining occurrence of a proc */
|
/* This is a real defining occurrence of a proc */
|
||||||
|
@ -531,7 +536,7 @@ line_p inpseudo(n)
|
||||||
*/
|
*/
|
||||||
lnp = newline(OPPROC);
|
lnp = newline(OPPROC);
|
||||||
PROC(lnp) = curproc;
|
PROC(lnp) = curproc;
|
||||||
lnp->l_instr = (byte) ps_pro;
|
lnp->l_instr = (byte)ps_pro;
|
||||||
return lnp;
|
return lnp;
|
||||||
case ps_end:
|
case ps_end:
|
||||||
curproc->p_nrlabels = labelcount;
|
curproc->p_nrlabels = labelcount;
|
||||||
|
@ -543,27 +548,28 @@ line_p inpseudo(n)
|
||||||
return lnp;
|
return lnp;
|
||||||
case ps_mes:
|
case ps_mes:
|
||||||
lnp = arglist(0);
|
lnp = arglist(0);
|
||||||
switch((int) aoff(ARG(lnp),0)) {
|
switch ((int)aoff(ARG(lnp), 0))
|
||||||
case ms_err:
|
{
|
||||||
error("ms_err encountered");
|
case ms_err:
|
||||||
case ms_opt:
|
error("ms_err encountered");
|
||||||
error("ms_opt encountered");
|
case ms_opt:
|
||||||
case ms_emx:
|
error("ms_opt encountered");
|
||||||
ws = aoff(ARG(lnp),1);
|
case ms_emx:
|
||||||
ps = aoff(ARG(lnp),2);
|
ws = aoff(ARG(lnp), 1);
|
||||||
break;
|
ps = aoff(ARG(lnp), 2);
|
||||||
case ms_ext:
|
break;
|
||||||
|
case ms_ext:
|
||||||
/* this message was already processed
|
/* this message was already processed
|
||||||
* by the lib package
|
* by the lib package
|
||||||
*/
|
*/
|
||||||
case ms_src:
|
case ms_src:
|
||||||
/* Don't bother about linecounts */
|
/* Don't bother about linecounts */
|
||||||
oldline(lnp);
|
oldline(lnp);
|
||||||
return (line_p) 0;
|
return (line_p)0;
|
||||||
case ms_par:
|
case ms_par:
|
||||||
mespar = aoff(ARG(lnp),1);
|
mespar = aoff(ARG(lnp), 1);
|
||||||
/* #bytes of parameters of current proc */
|
/* #bytes of parameters of current proc */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return lnp;
|
return lnp;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue