Added
This commit is contained in:
parent
ae0dbd5050
commit
f03c37528e
2
mach/sparc/ce_cg/.distr
Normal file
2
mach/sparc/ce_cg/.distr
Normal file
|
@ -0,0 +1,2 @@
|
|||
convert.c
|
||||
proto.make
|
111
mach/sparc/ce_cg/convert.c
Normal file
111
mach/sparc/ce_cg/convert.c
Normal file
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
#ifndef NORCSID
|
||||
static char rcsid[] = "$Header$";
|
||||
#endif
|
||||
|
||||
/* This program converts either human-readable or compact EM
|
||||
assembly code to calls of the procedure-interface.
|
||||
It must be linked with two libraries:
|
||||
- a library to read EM code, according to read_em(3)
|
||||
- a library implementing the em_code(3) interface.
|
||||
Thus, this program could serve as an EM_encoder, an
|
||||
EM_decoder, or some code generator, depending on how it is
|
||||
linked.
|
||||
*/
|
||||
|
||||
#include <system.h>
|
||||
#include <em_pseu.h>
|
||||
#include <em_mnem.h>
|
||||
#include <em_spec.h>
|
||||
#include <em_flag.h>
|
||||
#include <em_ptyp.h>
|
||||
#include <em.h>
|
||||
#include <em_comp.h>
|
||||
|
||||
char *filename; /* Name of input file */
|
||||
char *out_file; /* Name of output file */
|
||||
int errors; /* Number of errors */
|
||||
int debug;
|
||||
extern char *C_error;
|
||||
|
||||
main(argc,argv)
|
||||
char **argv;
|
||||
{
|
||||
struct e_instr buf;
|
||||
register struct e_instr *p = &buf;
|
||||
int ac;
|
||||
char **av;
|
||||
|
||||
filename= 0;
|
||||
out_file= 0;
|
||||
debug= 0;
|
||||
for (ac=argc-1,av=argv+1;ac;ac--,av++)
|
||||
{
|
||||
if (av[0][0]=='-' && av[0][1]=='d' && av[0][2]==0)
|
||||
{
|
||||
debug= 1;
|
||||
continue;
|
||||
}
|
||||
if (!filename)
|
||||
{
|
||||
if (strcmp(*av, "-"))
|
||||
filename= *av;
|
||||
}
|
||||
else if (!out_file)
|
||||
{
|
||||
if (strcmp(*av, "-"))
|
||||
out_file= *av;
|
||||
}
|
||||
else
|
||||
fatal ("too many arguments");
|
||||
}
|
||||
if (!EM_open(filename)) {
|
||||
fatal(EM_error);
|
||||
}
|
||||
EM_getinstr(p);
|
||||
C_init((arith) EM_wordsize, (arith) EM_pointersize);
|
||||
if (!C_open(out_file)) {
|
||||
fatal("C_open failed");
|
||||
}
|
||||
C_magic();
|
||||
while (p->em_type != EM_EOF) {
|
||||
if (p->em_type == EM_FATAL) {
|
||||
fatal("%s", EM_error);
|
||||
}
|
||||
if (EM_error) {
|
||||
error("%s", EM_error);
|
||||
}
|
||||
if (p->em_type != EM_ERROR && !C_out(p)) {
|
||||
error("%s", C_error);
|
||||
}
|
||||
EM_getinstr(p);
|
||||
}
|
||||
C_close();
|
||||
EM_close();
|
||||
exit(errors);
|
||||
}
|
||||
|
||||
/* VARARGS */
|
||||
error(s,a1,a2,a3,a4)
|
||||
char *s;
|
||||
{
|
||||
fprint(STDERR,
|
||||
"%s, line %d: ",
|
||||
filename ? filename : "standard input",
|
||||
EM_lineno);
|
||||
fprint(STDERR,s,a1,a2,a3,a4);
|
||||
fprint(STDERR, "\n");
|
||||
errors++;
|
||||
}
|
||||
|
||||
/* VARARGS */
|
||||
fatal(s,a1,a2,a3,a4)
|
||||
char *s;
|
||||
{
|
||||
if (C_busy()) C_close();
|
||||
error(s,a1,a2,a3,a4);
|
||||
exit(1);
|
||||
}
|
42
mach/sparc/ce_cg/proto.make
Normal file
42
mach/sparc/ce_cg/proto.make
Normal file
|
@ -0,0 +1,42 @@
|
|||
# $Header$
|
||||
|
||||
#PARAMS do not remove this line!
|
||||
|
||||
SRC_DIR=$(SRC_HOME)/mach/sparc/ce_cg
|
||||
MACH=sparc
|
||||
LIB_DIR=$(TARGET_HOME)/modules/lib
|
||||
EM_LIB=$(TARGET_HOME)/lib.bin
|
||||
INCLUDE=-I$(TARGET_HOME)/modules/h -I$(TARGET_HOME)/h
|
||||
CE_A= $(TARGET_HOME)/lib.bin/$(MACH)/ce.$(LIBSUF)
|
||||
BACK_A= $(TARGET_HOME)/lib.bin/$(MACH)/back.$(LIBSUF)
|
||||
|
||||
CFLAGS=$(INCLUDE) -DCODE_EXPANDER $(COPTIONS)
|
||||
LDFLAGS=$(LDOPTIONS)
|
||||
LDLIBS=$(LIB_DIR)/libread_emk.$(LIBSUF) $(CE_A) $(BACK_A) \
|
||||
$(LIB_DIR)/libprint.$(LIBSUF) $(LIB_DIR)/libstring.$(LIBSUF) \
|
||||
$(LIB_DIR)/liballoc.$(LIBSUF) $(LIB_DIR)/libsystem.$(LIBSUF) \
|
||||
$(EM_LIB)/em_data.$(LIBSUF) $(LIB_DIR)/libflt.$(LIBSUF)
|
||||
|
||||
all: cg
|
||||
|
||||
install: all
|
||||
-mkdir $(TARGET_HOME)/lib.bin/$(MACH)
|
||||
cp cg $(TARGET_HOME)/lib.bin/$(MACH)/cg
|
||||
|
||||
cmp: all
|
||||
cmp cp cg $(TARGET_HOME)/lib.bin/$(MACH)/cg
|
||||
|
||||
clean:
|
||||
rm -f *.$(SUF) cg
|
||||
|
||||
cg: convert.$(SUF) $(CE_A) $(BACK_A)
|
||||
$(CC) $(LDFLAGS) -o cg convert.$(SUF) $(LDLIBS)
|
||||
|
||||
convert.$(SUF): $(SRC_DIR)/convert.c
|
||||
$(CC) $(CFLAGS) -c $(SRC_DIR)/convert.c
|
||||
|
||||
pr:
|
||||
@pr $(SRC_DIR)/proto.make $(SRC_DIR)/convert.c
|
||||
|
||||
opr:
|
||||
make pr | opr
|
2
mach/sparc/libem/.distr
Normal file
2
mach/sparc/libem/.distr
Normal file
|
@ -0,0 +1,2 @@
|
|||
LIST
|
||||
libem_s.a
|
9
mach/sparc/libem/LIST
Normal file
9
mach/sparc/libem/LIST
Normal file
|
@ -0,0 +1,9 @@
|
|||
libem_s.a
|
||||
csa.s
|
||||
csb.s
|
||||
dvu.s
|
||||
lar.s
|
||||
muldiv.s
|
||||
nop.s
|
||||
shp.s
|
||||
trp.s
|
37
mach/sparc/libem/csa.s
Normal file
37
mach/sparc/libem/csa.s
Normal file
|
@ -0,0 +1,37 @@
|
|||
.global csa
|
||||
|
||||
ECASE=20
|
||||
STACK_CLICK=4
|
||||
|
||||
csa:
|
||||
! jump table address in %o0
|
||||
! index in %o1
|
||||
|
||||
ld [%o0], %o4 ! default address
|
||||
ld [%o0+4], %o2
|
||||
subcc %o1, %o2, %o1 ! index - lower bound
|
||||
bl 1f
|
||||
ld [%o0+2*4], %o3
|
||||
cmp %o1, %o3 ! rel. index, upper - lower bound
|
||||
bgt 1f
|
||||
nop
|
||||
sll %o1, 2, %o5
|
||||
add %o0, %o5, %o3 ! %o3 = @jump address
|
||||
ld [%o3+12], %o2 ! %o2 = jump address
|
||||
tst %o2
|
||||
be 1f
|
||||
nop
|
||||
jmp %o2
|
||||
nop
|
||||
1:
|
||||
tst %o4
|
||||
beq 2f
|
||||
nop
|
||||
jmp %o4
|
||||
nop
|
||||
2:
|
||||
mov ECASE, %o0
|
||||
set trp, %g1
|
||||
jmp %g1
|
||||
nop
|
||||
.align 4
|
40
mach/sparc/libem/csb.s
Normal file
40
mach/sparc/libem/csb.s
Normal file
|
@ -0,0 +1,40 @@
|
|||
.global csb
|
||||
ECASE=20
|
||||
|
||||
csb:
|
||||
! case descriptor in %o0
|
||||
! index in %o1
|
||||
ld [%o0], %o2 ! default jump address
|
||||
ld [%o0+4], %o3 ! # entries
|
||||
inc 8, %o0
|
||||
tst %o3
|
||||
be 3f
|
||||
nop
|
||||
dec %o3
|
||||
set 0xffff, %o4
|
||||
and %o3, %o4, %o5
|
||||
sll %o5, 3, %o3
|
||||
1:
|
||||
ld [%o0+%o3], %o4
|
||||
cmp %o4, %o1
|
||||
be 2f
|
||||
nop
|
||||
deccc 8, %o3
|
||||
bge 1b
|
||||
nop
|
||||
b 3f
|
||||
nop
|
||||
2:
|
||||
inc 4, %o3
|
||||
ld [%o0+%o3], %o2
|
||||
3:
|
||||
tst %o2
|
||||
be 4f
|
||||
nop
|
||||
jmp %o2
|
||||
nop
|
||||
4:
|
||||
set ECASE, %o0
|
||||
set trp, %g1
|
||||
jmp %g1
|
||||
nop
|
101
mach/sparc/libem/dvu.s
Normal file
101
mach/sparc/libem/dvu.s
Normal file
|
@ -0,0 +1,101 @@
|
|||
.global dvu4
|
||||
.global dvi4
|
||||
|
||||
dvu4:
|
||||
! %o0' = %o0 / %o1
|
||||
! %o1' = %o0 % %o1
|
||||
tst %o1
|
||||
be 0f
|
||||
nop
|
||||
clr %o5
|
||||
tst %o0
|
||||
bge 3f /* jump if msb clear */
|
||||
nop
|
||||
|
||||
clr %o2
|
||||
mov %o1, %o3
|
||||
clr %o4
|
||||
1: tst %o1
|
||||
bl 5f /* jump if msb set */
|
||||
nop
|
||||
sll %o1, 1, %o1
|
||||
inc %o4
|
||||
b 1b
|
||||
nop
|
||||
|
||||
|
||||
dvi4:
|
||||
! %o2 = %o0 / %o1
|
||||
! %o3 = %o0 % %o1
|
||||
tst %o1
|
||||
be 0f
|
||||
clr %o5
|
||||
tst %o0
|
||||
bge 1f
|
||||
nop
|
||||
neg %o0
|
||||
xor %o5, 1, %o5
|
||||
1:
|
||||
tst %o1
|
||||
bge 3f
|
||||
nop
|
||||
neg %o1
|
||||
xor %o5, 3, %o5
|
||||
|
||||
3: /* div common */
|
||||
clr %o2
|
||||
mov %o1, %o3
|
||||
clr %o4
|
||||
|
||||
4:
|
||||
cmp %o1, %o0
|
||||
bgu 5f
|
||||
nop
|
||||
inc %o4
|
||||
sll %o1, 1, %o1
|
||||
b 4b
|
||||
nop
|
||||
|
||||
5: /* div common for dvu4 && ( %o0 & 0x80000000) */
|
||||
sll %o2, 1, %o2
|
||||
subcc %o0, %o1, %o0
|
||||
bgeu 3f
|
||||
nop
|
||||
add %o0, %o1, %o0
|
||||
b 4f
|
||||
nop
|
||||
3:
|
||||
inc %o2
|
||||
4:
|
||||
srl %o1, 1, %o1
|
||||
tst %o4
|
||||
bz 5f
|
||||
nop
|
||||
dec %o4
|
||||
b 5b
|
||||
nop
|
||||
|
||||
5:
|
||||
andcc %o5, 1, %g0
|
||||
bz 6f
|
||||
nop
|
||||
tst %o0
|
||||
bz 7f
|
||||
nop
|
||||
inc %o2
|
||||
sub %o3, %o0, %o0
|
||||
7:
|
||||
neg %o2
|
||||
6:
|
||||
andcc %o5, 2, %g0
|
||||
bz 8f
|
||||
nop
|
||||
neg %o0
|
||||
8:
|
||||
mov %o0, %o1
|
||||
mov %o2, %o0
|
||||
retl
|
||||
nop
|
||||
|
||||
0: /* divide by zero */
|
||||
ta 2
|
104
mach/sparc/libem/lar.s
Normal file
104
mach/sparc/libem/lar.s
Normal file
|
@ -0,0 +1,104 @@
|
|||
.global aar
|
||||
.global lar
|
||||
.global sar
|
||||
|
||||
aar: ! %o0 = descr %o1 = index %o2 = array_ptr
|
||||
|
||||
save %sp, -64, %sp
|
||||
ld [%i0], %o0 ! lower bound
|
||||
subcc %i1, %o0, %o1 ! 0..N-1
|
||||
bl 1f ! <0
|
||||
nop
|
||||
ld [%i0+4], %o0 ! n
|
||||
cmp %o1, %o0
|
||||
bgt 1f ! > N
|
||||
nop
|
||||
call mli4 ! descr *= n.size
|
||||
ld [%i0+8], %o0 ! el.size
|
||||
add %i2, %o0, %i0 ! &base_addr[n]
|
||||
ret
|
||||
restore ! delay slot
|
||||
1: restore
|
||||
set EARRAY, %o0
|
||||
call trp
|
||||
nop
|
||||
retl
|
||||
nop
|
||||
|
||||
lar: ! %o0 = descr %o1 = index %o2 = array_ptr
|
||||
|
||||
mov %o7, %o4
|
||||
call aar
|
||||
mov %o0, %o3
|
||||
mov %o4, %o7
|
||||
|
||||
! %o0 = address of el, %o1 = sizeof(el), %o2 = word, %o3 = descr
|
||||
ld [%o3+8], %o1 ! el.size
|
||||
cmp %o1, 1
|
||||
bne 2f
|
||||
nop
|
||||
ldub [%o0], %o2 ! el.size == 1
|
||||
dec 4, %l0
|
||||
retl
|
||||
st %o2, [%l0] ! delay slot
|
||||
2: cmp %o1,2
|
||||
bne 3f
|
||||
nop
|
||||
lduh [%o0], %o2 ! el.size == 2
|
||||
dec 4, %l0
|
||||
retl
|
||||
st %o2, [%l0] ! delay slot
|
||||
3: cmp %o1, 4
|
||||
bne 4f
|
||||
nop
|
||||
ld [%o0], %o2
|
||||
dec 4, %l0
|
||||
retl
|
||||
st %o2, [%l0] ! delay slot
|
||||
4: sub %l0, %o1, %l0
|
||||
5: deccc 4, %o1
|
||||
ld [%o0+%o1], %o2
|
||||
bnz 5b
|
||||
st %o2, [%l0+%o1]
|
||||
retl
|
||||
nop
|
||||
|
||||
sar: ! %o0 = descr %o1 = index %o2 = array_ptr
|
||||
|
||||
mov %o7, %o4
|
||||
call aar
|
||||
mov %o0, %o3
|
||||
mov %o4, %o7
|
||||
|
||||
! %o0 = address of el, %o1 = sizeof(el), %o2 = word, %o3 = descr
|
||||
|
||||
ld [%o3+8], %o1 ! el.size
|
||||
cmp %o1, 1
|
||||
bne 2f
|
||||
nop
|
||||
ld [%l0], %o2
|
||||
stb %o2, [%o0]
|
||||
retl
|
||||
inc 4, %l0 ! delay slot
|
||||
2: cmp %o1,2
|
||||
bne 3f
|
||||
nop
|
||||
ld [%l0], %o2
|
||||
sth %o2, [%o0]
|
||||
retl
|
||||
inc 4, %l0 ! delay slot
|
||||
3: cmp %o1, 4
|
||||
bne 4f
|
||||
nop
|
||||
ld [%l0], %o2
|
||||
st %o2, [%o0]
|
||||
retl
|
||||
inc 4, %l0 ! delay slot
|
||||
|
||||
4: mov %o1, %o4
|
||||
5: deccc 4, %o1
|
||||
ld [%l0+%o1], %o2
|
||||
bnz 5b
|
||||
st %o2, [%o0+%o1] ! delay slot
|
||||
retl
|
||||
add %l0, %o4, %l0 ! delay slot
|
148
mach/sparc/libem/muldiv.s
Normal file
148
mach/sparc/libem/muldiv.s
Normal file
|
@ -0,0 +1,148 @@
|
|||
.global mli4
|
||||
.global mlu4
|
||||
|
||||
mli4:
|
||||
mov %o0, %y
|
||||
andncc %o0, 0xfff, %g0
|
||||
bn mul_shortway1
|
||||
nop
|
||||
andcc %g0, %g0, %o4
|
||||
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %g0, %o4
|
||||
|
||||
tst %o0
|
||||
rd %y, %o0
|
||||
bge 1f
|
||||
tst %o0
|
||||
sub %o4, %o1, %o4
|
||||
1: retl
|
||||
mov %o4, %o1
|
||||
|
||||
mul_shortway1:
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %g0, %o4
|
||||
|
||||
rd %y, %o5
|
||||
sll %o4, 12, %o0
|
||||
srl %o5, 20, %o5
|
||||
|
||||
or %o5, %o4, %o0
|
||||
retl
|
||||
mov %o4, %o1
|
||||
|
||||
mlu4:
|
||||
or %o0, %o1, %o4
|
||||
mov %o0, %y
|
||||
andncc %o4, 0xfff, %o5
|
||||
bn mul_shortway2
|
||||
andcc %g0, %g0, %o4
|
||||
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %g0, %o4
|
||||
|
||||
tst %o0
|
||||
bge 1f
|
||||
nop
|
||||
add %o4, %o0, %o4
|
||||
1:
|
||||
rd %y, %o0
|
||||
retl
|
||||
addcc %o4, %g0, %o1
|
||||
|
||||
mul_shortway2:
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %o1, %o4
|
||||
mulscc %o4, %g0, %o4
|
||||
|
||||
rd %y, %o5
|
||||
sll %o4, 12, %o0
|
||||
srl %o5, 20, %o5
|
||||
|
||||
or %o5, %o4, %o0
|
||||
retl
|
||||
addcc %g0, %g0, %o1
|
||||
|
5
mach/sparc/libem/nop.s
Normal file
5
mach/sparc/libem/nop.s
Normal file
|
@ -0,0 +1,5 @@
|
|||
.global nop
|
||||
|
||||
nop:
|
||||
retl
|
||||
nop
|
30
mach/sparc/libem/shp.s
Normal file
30
mach/sparc/libem/shp.s
Normal file
|
@ -0,0 +1,30 @@
|
|||
.global strhp
|
||||
EHEAP=17
|
||||
|
||||
strhp: ! %o0 = new heap pointer
|
||||
save %sp, -64, %sp
|
||||
set reghp, %o1
|
||||
st %i0, [%o1] ! it'll probably go right, anyway
|
||||
set limhp, %o1
|
||||
ld [%o1], %o2
|
||||
cmp %i0, limhp
|
||||
blt 1f
|
||||
nop
|
||||
add %i0, 0x400, %i0 ! extra 1K
|
||||
andn %i0, 0x3ff, %o0
|
||||
st %o0, [%o1] ! prematurely set limhp
|
||||
call brk
|
||||
nop
|
||||
tst %o0
|
||||
blt 2f ! failed
|
||||
nop
|
||||
set limhp, %o1
|
||||
st %o0, [%o1]
|
||||
1: ret
|
||||
restore
|
||||
2:
|
||||
restore
|
||||
set EHEAP, %o0
|
||||
set trp, %o1
|
||||
jmp %o1
|
||||
nop
|
35
mach/sparc/libem/trp.s
Normal file
35
mach/sparc/libem/trp.s
Normal file
|
@ -0,0 +1,35 @@
|
|||
.global trp, write
|
||||
|
||||
trp:
|
||||
set trpim, %o1
|
||||
ld [%o1], %o2
|
||||
srl %o2, %o0, %o1
|
||||
andcc %o2, 1, %g0
|
||||
bz 2f
|
||||
nop
|
||||
retl
|
||||
nop
|
||||
2:
|
||||
set trppc, %o1
|
||||
ld [%o1], %o1
|
||||
tst %o1
|
||||
bz 1f
|
||||
nop
|
||||
dec 4, %l0
|
||||
st %o0, [%l0]
|
||||
jmp %o1
|
||||
nop
|
||||
1:
|
||||
save %sp, -64, %sp
|
||||
set 2, %o0
|
||||
set message, %o1
|
||||
set message_high-message, %o2
|
||||
call write
|
||||
nop
|
||||
restore
|
||||
ta 2
|
||||
st %g0, [%g0]
|
||||
|
||||
message:
|
||||
.ascii "the error code is in %o0\n"
|
||||
message_high:
|
Loading…
Reference in a new issue