Added
This commit is contained in:
parent
f03c37528e
commit
0b83bf33e8
15
mach/sparc/ce/.distr
Normal file
15
mach/sparc/ce/.distr
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
EM_table
|
||||||
|
EM_table.x
|
||||||
|
Makefile
|
||||||
|
back.src
|
||||||
|
cache.c
|
||||||
|
cache.c.x
|
||||||
|
ce.src
|
||||||
|
cegpp
|
||||||
|
mach.c
|
||||||
|
mach.h
|
||||||
|
mach_em.h
|
||||||
|
misc.h
|
||||||
|
ms_reg.h
|
||||||
|
proto.make
|
||||||
|
push_pop.h
|
4631
mach/sparc/ce/EM_table.x
Normal file
4631
mach/sparc/ce/EM_table.x
Normal file
File diff suppressed because it is too large
Load diff
13
mach/sparc/ce/Makefile
Normal file
13
mach/sparc/ce/Makefile
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
SED = sed
|
||||||
|
M4 = m4
|
||||||
|
CPP = /lib/cpp
|
||||||
|
|
||||||
|
all: EM_table cache.c
|
||||||
|
|
||||||
|
distr: all
|
||||||
|
|
||||||
|
EM_table: EM_table.x cegpp
|
||||||
|
$(CPP) < EM_table.x -P | $(M4) | $(SED) -f cegpp > $@
|
||||||
|
|
||||||
|
cache.c: cache.c.x cegpp
|
||||||
|
$(SED) -f cegpp cache.c.x > $@
|
9
mach/sparc/ce/back.src/.distr
Normal file
9
mach/sparc/ce/back.src/.distr
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Makefile
|
||||||
|
back.h
|
||||||
|
con_str.c
|
||||||
|
const.h
|
||||||
|
do_open.c
|
||||||
|
gen_str.c
|
||||||
|
header.h
|
||||||
|
rom_str.c
|
||||||
|
symboldef.c
|
101
mach/sparc/ce/back.src/Makefile
Normal file
101
mach/sparc/ce/back.src/Makefile
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
# $Header$
|
||||||
|
|
||||||
|
# requires a definition for TARGET_HOME, SRC_DIR, CFLAGS, CC
|
||||||
|
|
||||||
|
CEG=$(TARGET_HOME)/lib.bin/ceg
|
||||||
|
SOURCE=$(CEG)/ce_back/as_back
|
||||||
|
|
||||||
|
IDIRS=-I.\
|
||||||
|
-I$(SRC_DIR)\
|
||||||
|
-I..\
|
||||||
|
-I$(TARGET_HOME)/h\
|
||||||
|
-I$(TARGET_HOME)/modules/h
|
||||||
|
|
||||||
|
all : bottom.o con1.o con2.o con4.o end_back.o gen1.o gen2.o\
|
||||||
|
gen4.o init_back.o reloc1.o reloc2.o reloc4.o bss.o\
|
||||||
|
rom1.o rom2.o rom4.o set_global.o set_local.o switchseg.o symboldef.o \
|
||||||
|
do_open.o do_close.o text1.o text2.o text4.o con_str.o gen_str.o rom_str.o
|
||||||
|
|
||||||
|
bottom.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/bottom.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/bottom.c
|
||||||
|
|
||||||
|
bss.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/bss.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/bss.c
|
||||||
|
|
||||||
|
text1.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/text1.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/text1.c
|
||||||
|
|
||||||
|
text2.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/text2.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/text2.c
|
||||||
|
|
||||||
|
text4.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/text4.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/text4.c
|
||||||
|
|
||||||
|
con1.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/con1.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con1.c
|
||||||
|
|
||||||
|
con2.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/con2.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con2.c
|
||||||
|
|
||||||
|
con4.o : $(SRC_DIR)/mach.h back.h header.h $(SOURCE)/con4.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/con4.c
|
||||||
|
|
||||||
|
do_open.o : back.h header.h $(SRC_DIR)/mach.h do_open.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) do_open.c
|
||||||
|
|
||||||
|
do_close.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/do_close.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/do_close.c
|
||||||
|
|
||||||
|
gen1.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/gen1.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen1.c
|
||||||
|
|
||||||
|
gen2.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/gen2.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen2.c
|
||||||
|
|
||||||
|
gen4.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/gen4.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/gen4.c
|
||||||
|
|
||||||
|
init_back.o : header.h back.h $(SRC_DIR)/mach.h $(SOURCE)/init_back.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/init_back.c
|
||||||
|
|
||||||
|
end_back.o : header.h back.h $(SRC_DIR)/mach.h $(SOURCE)/end_back.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/end_back.c
|
||||||
|
|
||||||
|
reloc1.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/reloc1.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc1.c
|
||||||
|
|
||||||
|
reloc2.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/reloc2.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc2.c
|
||||||
|
|
||||||
|
reloc4.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/reloc4.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/reloc4.c
|
||||||
|
|
||||||
|
rom1.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/rom1.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom1.c
|
||||||
|
|
||||||
|
rom2.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/rom2.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom2.c
|
||||||
|
|
||||||
|
rom4.o : back.h header.h $(SRC_DIR)/mach.h $(SOURCE)/rom4.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/rom4.c
|
||||||
|
|
||||||
|
set_global.o : header.h back.h $(SRC_DIR)/mach.h $(SOURCE)/set_global.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/set_global.c
|
||||||
|
|
||||||
|
set_local.o : header.h back.h $(SRC_DIR)/mach.h $(SOURCE)/set_local.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/set_local.c
|
||||||
|
|
||||||
|
switchseg.o : header.h back.h $(SRC_DIR)/mach.h $(SOURCE)/switchseg.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) $(SOURCE)/switchseg.c
|
||||||
|
|
||||||
|
symboldef.o : header.h back.h $(SRC_DIR)/mach.h symboldef.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) symboldef.c
|
||||||
|
|
||||||
|
con_str.o : header.h back.h $(SRC_DIR)/mach.h con_str.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) con_str.c
|
||||||
|
|
||||||
|
gen_str.o : header.h back.h $(SRC_DIR)/mach.h gen_str.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) gen_str.c
|
||||||
|
|
||||||
|
rom_str.o : header.h back.h $(SRC_DIR)/mach.h rom_str.c
|
||||||
|
$(CC) $(CFLAGS) -c $(IDIRS) rom_str.c
|
69
mach/sparc/ce/back.src/back.h
Normal file
69
mach/sparc/ce/back.src/back.h
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#include <em.h>
|
||||||
|
#include <system.h>
|
||||||
|
|
||||||
|
#define codefile B_codefile
|
||||||
|
#define cur_seg B_cur_seg
|
||||||
|
#define saved B_saved
|
||||||
|
#define labeltje B_labeltje
|
||||||
|
#define name B_name
|
||||||
|
#define output_back B_output_back
|
||||||
|
|
||||||
|
/* Macros to change interface names */
|
||||||
|
|
||||||
|
#define common B_common
|
||||||
|
#define con1 B_con1
|
||||||
|
#define con2 B_con2
|
||||||
|
#define con4 B_con4
|
||||||
|
#define con_str B_con_str
|
||||||
|
#define rom1 B_rom1
|
||||||
|
#define rom2 B_rom2
|
||||||
|
#define rom4 B_rom4
|
||||||
|
#define rom_str B_rom_str
|
||||||
|
#define text1 B_txt1
|
||||||
|
#define text2 B_txt2
|
||||||
|
#define text4 B_txt4
|
||||||
|
#define close_back B_close_back
|
||||||
|
#define open_back B_open_back
|
||||||
|
#define end_back B_end_back
|
||||||
|
#define init_back B_init_back
|
||||||
|
#define extnd_pro B_ex_pro
|
||||||
|
#define extnd_start B_ex_start
|
||||||
|
#define extnd_name B_ex_name
|
||||||
|
#define extnd_dnam B_ex_dnam
|
||||||
|
#define extnd_dlb B_ex_dlb
|
||||||
|
#define extnd_ilb B_ex_ilb
|
||||||
|
#define extnd_hol B_ex_hol
|
||||||
|
#define extnd_part B_ex_part
|
||||||
|
#define extnd_cont B_ex_cont
|
||||||
|
#define extnd_main B_ex_main
|
||||||
|
#define gen1 B_gen1
|
||||||
|
#define gen2 B_gen2
|
||||||
|
#define gen4 B_gen4
|
||||||
|
#define gen_str B_gen_str
|
||||||
|
#define save_label B_save_label
|
||||||
|
#define dump_label B_dump_label
|
||||||
|
#define align_word B_align_word
|
||||||
|
#define reloc1 B_rlc1
|
||||||
|
#define reloc2 B_rlc2
|
||||||
|
#define reloc4 B_rlc4
|
||||||
|
#define set_global_visible B_stglobvis
|
||||||
|
#define set_local_visible B_stlocvis
|
||||||
|
#define symbol_definition B_symdef
|
||||||
|
#define switchseg B_switchseg
|
||||||
|
|
||||||
|
extern File *codefile;
|
||||||
|
|
||||||
|
extern char *extnd_name(), *extnd_dnam(), *extnd_dlb(), *extnd_ilb(),
|
||||||
|
*extnd_hol(), *extnd_ext(), *extnd_pro(), *extnd_start(),
|
||||||
|
*extnd_part(), *extnd_cont(), *extnd_main();
|
||||||
|
|
||||||
|
#define swtxt() switchseg( SEGTXT)
|
||||||
|
#define bss(n) fprint(codefile, BSS_FMT, (long)(n))
|
||||||
|
|
||||||
|
#define SEGTXT 0
|
||||||
|
#define SEGROM 1
|
||||||
|
#define SEGCON 2
|
||||||
|
#define SEGBSS 3
|
||||||
|
#define SEGHOL -1 /* Does not exist */
|
||||||
|
|
||||||
|
#define ABSOLUTE 1
|
8
mach/sparc/ce/back.src/con_str.c
Normal file
8
mach/sparc/ce/back.src/con_str.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
con_str(s,n)
|
||||||
|
char *s;
|
||||||
|
int n;
|
||||||
|
{
|
||||||
|
gen_str( s,n);
|
||||||
|
}
|
2
mach/sparc/ce/back.src/const.h
Normal file
2
mach/sparc/ce/back.src/const.h
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
11
mach/sparc/ce/back.src/do_open.c
Normal file
11
mach/sparc/ce/back.src/do_open.c
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
open_back( filename)
|
||||||
|
char *filename;
|
||||||
|
{
|
||||||
|
if ( filename == (char *) 0)
|
||||||
|
codefile= STDOUT;
|
||||||
|
else
|
||||||
|
return( sys_open( filename, OP_WRITE, &codefile));
|
||||||
|
return 1;
|
||||||
|
}
|
27
mach/sparc/ce/back.src/gen_str.c
Normal file
27
mach/sparc/ce/back.src/gen_str.c
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
gen_str( s,n)
|
||||||
|
char *s;
|
||||||
|
int n;
|
||||||
|
{
|
||||||
|
unsigned char c;
|
||||||
|
switch ( cur_seg) {
|
||||||
|
case SEGTXT :
|
||||||
|
case SEGCON :
|
||||||
|
case SEGROM :
|
||||||
|
fprint( codefile, "%s\"", STR_FMT);
|
||||||
|
while (n--)
|
||||||
|
{
|
||||||
|
c= *s++;
|
||||||
|
if (isprint(c) && c != '"')
|
||||||
|
fprint(codefile, "%c", c);
|
||||||
|
else
|
||||||
|
fprint(codefile, "\\%03o", c);
|
||||||
|
}
|
||||||
|
fprint( codefile, "\"\n");
|
||||||
|
break;
|
||||||
|
case SEGBSS : bss( (arith) 1);
|
||||||
|
break;
|
||||||
|
default : fprint( STDERR, "gen1 unkown seg %d\n", cur_seg);
|
||||||
|
}
|
||||||
|
}
|
4
mach/sparc/ce/back.src/header.h
Normal file
4
mach/sparc/ce/back.src/header.h
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#include "mach.h"
|
||||||
|
#include "back.h"
|
||||||
|
|
||||||
|
extern int cur_seg;
|
8
mach/sparc/ce/back.src/rom_str.c
Normal file
8
mach/sparc/ce/back.src/rom_str.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
rom_str( s,n)
|
||||||
|
char *s;
|
||||||
|
int n;
|
||||||
|
{
|
||||||
|
gen_str( s,n);
|
||||||
|
}
|
9
mach/sparc/ce/back.src/symboldef.c
Normal file
9
mach/sparc/ce/back.src/symboldef.c
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
symbol_definition( s)
|
||||||
|
char *s;
|
||||||
|
{
|
||||||
|
if (cur_seg == SEGTXT)
|
||||||
|
flush_cache(); /* EXTRA */
|
||||||
|
fprint( codefile, SYMBOL_DEF_FMT, s);
|
||||||
|
}
|
1287
mach/sparc/ce/cache.c.x
Normal file
1287
mach/sparc/ce/cache.c.x
Normal file
File diff suppressed because it is too large
Load diff
7
mach/sparc/ce/ce.src/.distr
Normal file
7
mach/sparc/ce/ce.src/.distr
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
C_con_scon.c
|
||||||
|
C_cst.c
|
||||||
|
C_mes_begin.c
|
||||||
|
C_mes_end.c
|
||||||
|
C_rom_scon.c
|
||||||
|
misc.c
|
||||||
|
ms_reg.c
|
14
mach/sparc/ce/ce.src/C_con_scon.c
Normal file
14
mach/sparc/ce/ce.src/C_con_scon.c
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include <em.h>
|
||||||
|
#include "mach.h"
|
||||||
|
#include "back.h"
|
||||||
|
|
||||||
|
C_con_scon( s, n)
|
||||||
|
char *s;
|
||||||
|
arith n;
|
||||||
|
{
|
||||||
|
switchseg( SEGCON);
|
||||||
|
dump_label();
|
||||||
|
|
||||||
|
con_str( s, n);
|
||||||
|
}
|
8
mach/sparc/ce/ce.src/C_cst.c
Normal file
8
mach/sparc/ce/ce.src/C_cst.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include <em.h>
|
||||||
|
|
||||||
|
/* in ms_reg.c
|
||||||
|
C_cst( l)
|
||||||
|
arith l;
|
||||||
|
{
|
||||||
|
} */
|
8
mach/sparc/ce/ce.src/C_mes_begin.c
Normal file
8
mach/sparc/ce/ce.src/C_mes_begin.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include <em.h>
|
||||||
|
|
||||||
|
/* in ms_reg.c
|
||||||
|
C_mes_begin( ms)
|
||||||
|
int ms;
|
||||||
|
{
|
||||||
|
} */
|
7
mach/sparc/ce/ce.src/C_mes_end.c
Normal file
7
mach/sparc/ce/ce.src/C_mes_end.c
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include <em.h>
|
||||||
|
|
||||||
|
/* in ms_reg.c
|
||||||
|
C_mes_end()
|
||||||
|
{
|
||||||
|
} */
|
14
mach/sparc/ce/ce.src/C_rom_scon.c
Normal file
14
mach/sparc/ce/ce.src/C_rom_scon.c
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include <em.h>
|
||||||
|
#include "mach.h"
|
||||||
|
#include "back.h"
|
||||||
|
|
||||||
|
C_rom_scon( s, n)
|
||||||
|
char *s;
|
||||||
|
arith n;
|
||||||
|
{
|
||||||
|
switchseg( SEGROM);
|
||||||
|
dump_label();
|
||||||
|
|
||||||
|
rom_str( s,n);
|
||||||
|
}
|
54
mach/sparc/ce/ce.src/misc.c
Normal file
54
mach/sparc/ce/ce.src/misc.c
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
misc.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "mach.h"
|
||||||
|
|
||||||
|
int power_of_2(n, ref_exp)
|
||||||
|
int n, *ref_exp;
|
||||||
|
{
|
||||||
|
int exp;
|
||||||
|
|
||||||
|
exp= 0;
|
||||||
|
if (n<0)
|
||||||
|
n= -n;
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while (!(n % 2))
|
||||||
|
{
|
||||||
|
n= n/2;
|
||||||
|
exp++;
|
||||||
|
}
|
||||||
|
if (n != 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (ref_exp)
|
||||||
|
*ref_exp= exp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int uns_power_of_2(n, ref_exp)
|
||||||
|
unsigned n, *ref_exp;
|
||||||
|
{
|
||||||
|
int exp;
|
||||||
|
|
||||||
|
exp= 0;
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while (!(n % 2))
|
||||||
|
{
|
||||||
|
n= n/2;
|
||||||
|
exp++;
|
||||||
|
}
|
||||||
|
if (n != 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (ref_exp)
|
||||||
|
*ref_exp= exp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
338
mach/sparc/ce/ce.src/ms_reg.c
Normal file
338
mach/sparc/ce/ce.src/ms_reg.c
Normal file
|
@ -0,0 +1,338 @@
|
||||||
|
/* catch register messages. BEWARE: code uses plain printf's (fprint's)
|
||||||
|
* to generate code. This is not compatible with the usual procedure
|
||||||
|
* used in the EM_table
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include <em.h>
|
||||||
|
#include <em_reg.h>
|
||||||
|
#include <em_mes.h>
|
||||||
|
#include "push_pop.h"
|
||||||
|
#include "mach.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define MAX_NR_REGS 12
|
||||||
|
#define MAX_NR_FLTS MAX_NR_FLT_REGS /* depends on using float or doubles */
|
||||||
|
|
||||||
|
#define RM_OFFSET 0
|
||||||
|
#define RM_SIZE 1
|
||||||
|
#define RM_TYPE 2
|
||||||
|
#define RM_COUNT 3
|
||||||
|
|
||||||
|
typedef struct reg_info {
|
||||||
|
int offset;
|
||||||
|
int size; /* 4 or 8 */
|
||||||
|
int pri;
|
||||||
|
reg_t reg, reg2; /* reg2 used for doubles only */
|
||||||
|
} reg_info;
|
||||||
|
|
||||||
|
reg_info reg_dat[MAX_NR_REGS], flt_dat[MAX_NR_FLTS];
|
||||||
|
|
||||||
|
int current_reg_mes[RM_COUNT+4];
|
||||||
|
|
||||||
|
int in_reg_mes = 0; /* boolean */
|
||||||
|
int reg_mes_nr;
|
||||||
|
|
||||||
|
int worst_reg_pri, worst_flt_pri; /* reset by C_prolog (to some large number) */
|
||||||
|
int nr_reg_vars, nr_flt_vars; /* dito (both to 0) */
|
||||||
|
|
||||||
|
init_reg_man()
|
||||||
|
{
|
||||||
|
worst_reg_pri = worst_flt_pri = (unsigned)-1/2;
|
||||||
|
nr_reg_vars = nr_flt_vars = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_t my_alloc_reg(pri,loc)
|
||||||
|
int pri, *loc;
|
||||||
|
{
|
||||||
|
reg_t S1;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if ((S1 = alloc_reg_var()) == NULL)
|
||||||
|
if (current_reg_mes[RM_COUNT] > worst_reg_pri) {
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
if (reg_dat[i].pri <= worst_reg_pri) {
|
||||||
|
*loc = i;
|
||||||
|
S1 = reg_dat[i].reg;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
worst_reg_pri = (unsigned)-1/2;
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
if (reg_dat[i].pri <= worst_reg_pri)
|
||||||
|
worst_reg_pri = reg_dat[i].pri;
|
||||||
|
} else
|
||||||
|
return NULL; /* SORRY, FULL HOUSE! */
|
||||||
|
else
|
||||||
|
*loc = nr_reg_vars++;
|
||||||
|
|
||||||
|
return S1;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_t my_alloc_double(pri,loc,r2)
|
||||||
|
int pri, *loc;
|
||||||
|
reg_t *r2;
|
||||||
|
/* implementation note: my_alloc_double only reclaims other doubles
|
||||||
|
* when a better candidate is given. It never reclaims floats, even if
|
||||||
|
* the current double is a mich better candidate.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
reg_t S1;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if ((S1 = alloc_double_var(r2)) == NULL)
|
||||||
|
if (current_reg_mes[RM_COUNT] > worst_flt_pri) {
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
if (flt_dat[i].pri <= worst_flt_pri &&
|
||||||
|
flt_dat[i].size == EM_DSIZE) {
|
||||||
|
*loc = i;
|
||||||
|
S1 = flt_dat[i].reg;
|
||||||
|
*r2 = flt_dat[i].reg2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
worst_flt_pri = (unsigned)-1/2;
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
if (flt_dat[i].pri < worst_flt_pri)
|
||||||
|
worst_flt_pri = flt_dat[i].pri;
|
||||||
|
} else
|
||||||
|
return NULL; /* SORRY, FULL HOUSE! */
|
||||||
|
else
|
||||||
|
*loc = nr_flt_vars++;
|
||||||
|
|
||||||
|
return S1;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_t my_alloc_float(pri,loc)
|
||||||
|
int pri, *loc;
|
||||||
|
/* just as for my_alloc_double, my_alloc_float never reclaims a double,
|
||||||
|
* even though this me be useful and easy. Sorry.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
reg_t S1;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if ((S1 = alloc_float_var()) == NULL)
|
||||||
|
if (current_reg_mes[RM_COUNT] > worst_flt_pri) {
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
if (flt_dat[i].pri <= worst_flt_pri &&
|
||||||
|
flt_dat[i].size == EM_WSIZE) {
|
||||||
|
*loc = i;
|
||||||
|
S1 = flt_dat[i].reg;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
worst_flt_pri = (unsigned)-1/2;
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
if (flt_dat[i].pri <= worst_flt_pri)
|
||||||
|
worst_flt_pri = flt_dat[i].pri;
|
||||||
|
} else
|
||||||
|
return NULL; /* SORRY, FULL HOUSE! */
|
||||||
|
else
|
||||||
|
*loc = nr_flt_vars++;
|
||||||
|
|
||||||
|
return S1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free_all_reg_vars()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
free_reg(reg_dat[i].reg);
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
switch (flt_dat[i].size) {
|
||||||
|
case EM_WSIZE: free_reg(flt_dat[i].reg); break;
|
||||||
|
case EM_DSIZE: free_double_reg(flt_dat[i].reg); break;
|
||||||
|
}
|
||||||
|
check_cache();
|
||||||
|
}
|
||||||
|
|
||||||
|
alloc_all_reg_vars()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
forced_alloc_reg(reg_dat[i].reg);
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
switch (flt_dat[i].size) {
|
||||||
|
case EM_WSIZE: forced_alloc_reg(flt_dat[i].reg); break;
|
||||||
|
case EM_DSIZE:
|
||||||
|
forced_alloc_reg(flt_dat[i].reg);
|
||||||
|
forced_alloc_reg(flt_dat[i].reg2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
check_cache();
|
||||||
|
}
|
||||||
|
|
||||||
|
params_to_regs() /* copy required parameters to registers */
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
if (reg_dat[i].offset > 0)
|
||||||
|
fprint(codefile, "ld [%%l1+%d], %s\n",
|
||||||
|
reg_dat[i].offset, reg_dat[i].reg);
|
||||||
|
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
if (flt_dat[i].offset > 0)
|
||||||
|
{
|
||||||
|
fprint(codefile, "ld [%%l1+%d], %s\n",
|
||||||
|
flt_dat[i].offset, flt_dat[i].reg);
|
||||||
|
if (flt_dat[i].size == EM_DSIZE)
|
||||||
|
fprint(codefile, "ld [%%l1+%d], %s\n",
|
||||||
|
flt_dat[i].offset + 4, flt_dat[i].reg2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp_flt_dat(e1, e2)
|
||||||
|
reg_info *e1, *e2;
|
||||||
|
{
|
||||||
|
return (e1->offset - e2->offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
save_float_regs()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int offset;
|
||||||
|
|
||||||
|
qsort(flt_dat, nr_flt_vars, sizeof(flt_dat[0]), cmp_flt_dat);
|
||||||
|
for (i = 0, offset= 0; i < nr_flt_vars; i++, offset += 8)
|
||||||
|
if ((i+1 < nr_flt_vars &&
|
||||||
|
flt_dat[i].offset == flt_dat[i+1].offset-4 &&
|
||||||
|
flt_dat[i].size == EM_FSIZE &&
|
||||||
|
flt_dat[i+1].size == EM_FSIZE)
|
||||||
|
|| (flt_dat[i].size == EM_DSIZE)) {
|
||||||
|
fprint(codefile, "std %s, [%%fp + %d]\n",
|
||||||
|
flt_dat[i].reg, FLTSAV_OFFSET + offset);
|
||||||
|
if (flt_dat[i].size != EM_DSIZE)
|
||||||
|
++i;
|
||||||
|
} else
|
||||||
|
fprint(codefile, "st %s, [%%fp + %d]\n",
|
||||||
|
flt_dat[i].reg, FLTSAV_OFFSET + offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
load_float_regs()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int offset;
|
||||||
|
|
||||||
|
for (i = 0, offset= 0; i < nr_flt_vars; i++, offset += 8)
|
||||||
|
if ((i+1 < nr_flt_vars &&
|
||||||
|
flt_dat[i].offset == flt_dat[i+1].offset-4 &&
|
||||||
|
flt_dat[i].size == EM_FSIZE &&
|
||||||
|
flt_dat[i+1].size == EM_FSIZE)
|
||||||
|
|| (flt_dat[i].size == EM_DSIZE)) {
|
||||||
|
fprint(codefile, "ldd [%%fp + %d], %s\n",
|
||||||
|
FLTSAV_OFFSET + offset, flt_dat[i].reg);
|
||||||
|
if (flt_dat[i].size != EM_DSIZE)
|
||||||
|
++i;
|
||||||
|
} else
|
||||||
|
fprint(codefile, "ld [%%fp + %d], %s\n",
|
||||||
|
FLTSAV_OFFSET + offset, flt_dat[i].reg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
C_mes_begin( ms)
|
||||||
|
int ms;
|
||||||
|
{
|
||||||
|
reg_mes_nr = 0;
|
||||||
|
in_reg_mes = (ms == ms_reg);
|
||||||
|
if (ms == ms_gto)
|
||||||
|
fprint(codefile, "ta 3\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
C_mes_end()
|
||||||
|
{
|
||||||
|
int pos;
|
||||||
|
reg_t S1, S2;
|
||||||
|
|
||||||
|
if (!in_reg_mes) /* end of some other mes */
|
||||||
|
return;
|
||||||
|
if (reg_mes_nr == 0) { /* end of reg_mes's */
|
||||||
|
save_float_regs();
|
||||||
|
params_to_regs();
|
||||||
|
if (debug)
|
||||||
|
dump_reg_tabs(codefile);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (current_reg_mes[RM_COUNT] == 0) /* never used, so ignore */
|
||||||
|
return;
|
||||||
|
if (current_reg_mes[RM_OFFSET] >= 0)
|
||||||
|
current_reg_mes[RM_OFFSET] += EM_BSIZE;
|
||||||
|
if (debug)
|
||||||
|
fprint(codefile, "\t\t! Got reg_mes: %d %d %d %d\n",
|
||||||
|
current_reg_mes[0], current_reg_mes[1],
|
||||||
|
current_reg_mes[2], current_reg_mes[3]);
|
||||||
|
if (current_reg_mes[RM_TYPE] == reg_float) {
|
||||||
|
switch(current_reg_mes[RM_SIZE]) {
|
||||||
|
case EM_WSIZE :
|
||||||
|
if ((S1 = my_alloc_float(current_reg_mes[RM_COUNT], &pos))
|
||||||
|
== NULL)
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case EM_DSIZE:
|
||||||
|
if ((S1 = my_alloc_double(current_reg_mes[RM_COUNT], &pos, &S2))
|
||||||
|
== NULL)
|
||||||
|
return;
|
||||||
|
flt_dat[pos].reg2 = S2;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
flt_dat[pos].offset = current_reg_mes[RM_OFFSET];
|
||||||
|
flt_dat[pos].size = current_reg_mes[RM_SIZE];
|
||||||
|
flt_dat[pos].pri = current_reg_mes[RM_COUNT];
|
||||||
|
flt_dat[pos].reg = S1;
|
||||||
|
} else {
|
||||||
|
if (current_reg_mes[RM_SIZE] != EM_WSIZE)
|
||||||
|
return; /* IGNORE THESE */
|
||||||
|
if ((S1 = my_alloc_reg(current_reg_mes[RM_COUNT], &pos)) == NULL)
|
||||||
|
return; /* SORRY, FULL HOUSE! */
|
||||||
|
|
||||||
|
reg_dat[pos].offset = current_reg_mes[RM_OFFSET];
|
||||||
|
reg_dat[pos].size = current_reg_mes[RM_SIZE];
|
||||||
|
reg_dat[pos].pri = current_reg_mes[RM_COUNT];
|
||||||
|
reg_dat[pos].reg = S1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
C_cst( l)
|
||||||
|
arith l;
|
||||||
|
{
|
||||||
|
if (in_reg_mes)
|
||||||
|
current_reg_mes[reg_mes_nr++] = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
dump_reg_tabs(stream)
|
||||||
|
FILE *stream;
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
fprint(stream, "!offset\tsize\tname (%d regvars)\n", nr_reg_vars);
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
fprint(stream, "! %d\t%d\t%s\n", reg_dat[i].offset, reg_dat[i].size,
|
||||||
|
reg_dat[i].reg);
|
||||||
|
|
||||||
|
fprint(stream, "!offset\tsize\tname (%d fltvars)\n", nr_flt_vars);
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
fprint(stream, "! %d\t%d\t%s\n", flt_dat[i].offset, flt_dat[i].size,
|
||||||
|
flt_dat[i].reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_t find_local(offset, reg2) /* WARNING: no size checking here! */
|
||||||
|
int offset;
|
||||||
|
reg_t *reg2;
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (reg2)
|
||||||
|
*reg2 = NULL;
|
||||||
|
for (i = 0; i < nr_reg_vars; i++)
|
||||||
|
if (reg_dat[i].offset == offset)
|
||||||
|
return reg_dat[i].reg;
|
||||||
|
|
||||||
|
for (i = 0; i < nr_flt_vars; i++)
|
||||||
|
if (flt_dat[i].offset == offset) {
|
||||||
|
if (flt_dat[i].size == EM_DSIZE)
|
||||||
|
if (reg2)
|
||||||
|
*reg2 = flt_dat[i].reg2;
|
||||||
|
return flt_dat[i].reg;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
30
mach/sparc/ce/cegpp
Normal file
30
mach/sparc/ce/cegpp
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# dit sed script zet regels van het type "sll $a, $$, $44" om in
|
||||||
|
# fprint(codefile, "sll %s, $, $44\n", a);
|
||||||
|
# en meer....
|
||||||
|
# Usage: sed -f $0 < EM_table.x > EM_table
|
||||||
|
# remember to include special thingies in "mach.h"
|
||||||
|
#n
|
||||||
|
s/==>/&\
|
||||||
|
code_combiner(/
|
||||||
|
s/\.[ ]*$/)\
|
||||||
|
&/
|
||||||
|
/^[ ]*"/{
|
||||||
|
s/%/%%/g
|
||||||
|
i\
|
||||||
|
fprint ( codefile,
|
||||||
|
s/\$\$/__NEVER_USED__/g
|
||||||
|
s/\$\([0-9][0-9]*\)/__NEVER_USED__\1/g
|
||||||
|
s/\$\$/%a/g
|
||||||
|
:a
|
||||||
|
s/\([^\$]*\)\$\([^\$][A-Za-z0-9_]*\)\(.*\)/\1%s\3\
|
||||||
|
\2/
|
||||||
|
t a
|
||||||
|
s/\n/,/g
|
||||||
|
s/__NEVER_USED__/$/g
|
||||||
|
s/";/"/
|
||||||
|
s/\([^"]*"[^"]*\)"\(.*\)/\1\\n"\2/
|
||||||
|
p
|
||||||
|
i\
|
||||||
|
);
|
||||||
|
D
|
||||||
|
}
|
35
mach/sparc/ce/mach.c
Normal file
35
mach/sparc/ce/mach.c
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#define CODE_EXPANDER
|
||||||
|
#include "mach.h"
|
||||||
|
#include <back.h>
|
||||||
|
#include <system.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
arg_error( s, arg)
|
||||||
|
char *s;
|
||||||
|
int arg;
|
||||||
|
{
|
||||||
|
fprint( STDERR, "arg_error %s %d\n", s, arg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
do_open( filename)
|
||||||
|
char *filename;
|
||||||
|
{
|
||||||
|
if ( filename == (char *)0 || !sys_open( filename, OP_WRITE, &codefile))
|
||||||
|
return( 0);
|
||||||
|
|
||||||
|
fprint( codefile, ".sect .text; .sect .rom; .sect .data; .sect .bss\n");
|
||||||
|
return( 1);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IEEEFLOAT
|
||||||
|
#define FL_MSL_AT_LOW_ADDRESS 1
|
||||||
|
#define FL_MSW_AT_LOW_ADDRESS 1
|
||||||
|
#define FL_MSB_AT_LOW_ADDRESS 1
|
||||||
|
#include <con_float>
|
||||||
|
|
||||||
|
#include <cache.c>
|
20
mach/sparc/ce/mach.h
Normal file
20
mach/sparc/ce/mach.h
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
mach.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MACH_H
|
||||||
|
#define MACH_H
|
||||||
|
|
||||||
|
#include "ctype.h"
|
||||||
|
#include "mach_em.h"
|
||||||
|
#include "push_pop.h"
|
||||||
|
#include "ms_reg.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
|
#if RESOLV_debug
|
||||||
|
#define debug 0
|
||||||
|
#else
|
||||||
|
extern int debug;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* MACH_H */
|
59
mach/sparc/ce/mach_em.h
Normal file
59
mach/sparc/ce/mach_em.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#define DEBUG 1
|
||||||
|
#include <sun4/asm_linkage.h>
|
||||||
|
|
||||||
|
#define BYTES_REVERSED
|
||||||
|
#define WORDS_REVERSED
|
||||||
|
|
||||||
|
#define ONE_BYTE int
|
||||||
|
#define TWO_BYTES int
|
||||||
|
#define FOUR_BYTES long
|
||||||
|
|
||||||
|
#define EM_WSIZE 4
|
||||||
|
#define EM_PSIZE 4
|
||||||
|
#define EM_FSIZE 4
|
||||||
|
#define EM_DSIZE 8
|
||||||
|
#define EM_BSIZE REGSAV
|
||||||
|
|
||||||
|
#define BSS_INIT 0
|
||||||
|
|
||||||
|
#define NAME_FMT "_%s"
|
||||||
|
#define DNAM_FMT "_%s"
|
||||||
|
#define DLB_FMT "L_%ld"
|
||||||
|
#define ILB_FMT "L%x_%lx"
|
||||||
|
#define HOL_FMT "hol%d"
|
||||||
|
#define STR_FMT ".ascii\t"
|
||||||
|
|
||||||
|
#define GENLAB 'L'
|
||||||
|
|
||||||
|
#define ALIGN_FMT ".align 4\n"
|
||||||
|
|
||||||
|
#define BYTE_FMT ".byte %ld\n"
|
||||||
|
#define WORD_FMT ".half %ld\n"
|
||||||
|
#define LONG_FMT ".word %ld\n"
|
||||||
|
#define BSS_FMT ".skip %ld\n"
|
||||||
|
|
||||||
|
#define SEGTXT_FMT ".seg \"text\"\n"
|
||||||
|
#define SEGDAT_FMT ".seg \"data\"\n"
|
||||||
|
#define SEGBSS_FMT ".seg \"bss\"\n"
|
||||||
|
|
||||||
|
#define SYMBOL_DEF_FMT "%s:\n"
|
||||||
|
#define GLOBAL_FMT ".global %s\n"
|
||||||
|
#define COMM_FMT ".reserve %s, %ld, \"bss\"\n"
|
||||||
|
#define LOCAL_FMT ""
|
||||||
|
|
||||||
|
#define RELOC1_FMT "ONLY LONGS CAN BE RELOCATED!"
|
||||||
|
#define RELOC2_FMT "ONLY LONGS CAN BE RELOCATED!"
|
||||||
|
#define RELOC4_FMT ".seg \"data\"\n.align 4\n.word %s+%d\n"
|
||||||
|
|
||||||
|
#define ALIGN_GAP 4
|
||||||
|
#define FLOATTRANS 8
|
||||||
|
#define MAX_NR_FLT_REGS 16
|
||||||
|
#define FLTSAV (MAX_NR_FLT_REGS * 4)
|
||||||
|
#define FLTSAV_OFFSET (WINDOWSIZE + FLOATTRANS)
|
||||||
|
#define REGSAV (WINDOWSIZE + FLOATTRANS + ALIGN_GAP + FLTSAV)
|
||||||
|
|
||||||
|
#define MATH_DIVIDE 1
|
||||||
|
|
||||||
|
#ifndef DEBUG
|
||||||
|
#define arg_error(s,i)
|
||||||
|
#endif
|
11
mach/sparc/ce/misc.h
Normal file
11
mach/sparc/ce/misc.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/*
|
||||||
|
misc.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MISC_H
|
||||||
|
#define MISC_H
|
||||||
|
|
||||||
|
_PROTOTYPE( int power_of_2, (int n, int *ref_exp));
|
||||||
|
|
||||||
|
#endif /* MISC_H */
|
||||||
|
|
10
mach/sparc/ce/ms_reg.h
Normal file
10
mach/sparc/ce/ms_reg.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/* ms_reg.h */
|
||||||
|
|
||||||
|
#ifndef MS_REG_H
|
||||||
|
#define MS_REG_H
|
||||||
|
|
||||||
|
#include "push_pop.h"
|
||||||
|
|
||||||
|
_PROTOTYPE(reg_t find_local, (int, reg_t*));
|
||||||
|
|
||||||
|
#endif
|
37
mach/sparc/ce/proto.make
Normal file
37
mach/sparc/ce/proto.make
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# $Header$
|
||||||
|
|
||||||
|
#PARAMS do not remove this line!
|
||||||
|
|
||||||
|
MACH = sparc
|
||||||
|
OBJ = as
|
||||||
|
SRC_DIR = $(SRC_HOME)/mach/$(MACH)/ce
|
||||||
|
|
||||||
|
CEG = $(TARGET_HOME)/lib.bin/ceg/util
|
||||||
|
|
||||||
|
all:
|
||||||
|
( cd $(SRC_DIR); make )
|
||||||
|
make -f $(CEG)/make_asobj "OBJ="$(OBJ) "MACH="$(MACH)
|
||||||
|
|
||||||
|
install:
|
||||||
|
( cd $(SRC_DIR); make )
|
||||||
|
-mkdir $(TARGET_HOME)/lib.bin/sparc
|
||||||
|
make -f $(CEG)/make_asobj "OBJ="$(OBJ) "MACH="$(MACH) install
|
||||||
|
|
||||||
|
cmp:
|
||||||
|
( cd $(SRC_DIR); make )
|
||||||
|
-make -f $(CEG)/make_asobj "OBJ="$(OBJ) "MACH="$(MACH) cmp
|
||||||
|
|
||||||
|
pr:
|
||||||
|
@pr $(SRC_DIR)/proto.make $(SRC_DIR)/EM_table.x $(SRC_DIR)/mach.h \
|
||||||
|
$(SRC_DIR)/mach.c $(SRC_DIR)/cache.c.x
|
||||||
|
|
||||||
|
opr:
|
||||||
|
make pr | opr
|
||||||
|
|
||||||
|
# total cleanup
|
||||||
|
clean:
|
||||||
|
make -f $(CEG)/make_asobj "OBJ="$(OBJ) clean
|
||||||
|
|
||||||
|
# only remove ce, ceg, and back directories
|
||||||
|
dclean:
|
||||||
|
make -f $(CEG)/make_asobj "OBJ="$(OBJ) dclean
|
89
mach/sparc/ce/push_pop.h
Normal file
89
mach/sparc/ce/push_pop.h
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
push_pop.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PUSH_POP_H
|
||||||
|
#define PUSH_POP_H
|
||||||
|
|
||||||
|
#include "back.h"
|
||||||
|
|
||||||
|
#define NR_REGS 64
|
||||||
|
|
||||||
|
typedef char *reg_t;
|
||||||
|
|
||||||
|
typedef struct cache_elt {
|
||||||
|
reg_t reg, reg2;
|
||||||
|
char *ext;
|
||||||
|
arith cst;
|
||||||
|
} cache_elt;
|
||||||
|
|
||||||
|
#define REG_NUM(r) (((char(*)[8])(r))-regnam)
|
||||||
|
|
||||||
|
#define T_cst 1
|
||||||
|
#define T_ext 2
|
||||||
|
#define T_reg 4
|
||||||
|
#define T_float 8
|
||||||
|
#define T_reg2 16
|
||||||
|
#define T_float2 32
|
||||||
|
|
||||||
|
typedef char const_str_t[NR_REGS];
|
||||||
|
|
||||||
|
extern reg_t reg_g0, reg_g1, reg_g2, reg_g3, reg_g4, reg_g5, reg_g6, reg_g7;
|
||||||
|
extern reg_t reg_i0, reg_i1, reg_i2, reg_i3, reg_i4, reg_i5, reg_i6, reg_i7;
|
||||||
|
extern reg_t reg_l0, reg_l1, reg_l2, reg_l3, reg_l4, reg_l5, reg_l6, reg_l7;
|
||||||
|
extern reg_t reg_o0, reg_o1, reg_o2, reg_o3, reg_o4, reg_o5, reg_o6, reg_o7;
|
||||||
|
extern reg_t reg_f0;
|
||||||
|
extern reg_t reg_sp, reg_lb, reg_gap;
|
||||||
|
extern reg_t reg_tmp;
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define _PROTOTYPE(x,y) x y
|
||||||
|
#else
|
||||||
|
#define _PROTOTYPE(x,y) x()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_PROTOTYPE(int const13, (int));
|
||||||
|
_PROTOTYPE(void init_cache, (void));
|
||||||
|
_PROTOTYPE(void free_reg, (reg_t));
|
||||||
|
_PROTOTYPE(void free_double, (reg_t)); /* ..._reg */
|
||||||
|
_PROTOTYPE(void forced_alloc_reg, (reg_t));
|
||||||
|
_PROTOTYPE(void soft_alloc_reg, (reg_t));
|
||||||
|
_PROTOTYPE(void change_reg, (reg_t));
|
||||||
|
_PROTOTYPE(int type_of_tos, (void));
|
||||||
|
_PROTOTYPE(void inc_tos, (arith));
|
||||||
|
_PROTOTYPE(void inc_tos_reg, (reg_t));
|
||||||
|
_PROTOTYPE(void push_const, (arith));
|
||||||
|
_PROTOTYPE(void push_reg, (reg_t));
|
||||||
|
_PROTOTYPE(void push_ext, (char *));
|
||||||
|
_PROTOTYPE(void flush_cache, (void));
|
||||||
|
static _PROTOTYPE(void flush_part_cache, (int c, int r, int f, int d));
|
||||||
|
static _PROTOTYPE(void subst_reg, (reg_t, reg_t));
|
||||||
|
_PROTOTYPE(void cache_need, (int));
|
||||||
|
static _PROTOTYPE(int cache_read, (int n, int i));
|
||||||
|
static _PROTOTYPE(void dump_cache, (File *stream));
|
||||||
|
_PROTOTYPE(void pop_nop, (int));
|
||||||
|
static _PROTOTYPE(void panic, (char*));
|
||||||
|
|
||||||
|
_PROTOTYPE(reg_t alloc_reg, (void));
|
||||||
|
_PROTOTYPE(reg_t alloc_reg_var, (void));
|
||||||
|
_PROTOTYPE(reg_t alloc_float, (void));
|
||||||
|
_PROTOTYPE(reg_t alloc_float_var, (void));
|
||||||
|
_PROTOTYPE(reg_t alloc_double, (reg_t *sub_reg));
|
||||||
|
_PROTOTYPE(reg_t alloc_double_var, (reg_t *sub_reg));
|
||||||
|
_PROTOTYPE(reg_t pop_reg, (void));
|
||||||
|
_PROTOTYPE(reg_t pop_reg_c13, (char*));
|
||||||
|
_PROTOTYPE(reg_t pop_reg_reg, (reg_t*));
|
||||||
|
_PROTOTYPE(reg_t pop_float, (void));
|
||||||
|
_PROTOTYPE(reg_t pop_double, (reg_t *sub_reg));
|
||||||
|
_PROTOTYPE(void pop_reg_as, (reg_t r));
|
||||||
|
static _PROTOTYPE(reg_t top_reg, (void));
|
||||||
|
static _PROTOTYPE(reg_t top_reg_c13, (char*));
|
||||||
|
|
||||||
|
_PROTOTYPE(arith pop_const, (char *n_str));
|
||||||
|
_PROTOTYPE(arith top_const, (void));
|
||||||
|
_PROTOTYPE(void dup_tos, (int n));
|
||||||
|
_PROTOTYPE(void exg_top, (int n));
|
||||||
|
|
||||||
|
#define code_combiner(x) x
|
||||||
|
|
||||||
|
#endif /* PUSH_POP_H */
|
5
mach/sparc/libsys/.distr
Normal file
5
mach/sparc/libsys/.distr
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
LIST
|
||||||
|
libmon_s.a
|
||||||
|
head_em.s
|
||||||
|
SYS.h
|
||||||
|
syscall.h
|
180
mach/sparc/libsys/LIST
Normal file
180
mach/sparc/libsys/LIST
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
libmon_s.a
|
||||||
|
_alarm.c
|
||||||
|
_brk.s
|
||||||
|
_close.s
|
||||||
|
_creat.s
|
||||||
|
_dup.s
|
||||||
|
_dup2.s
|
||||||
|
_execl.c
|
||||||
|
_execve.s
|
||||||
|
_exit.s
|
||||||
|
_fork.s
|
||||||
|
_fstat.s
|
||||||
|
_ftime.c
|
||||||
|
_getpid.s
|
||||||
|
_getrusage.s
|
||||||
|
_gettimday.s
|
||||||
|
_gtty.c
|
||||||
|
_ioctl.s
|
||||||
|
_kill.s
|
||||||
|
_link.s
|
||||||
|
_lseek.s
|
||||||
|
_open.s
|
||||||
|
_pause.c
|
||||||
|
_pipe.s
|
||||||
|
_read.s
|
||||||
|
_setitimer.s
|
||||||
|
_sigblock.s
|
||||||
|
_sigpause.s
|
||||||
|
_sigsetmask.s
|
||||||
|
_sigvec.c
|
||||||
|
_sigvecscall.s
|
||||||
|
_times.c
|
||||||
|
_unlink.s
|
||||||
|
_wait4.s
|
||||||
|
_write.s
|
||||||
|
accept.s
|
||||||
|
access.s
|
||||||
|
acct.s
|
||||||
|
adjtime.s
|
||||||
|
alarm.c
|
||||||
|
bind.s
|
||||||
|
brk.s
|
||||||
|
cerror.s
|
||||||
|
chdir.s
|
||||||
|
chmod.s
|
||||||
|
chown.s
|
||||||
|
chroot.s
|
||||||
|
cleanup.c
|
||||||
|
close.s
|
||||||
|
connect.s
|
||||||
|
creat.s
|
||||||
|
dup.s
|
||||||
|
dup2.s
|
||||||
|
execl.c
|
||||||
|
execle.c
|
||||||
|
execv.c
|
||||||
|
execve.s
|
||||||
|
exit.c
|
||||||
|
fchdir.s
|
||||||
|
fchmod.s
|
||||||
|
fchown.s
|
||||||
|
fchroot.s
|
||||||
|
fcntl.s
|
||||||
|
fif.s
|
||||||
|
flock.s
|
||||||
|
fork.s
|
||||||
|
fstat.s
|
||||||
|
fstatfs.s
|
||||||
|
fsync.s
|
||||||
|
ftime.c
|
||||||
|
ftruncate.s
|
||||||
|
getdents.s
|
||||||
|
getdirent.s
|
||||||
|
getdomnam.s
|
||||||
|
getdtabsiz.s
|
||||||
|
getegid.s
|
||||||
|
geteuid.s
|
||||||
|
getgid.s
|
||||||
|
getgroups.s
|
||||||
|
gethostname.s
|
||||||
|
getitimer.s
|
||||||
|
getmsg.s
|
||||||
|
getpeername.s
|
||||||
|
getpgrp.s
|
||||||
|
getpid.s
|
||||||
|
getpriority.s
|
||||||
|
getrlimit.s
|
||||||
|
getrusage.s
|
||||||
|
getsockname.s
|
||||||
|
getsockopt.s
|
||||||
|
gettimeofday.s
|
||||||
|
getuid.s
|
||||||
|
gtty.c
|
||||||
|
ioctl.s
|
||||||
|
kill.s
|
||||||
|
killpg.s
|
||||||
|
link.s
|
||||||
|
listen.s
|
||||||
|
lockf.c
|
||||||
|
lseek.s
|
||||||
|
lstat.s
|
||||||
|
mincore.s
|
||||||
|
mkdir.s
|
||||||
|
mknod.s
|
||||||
|
mmap.s
|
||||||
|
mount.s
|
||||||
|
mprotect.s
|
||||||
|
msync.s
|
||||||
|
munmap.s
|
||||||
|
nfssvc.s
|
||||||
|
nice.c
|
||||||
|
open.s
|
||||||
|
pause.c
|
||||||
|
pipe.s
|
||||||
|
plock.c
|
||||||
|
poll.s
|
||||||
|
profil.s
|
||||||
|
ptrace.s
|
||||||
|
putmsg.s
|
||||||
|
quotactl.s
|
||||||
|
read.s
|
||||||
|
readlink.s
|
||||||
|
readv.s
|
||||||
|
reboot.s
|
||||||
|
recv.s
|
||||||
|
recvfrom.s
|
||||||
|
recvmsg.s
|
||||||
|
rename.s
|
||||||
|
rmdir.s
|
||||||
|
sbrk.s
|
||||||
|
select.s
|
||||||
|
send.s
|
||||||
|
sendmsg.s
|
||||||
|
sendto.s
|
||||||
|
setdomnam.s
|
||||||
|
setgid.c
|
||||||
|
setgroups.s
|
||||||
|
sethostname.s
|
||||||
|
setitimer.s
|
||||||
|
setpgrp.s
|
||||||
|
setpriority.s
|
||||||
|
setregid.s
|
||||||
|
setreuid.s
|
||||||
|
setrlimit.s
|
||||||
|
setsockopt.s
|
||||||
|
settimeofday.s
|
||||||
|
setuid.c
|
||||||
|
shutdown.s
|
||||||
|
sigblock.s
|
||||||
|
signal.c
|
||||||
|
sigpause.s
|
||||||
|
sigsetmask.s
|
||||||
|
sigstack.s
|
||||||
|
sigtramp.s
|
||||||
|
sigvec.c
|
||||||
|
sigvec_scall.s
|
||||||
|
socket.s
|
||||||
|
socketpair.s
|
||||||
|
stat.s
|
||||||
|
statfs.s
|
||||||
|
stime.c
|
||||||
|
stty.c
|
||||||
|
swapon.s
|
||||||
|
symlink.s
|
||||||
|
tell.c
|
||||||
|
time.c
|
||||||
|
times.c
|
||||||
|
truncate.s
|
||||||
|
ulimit.c
|
||||||
|
umask.s
|
||||||
|
uname.c
|
||||||
|
unlink.s
|
||||||
|
unmount.s
|
||||||
|
utime.c
|
||||||
|
utimes.s
|
||||||
|
vadvise.s
|
||||||
|
vfork.s
|
||||||
|
wait4.s
|
||||||
|
write.s
|
||||||
|
writev.s
|
147
mach/sparc/libsys/SYS.h
Normal file
147
mach/sparc/libsys/SYS.h
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
/*
|
||||||
|
SYS.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_H
|
||||||
|
#define SYS_H
|
||||||
|
|
||||||
|
#include <syscall.h>
|
||||||
|
|
||||||
|
#define SYS_call_0(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_0(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define SYS_call_1(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
ENTRY1; \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_1(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
ENTRY1; \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define SYS_call_2(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
ENTRY2; \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_2(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
ENTRY2; \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define SYS_call_3(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
ENTRY3; \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_3(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
ENTRY3; \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define SYS_call_4(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
ENTRY4; \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_4(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
ENTRY4; \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define SYS_call_5(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
ENTRY5; \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_5(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
ENTRY5; \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define SYS_call_6(x) \
|
||||||
|
LABEL_(x); \
|
||||||
|
ENTRY6; \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define _SYS_call_6(x) \
|
||||||
|
LABEL__(x); \
|
||||||
|
ENTRY6; \
|
||||||
|
LABEL(x); \
|
||||||
|
BODY(x)
|
||||||
|
|
||||||
|
#define BODY(x) \
|
||||||
|
sys_call(x); \
|
||||||
|
ta %g0; \
|
||||||
|
bgeu 0f; \
|
||||||
|
sethi %hi(cerror), %o5; \
|
||||||
|
or %o5, %lo(cerror), %o5; \
|
||||||
|
jmp %o5; \
|
||||||
|
nop; \
|
||||||
|
0:; \
|
||||||
|
retl; \
|
||||||
|
nop
|
||||||
|
|
||||||
|
#if __STDC__
|
||||||
|
#define LABEL_(x) \
|
||||||
|
.global _ ## x; \
|
||||||
|
_ ## x:
|
||||||
|
#define LABEL__(x) \
|
||||||
|
.global __ ## x; \
|
||||||
|
__ ## x:
|
||||||
|
#else
|
||||||
|
#define LABEL_(x) \
|
||||||
|
.global _/**/x; \
|
||||||
|
_/**/x:
|
||||||
|
#define LABEL__(x) \
|
||||||
|
.global __/**/x; \
|
||||||
|
__/**/x:
|
||||||
|
#endif
|
||||||
|
#define LABEL(x) \
|
||||||
|
.global x; \
|
||||||
|
x:
|
||||||
|
|
||||||
|
#define ENTRY1 \
|
||||||
|
ld [%l0], %o0 \
|
||||||
|
|
||||||
|
#define ENTRY2 \
|
||||||
|
ENTRY1; \
|
||||||
|
ld [%l0+4], %o1 \
|
||||||
|
|
||||||
|
#define ENTRY3 \
|
||||||
|
ENTRY2; \
|
||||||
|
ld [%l0+8], %o2 \
|
||||||
|
|
||||||
|
#define ENTRY4 \
|
||||||
|
ENTRY3; \
|
||||||
|
ld [%l0+12], %o3 \
|
||||||
|
|
||||||
|
#define ENTRY5 \
|
||||||
|
ENTRY4; \
|
||||||
|
ld [%l0+16], %o4 \
|
||||||
|
|
||||||
|
#define ENTRY6 \
|
||||||
|
ENTRY5; \
|
||||||
|
ld [%l0+20], %o5 \
|
||||||
|
|
||||||
|
#if __STDC__
|
||||||
|
#define sys_call(x) \
|
||||||
|
mov SYS_ ## x, %g1
|
||||||
|
#else
|
||||||
|
#define sys_call(x) \
|
||||||
|
mov SYS_/**/x, %g1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SYS_H */
|
13
mach/sparc/libsys/_alarm.c
Normal file
13
mach/sparc/libsys/_alarm.c
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
unsigned
|
||||||
|
_alarm(n)
|
||||||
|
unsigned n;
|
||||||
|
{
|
||||||
|
struct { long l1,l2,l3,l4; } t1,t2;
|
||||||
|
t1.l1 = 0;
|
||||||
|
t1.l2 = 0;
|
||||||
|
t1.l4 = 0;
|
||||||
|
t1.l3 = n;
|
||||||
|
if (_setitimer(0,&t1,&t2) < 0) return -1;
|
||||||
|
if (t2.l4) t2.l3++;
|
||||||
|
return t2.l3;
|
||||||
|
}
|
46
mach/sparc/libsys/_brk.s
Normal file
46
mach/sparc/libsys/_brk.s
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
.global cerror, __brk, __sbrk, limhp, brk, sbrk
|
||||||
|
|
||||||
|
__brk:
|
||||||
|
ld [%l0], %o0
|
||||||
|
brk: inc 7, %o0
|
||||||
|
andn %o0, 7, %o0
|
||||||
|
mov %o0, %o2
|
||||||
|
mov 0x11, %g1
|
||||||
|
ta %g0
|
||||||
|
nop
|
||||||
|
bgeu 0f
|
||||||
|
nop
|
||||||
|
set cerror, %o5
|
||||||
|
jmp %o5
|
||||||
|
nop
|
||||||
|
0:
|
||||||
|
set limhp, %g1
|
||||||
|
st %o2, [%g1]
|
||||||
|
retl
|
||||||
|
nop
|
||||||
|
|
||||||
|
|
||||||
|
__sbrk:
|
||||||
|
ld [%l0], %o0
|
||||||
|
sbrk: inc 7, %o0
|
||||||
|
andn %o0, 7, %o0
|
||||||
|
set limhp, %o1
|
||||||
|
ld [%o1], %o2
|
||||||
|
inc 7, %o2
|
||||||
|
andn %o2, 7, %o3
|
||||||
|
add %o3, %o0, %o0
|
||||||
|
mov %o0, %o4
|
||||||
|
mov 0x11, %g1
|
||||||
|
ta %g0
|
||||||
|
nop
|
||||||
|
bgeu 0f
|
||||||
|
nop
|
||||||
|
set cerror, %o5
|
||||||
|
jmp %o5
|
||||||
|
nop
|
||||||
|
0:
|
||||||
|
set limhp, %g1
|
||||||
|
st %o4, [%g1]
|
||||||
|
mov %o3, %o0
|
||||||
|
retl
|
||||||
|
nop
|
3
mach/sparc/libsys/_close.s
Normal file
3
mach/sparc/libsys/_close.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_1(close)
|
3
mach/sparc/libsys/_creat.s
Normal file
3
mach/sparc/libsys/_creat.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(creat)
|
3
mach/sparc/libsys/_dup.s
Normal file
3
mach/sparc/libsys/_dup.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_1(dup)
|
3
mach/sparc/libsys/_dup2.s
Normal file
3
mach/sparc/libsys/_dup2.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(dup2)
|
8
mach/sparc/libsys/_execl.c
Normal file
8
mach/sparc/libsys/_execl.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
_execl(name,args)
|
||||||
|
char *name;
|
||||||
|
int args;
|
||||||
|
{
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
_execve(name,&args,environ);
|
||||||
|
}
|
3
mach/sparc/libsys/_execve.s
Normal file
3
mach/sparc/libsys/_execve.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(execve)
|
7
mach/sparc/libsys/_exit.s
Normal file
7
mach/sparc/libsys/_exit.s
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
.global __exit
|
||||||
|
__exit:
|
||||||
|
ld [%l0], %o0
|
||||||
|
set SYS_exit, %g1
|
||||||
|
ta %g0
|
3
mach/sparc/libsys/_fork.s
Normal file
3
mach/sparc/libsys/_fork.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_0(fork)
|
3
mach/sparc/libsys/_fstat.s
Normal file
3
mach/sparc/libsys/_fstat.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(fstat)
|
15
mach/sparc/libsys/_ftime.c
Normal file
15
mach/sparc/libsys/_ftime.c
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
_ftime(p)
|
||||||
|
struct { time_t time; unsigned short millitm;
|
||||||
|
short timezone; short dstflag; } *p;
|
||||||
|
{
|
||||||
|
struct { long l1,l2; } t1,t2;
|
||||||
|
|
||||||
|
if (_gettimeofday(&t1,&t2) < 0) return -1;
|
||||||
|
p->time = t1.l1;
|
||||||
|
p->millitm = t1.l2/1000;
|
||||||
|
p->dstflag = t2.l2;
|
||||||
|
p->timezone = t2.l1;
|
||||||
|
return 0;
|
||||||
|
}
|
3
mach/sparc/libsys/_getpid.s
Normal file
3
mach/sparc/libsys/_getpid.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_0(getpid)
|
3
mach/sparc/libsys/_getrusage.s
Normal file
3
mach/sparc/libsys/_getrusage.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(getrusage)
|
3
mach/sparc/libsys/_gettimday.s
Normal file
3
mach/sparc/libsys/_gettimday.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(gettimeofday)
|
8
mach/sparc/libsys/_gtty.c
Normal file
8
mach/sparc/libsys/_gtty.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include <sgtty.h>
|
||||||
|
int
|
||||||
|
_gtty(fildes,argp)
|
||||||
|
int fildes ;
|
||||||
|
struct sgttyb *argp ;
|
||||||
|
{
|
||||||
|
return _ioctl(fildes,TIOCGETP,argp) ;
|
||||||
|
}
|
3
mach/sparc/libsys/_ioctl.s
Normal file
3
mach/sparc/libsys/_ioctl.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(ioctl)
|
3
mach/sparc/libsys/_kill.s
Normal file
3
mach/sparc/libsys/_kill.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(kill)
|
3
mach/sparc/libsys/_link.s
Normal file
3
mach/sparc/libsys/_link.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_2(link)
|
3
mach/sparc/libsys/_lseek.s
Normal file
3
mach/sparc/libsys/_lseek.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(lseek)
|
3
mach/sparc/libsys/_open.s
Normal file
3
mach/sparc/libsys/_open.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(open)
|
3
mach/sparc/libsys/_pause.c
Normal file
3
mach/sparc/libsys/_pause.c
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
_pause() {
|
||||||
|
_sigpause(_sigblock());
|
||||||
|
}
|
3
mach/sparc/libsys/_pipe.s
Normal file
3
mach/sparc/libsys/_pipe.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_1(pipe)
|
3
mach/sparc/libsys/_read.s
Normal file
3
mach/sparc/libsys/_read.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(read)
|
4
mach/sparc/libsys/_setitimer.s
Normal file
4
mach/sparc/libsys/_setitimer.s
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(setitimer)
|
||||||
|
|
3
mach/sparc/libsys/_sigblock.s
Normal file
3
mach/sparc/libsys/_sigblock.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(sigblock)
|
3
mach/sparc/libsys/_sigpause.s
Normal file
3
mach/sparc/libsys/_sigpause.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_1(sigpause)
|
3
mach/sparc/libsys/_sigsetmask.s
Normal file
3
mach/sparc/libsys/_sigsetmask.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_1(sigsetmask)
|
36
mach/sparc/libsys/_sigvec.c
Normal file
36
mach/sparc/libsys/_sigvec.c
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include "syscall.h"
|
||||||
|
#include <errno.h>
|
||||||
|
struct sigvec { int (*handler)(); int mask,flags; };
|
||||||
|
int (*(_sigfunc[32]))();
|
||||||
|
extern int _sigtramp();
|
||||||
|
extern int errno;
|
||||||
|
|
||||||
|
sigvec(sig,vec,ovec)
|
||||||
|
register struct sigvec *vec;
|
||||||
|
struct sigvec *ovec;
|
||||||
|
{
|
||||||
|
struct sigvec tmp;
|
||||||
|
int (*old)();
|
||||||
|
|
||||||
|
if ((unsigned) sig >= 32) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
old = _sigfunc[sig];
|
||||||
|
if (vec) {
|
||||||
|
tmp = *vec;
|
||||||
|
vec = &tmp;
|
||||||
|
if (vec->handler && vec->handler != (int (*)()) 1) {
|
||||||
|
_sigfunc[sig] = vec->handler;
|
||||||
|
vec->handler = _sigtramp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_sigvec_scall(sig,vec,ovec) < 0) {
|
||||||
|
_sigfunc[sig] = old;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (ovec && ovec->handler == _sigtramp) {
|
||||||
|
ovec->handler = old;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
5
mach/sparc/libsys/_sigvecscall.s
Normal file
5
mach/sparc/libsys/_sigvecscall.s
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
#define SYS_sigvec_scall SYS_sigvec
|
||||||
|
|
||||||
|
_SYS_call_3(sigvec_scall)
|
16
mach/sparc/libsys/_times.c
Normal file
16
mach/sparc/libsys/_times.c
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#define Xval(xx) ((xx).l1*60+(xx).l2/(100000/6))
|
||||||
|
|
||||||
|
_times(bp)
|
||||||
|
struct { time_t l1,l2,l3,l4;} *bp;
|
||||||
|
{
|
||||||
|
struct { struct { long l1,l2; }s1,s2; long x[20]; } t;
|
||||||
|
if (_getrusage(0,&t) < 0) return -1;
|
||||||
|
bp->l1 = Xval(t.s1);
|
||||||
|
bp->l2 = Xval(t.s2);
|
||||||
|
if (_getrusage(-1,&t) < 0) return -1;
|
||||||
|
bp->l3 = Xval(t.s1);
|
||||||
|
bp->l4 = Xval(t.s2);
|
||||||
|
return 0;
|
||||||
|
}
|
3
mach/sparc/libsys/_unlink.s
Normal file
3
mach/sparc/libsys/_unlink.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_1(unlink)
|
19
mach/sparc/libsys/_wait4.s
Normal file
19
mach/sparc/libsys/_wait4.s
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
.global __wait, __wait3
|
||||||
|
|
||||||
|
__wait:
|
||||||
|
mov 0, %o0
|
||||||
|
ld [%l0], %o1
|
||||||
|
mov 0, %o2
|
||||||
|
b wait4
|
||||||
|
mov 0, %o3
|
||||||
|
|
||||||
|
__wait3:
|
||||||
|
ld [%l0+8], %o3
|
||||||
|
ld [%l0+4], %o2
|
||||||
|
ld [%l0], %o1
|
||||||
|
b wait4
|
||||||
|
mov 0, %o0
|
||||||
|
|
||||||
|
_SYS_call_4(wait4)
|
3
mach/sparc/libsys/_write.s
Normal file
3
mach/sparc/libsys/_write.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
_SYS_call_3(write)
|
3
mach/sparc/libsys/accept.s
Normal file
3
mach/sparc/libsys/accept.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(accept)
|
4
mach/sparc/libsys/access.s
Normal file
4
mach/sparc/libsys/access.s
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(access)
|
||||||
|
|
3
mach/sparc/libsys/acct.s
Normal file
3
mach/sparc/libsys/acct.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(acct)
|
3
mach/sparc/libsys/adjtime.s
Normal file
3
mach/sparc/libsys/adjtime.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(adjtime)
|
13
mach/sparc/libsys/alarm.c
Normal file
13
mach/sparc/libsys/alarm.c
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
unsigned
|
||||||
|
alarm(n)
|
||||||
|
unsigned n;
|
||||||
|
{
|
||||||
|
struct { long l1,l2,l3,l4; } t1,t2;
|
||||||
|
t1.l1 = 0;
|
||||||
|
t1.l2 = 0;
|
||||||
|
t1.l4 = 0;
|
||||||
|
t1.l3 = n;
|
||||||
|
if (setitimer(0,&t1,&t2) < 0) return -1;
|
||||||
|
if (t2.l4) t2.l3++;
|
||||||
|
return t2.l3;
|
||||||
|
}
|
4
mach/sparc/libsys/bind.s
Normal file
4
mach/sparc/libsys/bind.s
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(bind)
|
||||||
|
|
6
mach/sparc/libsys/brk.s
Normal file
6
mach/sparc/libsys/brk.s
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
.global _brk, __brk
|
||||||
|
|
||||||
|
_brk:
|
||||||
|
set __brk,%o7
|
||||||
|
jmp %o7
|
||||||
|
nop
|
14
mach/sparc/libsys/cerror.s
Normal file
14
mach/sparc/libsys/cerror.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.global _errno
|
||||||
|
.global cerror
|
||||||
|
|
||||||
|
cerror:
|
||||||
|
set _errno, %o5
|
||||||
|
st %o0, [%o5]
|
||||||
|
set -1, %o0
|
||||||
|
retl
|
||||||
|
nop
|
||||||
|
|
||||||
|
.seg "data"
|
||||||
|
_errno:
|
||||||
|
.long 0
|
||||||
|
|
3
mach/sparc/libsys/chdir.s
Normal file
3
mach/sparc/libsys/chdir.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(chdir)
|
3
mach/sparc/libsys/chmod.s
Normal file
3
mach/sparc/libsys/chmod.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(chmod)
|
3
mach/sparc/libsys/chown.s
Normal file
3
mach/sparc/libsys/chown.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(chown)
|
3
mach/sparc/libsys/chroot.s
Normal file
3
mach/sparc/libsys/chroot.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(chroot)
|
1
mach/sparc/libsys/cleanup.c
Normal file
1
mach/sparc/libsys/cleanup.c
Normal file
|
@ -0,0 +1 @@
|
||||||
|
_cleanup() { }
|
3
mach/sparc/libsys/close.s
Normal file
3
mach/sparc/libsys/close.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(close)
|
4
mach/sparc/libsys/connect.s
Normal file
4
mach/sparc/libsys/connect.s
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(connect)
|
||||||
|
|
3
mach/sparc/libsys/creat.s
Normal file
3
mach/sparc/libsys/creat.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(creat)
|
3
mach/sparc/libsys/dup.s
Normal file
3
mach/sparc/libsys/dup.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(dup)
|
3
mach/sparc/libsys/dup2.s
Normal file
3
mach/sparc/libsys/dup2.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(dup2)
|
8
mach/sparc/libsys/execl.c
Normal file
8
mach/sparc/libsys/execl.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
execl(name,args)
|
||||||
|
char *name;
|
||||||
|
int args;
|
||||||
|
{
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
execve(name,&args,environ);
|
||||||
|
}
|
9
mach/sparc/libsys/execle.c
Normal file
9
mach/sparc/libsys/execle.c
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
execle(name,args)
|
||||||
|
char *name;
|
||||||
|
char *args;
|
||||||
|
{
|
||||||
|
char **p = &args;
|
||||||
|
while (*p++) ;
|
||||||
|
|
||||||
|
execve(name,&args,*p);
|
||||||
|
}
|
7
mach/sparc/libsys/execv.c
Normal file
7
mach/sparc/libsys/execv.c
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
execv(name,args)
|
||||||
|
char *name;
|
||||||
|
char **args;
|
||||||
|
{
|
||||||
|
extern char **environ;
|
||||||
|
execve(name,args,environ);
|
||||||
|
}
|
3
mach/sparc/libsys/execve.s
Normal file
3
mach/sparc/libsys/execve.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(execve)
|
5
mach/sparc/libsys/exit.c
Normal file
5
mach/sparc/libsys/exit.c
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
exit(n)
|
||||||
|
{
|
||||||
|
_cleanup();
|
||||||
|
_exit(n);
|
||||||
|
}
|
3
mach/sparc/libsys/fchdir.s
Normal file
3
mach/sparc/libsys/fchdir.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(fchdir)
|
3
mach/sparc/libsys/fchmod.s
Normal file
3
mach/sparc/libsys/fchmod.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(fchmod)
|
3
mach/sparc/libsys/fchown.s
Normal file
3
mach/sparc/libsys/fchown.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(fchown)
|
3
mach/sparc/libsys/fchroot.s
Normal file
3
mach/sparc/libsys/fchroot.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_1(fchroot)
|
4
mach/sparc/libsys/fcntl.s
Normal file
4
mach/sparc/libsys/fcntl.s
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_3(fcntl)
|
||||||
|
|
67
mach/sparc/libsys/fif.s
Normal file
67
mach/sparc/libsys/fif.s
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
.global fif8, Fd0, Fd1, Fd80000000, Fs80000000, Fs0
|
||||||
|
|
||||||
|
.align 8
|
||||||
|
Fd0:
|
||||||
|
.double 0r0
|
||||||
|
Fd1:
|
||||||
|
.double 0r1
|
||||||
|
FxE15:
|
||||||
|
.word 0x43300000, 0x0 ! magic const: (a.b + x) - x == a.0
|
||||||
|
Fd80000000:
|
||||||
|
.align 8
|
||||||
|
.double 0r4294967296
|
||||||
|
Fs80000000:
|
||||||
|
.single 0r2147483648
|
||||||
|
Fs0:
|
||||||
|
.single 0r0
|
||||||
|
|
||||||
|
fif8:
|
||||||
|
ld [%l0], %f0
|
||||||
|
ld [%l0+4], %f1
|
||||||
|
ld [%l0+8], %f2
|
||||||
|
ld [%l0+12], %f3
|
||||||
|
fmuld %f0, %f2, %f0
|
||||||
|
fmovs %f0, %f6
|
||||||
|
fmovs %f1, %f7
|
||||||
|
set Fd0, %o0
|
||||||
|
ldd [%o0], %f8
|
||||||
|
fcmpd %f0, %f8
|
||||||
|
nop
|
||||||
|
fbuge,a 1f
|
||||||
|
mov %g0, %o1
|
||||||
|
set 1, %o1
|
||||||
|
fnegs %f0, %f0
|
||||||
|
1:
|
||||||
|
set FxE15, %o0
|
||||||
|
ldd [%o0], %f10
|
||||||
|
fcmpd %f0, %f10
|
||||||
|
nop
|
||||||
|
fbuge 2f
|
||||||
|
nop
|
||||||
|
faddd %f0, %f10, %f4
|
||||||
|
fsubd %f4, %f10, %f4
|
||||||
|
fsubd %f0, %f4, %f2
|
||||||
|
set Fd1, %o0
|
||||||
|
ldd [%o0], %f12
|
||||||
|
4: fcmpd %f2, %f12
|
||||||
|
nop
|
||||||
|
fbge,a 4b
|
||||||
|
fsubd %f2, %f12, %f2
|
||||||
|
5: fcmpd %f2, %f8
|
||||||
|
nop
|
||||||
|
fbl,a 5b
|
||||||
|
faddd %f2, %f12, %f2
|
||||||
|
fsubd %f0, %f2, %f0
|
||||||
|
2:
|
||||||
|
tst %o1
|
||||||
|
bz 3f
|
||||||
|
nop
|
||||||
|
fnegs %f0, %f0
|
||||||
|
3:
|
||||||
|
fsubd %f6, %f0, %f2
|
||||||
|
st %f0, [%l0]
|
||||||
|
st %f1, [%l0+4]
|
||||||
|
st %f2, [%l0+8]
|
||||||
|
st %f3, [%l0+12]
|
||||||
|
retl
|
||||||
|
nop
|
3
mach/sparc/libsys/flock.s
Normal file
3
mach/sparc/libsys/flock.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(flock)
|
3
mach/sparc/libsys/fork.s
Normal file
3
mach/sparc/libsys/fork.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_0(fork)
|
3
mach/sparc/libsys/fstat.s
Normal file
3
mach/sparc/libsys/fstat.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(fstat)
|
3
mach/sparc/libsys/fstatfs.s
Normal file
3
mach/sparc/libsys/fstatfs.s
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "SYS.h"
|
||||||
|
|
||||||
|
SYS_call_2(fstatfs)
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue