114 lines
1.4 KiB
C
114 lines
1.4 KiB
C
#include "mach.h"
|
|
#include "const.h"
|
|
#include "back.h"
|
|
|
|
/* This file contains low-level routines for generating assembly code. */
|
|
|
|
int cur_seg = -1, saved = FALSE;
|
|
char name[256], labeltje[256];
|
|
|
|
File *codefile;
|
|
|
|
|
|
align_word()
|
|
|
|
/* The EM-definition demands that segments are aligned at a word boundary
|
|
*/
|
|
|
|
{
|
|
switch ( cur_seg) {
|
|
case SEGTXT : return;
|
|
default : fprint( codefile, ALIGN_FMT);
|
|
}
|
|
}
|
|
|
|
|
|
save_label( l)
|
|
char *l;
|
|
{
|
|
sprint( labeltje, "%s", l);
|
|
saved = TRUE;
|
|
}
|
|
|
|
|
|
dump_label()
|
|
{
|
|
if ( saved) {
|
|
align_word();
|
|
symbol_definition( labeltje);
|
|
}
|
|
saved = FALSE;
|
|
}
|
|
|
|
|
|
char *extnd_pro( prcno)
|
|
int prcno;
|
|
{
|
|
sprint( name, "pro%d", prcno);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_start( prcno)
|
|
int prcno;
|
|
{
|
|
sprint( name, "start%d", prcno);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_name( s)
|
|
char *s;
|
|
{
|
|
sprint( name, NAME_FMT, s);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_dnam( s)
|
|
char *s;
|
|
{
|
|
sprint( name, DNAM_FMT, s);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_dlb( g)
|
|
arith g;
|
|
{
|
|
sprint( name, DLB_FMT, (arith)g);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_ilb( l, prcno)
|
|
arith l;
|
|
{
|
|
sprint( name, ILB_FMT, prcno, (arith) l);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_hol( hol)
|
|
int hol;
|
|
{
|
|
sprint( name, HOL_FMT, hol);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_part( d)
|
|
int d;
|
|
{
|
|
sprint( name, "part%x", (arith) d);
|
|
return( name);
|
|
}
|
|
|
|
|
|
char *extnd_cont( d)
|
|
int d;
|
|
{
|
|
sprint( name, "cont%x", (arith) d);
|
|
return( name);
|
|
}
|