diff options
author | cvs2svn <> | 2003-02-08 17:58:32 +0300 |
---|---|---|
committer | cvs2svn <> | 2003-02-08 17:58:32 +0300 |
commit | 6b0370d4f74abf7dd325187923d180b680d90fb0 (patch) | |
tree | a29ee8d3528e3544f847b280934298f9d2f14e8b /libgloss/mips/entry.S | |
parent | 994d26a476fbfb86258bf64644dc86bec02d0574 (diff) |
This commit was manufactured by cvs2svn to create tag 'mingw-runtime-2_4'.mingw-runtime-2_4
Sprout from master 2003-02-08 14:58:31 UTC Earnie Boyd <earnie@users.sf.net> ''
Cherrypick from cygnus 1999-05-03 07:29:06 UTC Richard Henderson <rth@redhat.com> '19990502 sourceware import':
COPYING
COPYING.LIB
README
config/mh-armpic
config/mh-elfalphapic
config/mh-m68kpic
config/mh-papic
config/mh-ppcpic
config/mh-x86pic
config/mt-d30v
config/mt-netware
config/mt-ospace
etc/add-log.el
etc/add-log.vi
etc/configbuild.ein
etc/configbuild.fig
etc/configbuild.jin
etc/configbuild.tin
etc/configdev.ein
etc/configdev.fig
etc/configdev.jin
etc/configdev.tin
etc/configure
etc/configure.in
etc/configure.texi
include/aout/hp.h
include/aout/hppa.h
include/coff/sym.h
include/coff/symconst.h
include/fopen-bin.h
include/fopen-same.h
include/fopen-vms.h
include/gdbm.h
include/mpw/ChangeLog
include/mpw/README
include/mpw/dir.h
include/mpw/dirent.h
include/mpw/fcntl.h
include/mpw/grp.h
include/mpw/mpw.h
include/mpw/pwd.h
include/mpw/stat.h
include/mpw/sys/file.h
include/mpw/sys/param.h
include/mpw/sys/resource.h
include/mpw/sys/stat.h
include/mpw/sys/time.h
include/mpw/sys/types.h
include/mpw/utime.h
include/mpw/varargs.h
include/nlm/ppc-ext.h
include/opcode/mn10200.h
include/opcode/tahoe.h
include/opcode/tic30.h
install-sh
makefile.vms
missing
mkinstalldirs
move-if-change
mpw-README
mpw-build.in
mpw-config.in
mpw-configure
mpw-install
setup.com
ylwrap
Delete:
djunpack.bat
libgloss/ChangeLog
libgloss/Makefile.in
libgloss/README
libgloss/arm/Makefile.in
libgloss/arm/coff-iq80310.specs
libgloss/arm/coff-pid.specs
libgloss/arm/coff-redboot.ld
libgloss/arm/coff-redboot.specs
libgloss/arm/configure
libgloss/arm/configure.in
libgloss/arm/elf-iq80310.specs
libgloss/arm/elf-pid.specs
libgloss/arm/elf-redboot.ld
libgloss/arm/elf-redboot.specs
libgloss/arm/redboot-crt0.S
libgloss/arm/redboot-syscalls.c
libgloss/arm/syscall.h
libgloss/close.c
libgloss/config/default.mh
libgloss/config/default.mt
libgloss/config/dos.mh
libgloss/config/mips.mt
libgloss/config/mn10200.mt
libgloss/config/mn10300.mt
libgloss/config/ppc.mh
libgloss/configure
libgloss/configure.in
libgloss/d30v/Makefile.in
libgloss/d30v/configure
libgloss/d30v/configure.in
libgloss/d30v/crt0.S
libgloss/d30v/inbyte.c
libgloss/d30v/outbyte.c
libgloss/d30v/syscalls.c
libgloss/debug.c
libgloss/debug.h
libgloss/doc/Makefile.in
libgloss/doc/configure
libgloss/doc/configure.in
libgloss/doc/porting.texi
libgloss/fr30/Makefile.in
libgloss/fr30/configure
libgloss/fr30/configure.in
libgloss/fr30/crt0.s
libgloss/fr30/syscalls.c
libgloss/frv/Makefile.in
libgloss/frv/configure
libgloss/frv/configure.in
libgloss/frv/crt0.S
libgloss/frv/fstat.c
libgloss/frv/getpid.c
libgloss/frv/isatty.c
libgloss/frv/kill.c
libgloss/frv/print.c
libgloss/frv/putnum.c
libgloss/frv/sbrk.c
libgloss/frv/sim-close.S
libgloss/frv/sim-exit.S
libgloss/frv/sim-inbyte.c
libgloss/frv/sim-lseek.S
libgloss/frv/sim-open.S
libgloss/frv/sim-read.S
libgloss/frv/sim-time.c
libgloss/frv/sim-unlink.S
libgloss/frv/sim-write.S
libgloss/frv/stat.c
libgloss/fstat.c
libgloss/getpid.c
libgloss/glue.h
libgloss/hp74x/Makefile.in
libgloss/hp74x/README
libgloss/hp74x/checksum.c
libgloss/hp74x/configure
libgloss/hp74x/configure.in
libgloss/hp74x/crt0.s
libgloss/hp74x/debugger.h
libgloss/hp74x/debugger.s
libgloss/hp74x/diagnose.h
libgloss/hp74x/hppa-defs.h
libgloss/hp74x/hppa.ld
libgloss/hp74x/io.c
libgloss/hp74x/iva_table.h
libgloss/hp74x/iva_table.s
libgloss/hp74x/pa_stub.c
libgloss/hp74x/test.c
libgloss/i386/Makefile.in
libgloss/i386/configure
libgloss/i386/configure.in
libgloss/i386/cygmon-crt0.S
libgloss/i386/cygmon-gmon.c
libgloss/i386/cygmon-gmon.h
libgloss/i386/cygmon-salib.c
libgloss/i386/cygmon-syscall.h
libgloss/i386/cygmon.ld
libgloss/i960/Makefile.in
libgloss/i960/asm.h
libgloss/i960/configure
libgloss/i960/configure.in
libgloss/i960/crt0.c
libgloss/i960/mon-read.c
libgloss/i960/mon-syscalls.S
libgloss/i960/mon-write.c
libgloss/i960/mon960.c
libgloss/i960/mon960.ld
libgloss/i960/syscall.h
libgloss/isatty.c
libgloss/kill.c
libgloss/libnosys/Makefile.in
libgloss/libnosys/acconfig.h
libgloss/libnosys/close.c
libgloss/libnosys/config.h.in
libgloss/libnosys/configure
libgloss/libnosys/configure.in
libgloss/libnosys/environ.c
libgloss/libnosys/execve.c
libgloss/libnosys/fork.c
libgloss/libnosys/fstat.c
libgloss/libnosys/getpid.c
libgloss/libnosys/gettod.c
libgloss/libnosys/isatty.c
libgloss/libnosys/kill.c
libgloss/libnosys/link.c
libgloss/libnosys/lseek.c
libgloss/libnosys/open.c
libgloss/libnosys/read.c
libgloss/libnosys/sbrk.c
libgloss/libnosys/stat.c
libgloss/libnosys/times.c
libgloss/libnosys/unlink.c
libgloss/libnosys/wait.c
libgloss/libnosys/warning.h
libgloss/libnosys/write.c
libgloss/lseek.c
libgloss/m32r/Makefile.in
libgloss/m32r/chmod.c
libgloss/m32r/close.c
libgloss/m32r/configure
libgloss/m32r/configure.in
libgloss/m32r/crt0.S
libgloss/m32r/eit.h
libgloss/m32r/eva-stub.ld
libgloss/m32r/eva.ld
libgloss/m32r/exit.c
libgloss/m32r/fstat.c
libgloss/m32r/getpid.c
libgloss/m32r/isatty.c
libgloss/m32r/kill.c
libgloss/m32r/lseek.c
libgloss/m32r/m32r-lib.c
libgloss/m32r/mon.specs
libgloss/m32r/open.c
libgloss/m32r/raise.c
libgloss/m32r/read.c
libgloss/m32r/sbrk.c
libgloss/m32r/stat.c
libgloss/m32r/trap0.S
libgloss/m32r/trapmon0.c
libgloss/m32r/unlink.c
libgloss/m32r/utime.c
libgloss/m32r/write.c
libgloss/m68hc11/Makefile.in
libgloss/m68hc11/configure
libgloss/m68hc11/configure.in
libgloss/m68hc11/crt0.S
libgloss/m68hc11/sci-inout.S
libgloss/m68hc11/sim-valid-m68hc11.ld
libgloss/m68hc11/sim-valid-m68hc12.ld
libgloss/m68hc11/syscalls.c
libgloss/m68k/Makefile.in
libgloss/m68k/README
libgloss/m68k/asm.h
libgloss/m68k/bcc.ld
libgloss/m68k/configure
libgloss/m68k/configure.in
libgloss/m68k/cpu32bug.S
libgloss/m68k/cpu32bug.h
libgloss/m68k/crt0.S
libgloss/m68k/dbug-exit.S
libgloss/m68k/dbug-inbyte.S
libgloss/m68k/dbug-outbyte.S
libgloss/m68k/dtor.C
libgloss/m68k/idp-inbyte.c
libgloss/m68k/idp-outbyte.c
libgloss/m68k/idp.ld
libgloss/m68k/idpgdb.ld
libgloss/m68k/leds.c
libgloss/m68k/leds.h
libgloss/m68k/mc68681reg.h
libgloss/m68k/mc68ec.c
libgloss/m68k/mvme-stub.c
libgloss/m68k/mvme.S
libgloss/m68k/mvme135-asm.S
libgloss/m68k/mvme135.ld
libgloss/m68k/mvme162.ld
libgloss/m68k/mvme162lx-asm.S
libgloss/m68k/sbc5204.ld
libgloss/m68k/sbc5206.ld
libgloss/m68k/sim-abort.c
libgloss/m68k/sim-crt0.S
libgloss/m68k/sim-errno.c
libgloss/m68k/sim-funcs.c
libgloss/m68k/sim-inbyte.c
libgloss/m68k/sim-print.c
libgloss/m68k/sim-sbrk.c
libgloss/m68k/sim.ld
libgloss/m68k/simulator.S
libgloss/m68k/test.c
libgloss/mcore/Makefile.in
libgloss/mcore/close.c
libgloss/mcore/cmb-exit.c
libgloss/mcore/cmb-inbyte.c
libgloss/mcore/cmb-outbyte.c
libgloss/mcore/configure
libgloss/mcore/configure.in
libgloss/mcore/crt0.S
libgloss/mcore/elf-cmb.ld
libgloss/mcore/elf-cmb.specs
libgloss/mcore/fstat.c
libgloss/mcore/getpid.c
libgloss/mcore/kill.c
libgloss/mcore/lseek.c
libgloss/mcore/open.c
libgloss/mcore/pe-cmb.ld
libgloss/mcore/pe-cmb.specs
libgloss/mcore/print.c
libgloss/mcore/putnum.c
libgloss/mcore/raise.c
libgloss/mcore/read.c
libgloss/mcore/sbrk.c
libgloss/mcore/stat.c
libgloss/mcore/syscalls.S
libgloss/mcore/unlink.c
libgloss/mcore/write.c
libgloss/mips/Makefile.in
libgloss/mips/array-io.c
libgloss/mips/array.ld
libgloss/mips/cfe.c
libgloss/mips/cfe.ld
libgloss/mips/cfe_api.c
libgloss/mips/cfe_api.h
libgloss/mips/cfe_api_int.h
libgloss/mips/cfe_error.h
libgloss/mips/cfe_prestart.S
libgloss/mips/cma101.c
libgloss/mips/configure
libgloss/mips/configure.in
libgloss/mips/crt0.S
libgloss/mips/crt0_cygmon.S
libgloss/mips/cygmon.c
libgloss/mips/ddb-kseg0.ld
libgloss/mips/ddb.ld
libgloss/mips/dtor.C
libgloss/mips/dve.ld
libgloss/mips/dvemon.c
libgloss/mips/entry.S
libgloss/mips/idt.ld
libgloss/mips/idt32.ld
libgloss/mips/idt64.ld
libgloss/mips/idtecoff.ld
libgloss/mips/idtmon.S
libgloss/mips/jmr3904-io.c
libgloss/mips/jmr3904app-java.ld
libgloss/mips/jmr3904app.ld
libgloss/mips/jmr3904dram-java.ld
libgloss/mips/jmr3904dram.ld
libgloss/mips/lsi.ld
libgloss/mips/lsi33k-stub.c
libgloss/mips/lsi33k-stub.h
libgloss/mips/lsipmon.S
libgloss/mips/nullmon.c
libgloss/mips/nullmon.ld
libgloss/mips/pmon.S
libgloss/mips/pmon.ld
libgloss/mips/regs.S
libgloss/mips/syscalls.c
libgloss/mips/test.c
libgloss/mips/vr4300.S
libgloss/mips/vr5xxx.S
libgloss/mn10200/Makefile.in
libgloss/mn10200/_exit.c
libgloss/mn10200/access.c
libgloss/mn10200/chmod.c
libgloss/mn10200/chown.c
libgloss/mn10200/close.c
libgloss/mn10200/configure
libgloss/mn10200/configure.in
libgloss/mn10200/creat.c
libgloss/mn10200/crt0.S
libgloss/mn10200/crt1.c
libgloss/mn10200/eval.ld
libgloss/mn10200/execv.c
libgloss/mn10200/execve.c
libgloss/mn10200/fork.c
libgloss/mn10200/fstat.c
libgloss/mn10200/getpid.c
libgloss/mn10200/gettime.c
libgloss/mn10200/isatty.c
libgloss/mn10200/kill.c
libgloss/mn10200/lseek.c
libgloss/mn10200/open.c
libgloss/mn10200/pipe.c
libgloss/mn10200/read.c
libgloss/mn10200/sbrk.c
libgloss/mn10200/sim.ld
libgloss/mn10200/stat.c
libgloss/mn10200/test.c
libgloss/mn10200/time.c
libgloss/mn10200/times.c
libgloss/mn10200/trap.S
libgloss/mn10200/trap.h
libgloss/mn10200/unlink.c
libgloss/mn10200/utime.c
libgloss/mn10200/wait.c
libgloss/mn10200/write.c
libgloss/mn10300/Makefile.in
libgloss/mn10300/_exit.c
libgloss/mn10300/access.c
libgloss/mn10300/chmod.c
libgloss/mn10300/chown.c
libgloss/mn10300/close.c
libgloss/mn10300/configure
libgloss/mn10300/configure.in
libgloss/mn10300/creat.c
libgloss/mn10300/crt0-eval.S
libgloss/mn10300/crt0.S
libgloss/mn10300/crt0_cygmon.S
libgloss/mn10300/crt0_redboot.S
libgloss/mn10300/crt1.c
libgloss/mn10300/cygmon.c
libgloss/mn10300/eval.ld
libgloss/mn10300/execv.c
libgloss/mn10300/execve.c
libgloss/mn10300/fork.c
libgloss/mn10300/fstat.c
libgloss/mn10300/getpid.c
libgloss/mn10300/gettime.c
libgloss/mn10300/isatty.c
libgloss/mn10300/kill.c
libgloss/mn10300/lseek.c
libgloss/mn10300/open.c
libgloss/mn10300/pipe.c
libgloss/mn10300/read.c
libgloss/mn10300/sbrk.c
libgloss/mn10300/sim.ld
libgloss/mn10300/stat.c
libgloss/mn10300/test.c
libgloss/mn10300/time.c
libgloss/mn10300/times.c
libgloss/mn10300/trap.S
libgloss/mn10300/trap.h
libgloss/mn10300/unlink.c
libgloss/mn10300/utime.c
libgloss/mn10300/wait.c
libgloss/mn10300/write.c
libgloss/open.c
libgloss/pa/Makefile.in
libgloss/pa/README
libgloss/pa/configure
libgloss/pa/configure.in
libgloss/pa/crt0.S
libgloss/pa/hp-milli.s
libgloss/pa/op50n-io.S
libgloss/pa/op50n.h
libgloss/pa/op50n.ld
libgloss/pa/op50nled.c
libgloss/pa/setjmp.S
libgloss/pa/test.c
libgloss/pa/w89k-io.c
libgloss/pa/w89k.h
libgloss/pa/w89k.ld
libgloss/print.c
libgloss/putnum.c
libgloss/read.c
libgloss/rs6000/Makefile.in
libgloss/rs6000/ads-exit.S
libgloss/rs6000/ads-io.c
libgloss/rs6000/ads.ld
libgloss/rs6000/configure
libgloss/rs6000/configure.in
libgloss/rs6000/crt0.S
libgloss/rs6000/mbx-exit.c
libgloss/rs6000/mbx-inbyte.c
libgloss/rs6000/mbx-outbyte.c
libgloss/rs6000/mbx-print.c
libgloss/rs6000/mbx.ld
libgloss/rs6000/mbx.specs
libgloss/rs6000/mcount.S
libgloss/rs6000/mvme-errno.c
libgloss/rs6000/mvme-exit.S
libgloss/rs6000/mvme-inbyte.S
libgloss/rs6000/mvme-outbyte.S
libgloss/rs6000/mvme-print.c
libgloss/rs6000/mvme-read.c
libgloss/rs6000/sim-abort.c
libgloss/rs6000/sim-crt0.S
libgloss/rs6000/sim-errno.c
libgloss/rs6000/sim-inbyte.c
libgloss/rs6000/sim-print.c
libgloss/rs6000/sim-sbrk.c
libgloss/rs6000/simulator.S
libgloss/rs6000/sol-cfuncs.c
libgloss/rs6000/sol-syscall.S
libgloss/rs6000/test.c
libgloss/rs6000/yellowknife.ld
libgloss/sbrk.c
libgloss/sh/sh1lcevb.ld
libgloss/sh/sh2lcevb.ld
libgloss/sh/sh3bb.ld
libgloss/sh/sh3lcevb.ld
libgloss/sparc/Makefile.in
libgloss/sparc/asm.h
libgloss/sparc/cache.c
libgloss/sparc/configure
libgloss/sparc/configure.in
libgloss/sparc/crt0-701.S
libgloss/sparc/crt0.S
libgloss/sparc/cygmon-crt0.S
libgloss/sparc/cygmon-salib.c
libgloss/sparc/cygmon-sparc64-ld.src
libgloss/sparc/cygmon.ld.src
libgloss/sparc/dtor.C
libgloss/sparc/elfsim.ld
libgloss/sparc/erc32-crt0.S
libgloss/sparc/erc32-io.c
libgloss/sparc/erc32-stub.c
libgloss/sparc/erc32.ld
libgloss/sparc/ex930.ld
libgloss/sparc/ex931.ld
libgloss/sparc/ex934.ld
libgloss/sparc/fixctors.c
libgloss/sparc/libsys/Makefile.in
libgloss/sparc/libsys/_exit.S
libgloss/sparc/libsys/cerror.S
libgloss/sparc/libsys/configure
libgloss/sparc/libsys/configure.in
libgloss/sparc/libsys/isatty.c
libgloss/sparc/libsys/libsys-crt0.S
libgloss/sparc/libsys/sbrk.S
libgloss/sparc/libsys/syscall.h
libgloss/sparc/libsys/syscallasm.h
libgloss/sparc/libsys/template.S
libgloss/sparc/libsys/template_r.S
libgloss/sparc/salib-701.c
libgloss/sparc/salib.c
libgloss/sparc/slite.h
libgloss/sparc/sparc-stub.c
libgloss/sparc/sparc86x.ld
libgloss/sparc/sparcl-stub.c
libgloss/sparc/sparclet-stub.c
libgloss/sparc/sparclite.h
libgloss/sparc/sysc-701.c
libgloss/sparc/syscalls.c
libgloss/sparc/test.c
libgloss/sparc/traps.S
libgloss/sparc/tsc701.ld
libgloss/stat.c
libgloss/syscall.h
libgloss/testsuite/Makefile.in
libgloss/testsuite/config/hppa.mt
libgloss/testsuite/config/m68k.mt
libgloss/testsuite/config/mips.mt
libgloss/testsuite/config/support.c
libgloss/testsuite/configure.in
libgloss/testsuite/lib/libgloss.exp
libgloss/testsuite/libgloss.all/.gdbinit
libgloss/testsuite/libgloss.all/Makefile.in
libgloss/testsuite/libgloss.all/array.c
libgloss/testsuite/libgloss.all/configure.in
libgloss/testsuite/libgloss.all/div.c
libgloss/testsuite/libgloss.all/double.c
libgloss/testsuite/libgloss.all/float.c
libgloss/testsuite/libgloss.all/func.c
libgloss/testsuite/libgloss.all/io.c
libgloss/testsuite/libgloss.all/math.c
libgloss/testsuite/libgloss.all/memory.c
libgloss/testsuite/libgloss.all/misc.c
libgloss/testsuite/libgloss.all/printf.c
libgloss/testsuite/libgloss.all/struct.c
libgloss/testsuite/libgloss.all/varargs.c
libgloss/testsuite/libgloss.all/varargs2.c
libgloss/unlink.c
libgloss/v850/sys/syscall.h
libgloss/wince/Makefile.am
libgloss/wince/Makefile.in
libgloss/wince/aclocal.m4
libgloss/wince/configure
libgloss/wince/configure.in
libgloss/write.c
libgloss/xstormy16/Makefile.in
libgloss/xstormy16/close.c
libgloss/xstormy16/configure
libgloss/xstormy16/configure.in
libgloss/xstormy16/crt0.s
libgloss/xstormy16/crt0_stub.s
libgloss/xstormy16/crti.s
libgloss/xstormy16/crtn.s
libgloss/xstormy16/eva_app.c
libgloss/xstormy16/eva_app.ld
libgloss/xstormy16/eva_stub.ld
libgloss/xstormy16/fstat.c
libgloss/xstormy16/getpid.c
libgloss/xstormy16/kill.c
libgloss/xstormy16/lseek.c
libgloss/xstormy16/open.c
libgloss/xstormy16/sim_high.ld
libgloss/xstormy16/sim_malloc_start.s
libgloss/xstormy16/stat.c
libgloss/xstormy16/syscalls.S
libgloss/xstormy16/syscalls.m4
libgloss/xstormy16/unlink.c
libgloss/xstormy16/xstormy16_stub.c
texinfo/texinfo.tex
winsup/cygserver/client.cc
winsup/cygserver/cygserver.cc
winsup/cygserver/ipc.h
winsup/cygserver/process.cc
winsup/cygserver/shm.cc
winsup/cygserver/shm.h
winsup/cygserver/transport.cc
winsup/cygserver/transport_pipes.cc
winsup/cygserver/transport_sockets.cc
Diffstat (limited to 'libgloss/mips/entry.S')
-rw-r--r-- | libgloss/mips/entry.S | 281 |
1 files changed, 0 insertions, 281 deletions
diff --git a/libgloss/mips/entry.S b/libgloss/mips/entry.S deleted file mode 100644 index 3630c552f..000000000 --- a/libgloss/mips/entry.S +++ /dev/null @@ -1,281 +0,0 @@ -/* entry.S - exception handler for emulating MIPS16 'entry' and 'exit' - pseudo-instructions. These instructions are generated by the compiler - when the -mentry switch is used. The instructions are not implemented - in the MIPS16 CPU; hence the exception handler that emulates them. - - This module contains the following public functions: - - * void __install_entry_handler(void); - - This function installs the entry/exit exception handler. It should - be called before executing any MIPS16 functions that were compiled with - -mentry, typically before main() is called. - - * void __remove_entry_handler(void); - - This function removes the entry/exit exception handler. It should - be called when the program is exiting, or when it is known that no - more MIPS16 functions compiled with -mentry will be called. -*/ - -#ifdef __mips16 -/* This file contains 32 bit assembly code. */ - .set nomips16 -#endif - -#include "regs.S" - -#define CAUSE_EXCMASK 0x3c /* mask for ExcCode in Cause Register */ -#define EXC_RI 0x28 /* 101000 == 10 << 2 */ - -/* Set DEBUG to 1 to enable recording of the last 16 interrupt causes. */ - -#define DEBUG 0 - -#if DEBUG - - .sdata -int_count: - .space 4 /* interrupt count modulo 16 */ -int_cause: - .space 4*16 /* last 16 interrupt causes */ -#endif - - .text - - .set noreorder /* Do NOT reorder instructions */ - - -/* __entry_exit_handler - the reserved instruction exception handler - that emulates the entry and exit instruction. */ - -__entry_exit_handler: - .set noat /* Do NOT use at register */ -#if DEBUG -/* Must avoid using 'la' pseudo-op because it uses gp register, which - may not have a good value in an exception handler. */ - -# la k0, int_count /* intcount = (intcount + 1) & 0xf */ - lui k0 ,%hi(int_count) - addiu k0, k0 ,%lo(int_count) - lw k1, (k0) - addiu k1, k1, 1 - andi k1, k1, 0x0f - sw k1, (k0) -# la k0, int_cause /* k1 = &int_cause[intcount] */ - lui k0, %hi(int_cause) - addiu k0, k0, %lo(int_cause) - sll k1, k1, 2 - add k1, k1, k0 -#endif - mfc0 k0, C0_CAUSE /* Fetch cause */ -#if DEBUG - sw k0, -4(k1) /* Save exception cause in buffer */ -#endif - mfc0 k1, C0_EPC /* Check for Reserved Inst. without */ - and k0, CAUSE_EXCMASK /* destroying any register */ - subu k0, EXC_RI - bne k0, zero, check_others /* Sorry, go do something else */ - - and k0, k1, 1 /* Check for TR mode (pc.0 = 1) */ - beq k0, zero, ri_in_32 /* Sorry, RI in 32-bit mode */ - xor k1, 1 - -/* Since we now are going to emulate or die, we can use all the T-registers */ -/* that MIPS16 does not use (at, t0-t8), and we don't have to save them. */ - - .set at /* Now it's ok to use at again */ - -#if 0 - j leave - rfe -#endif - - lhu t0, 0(k1) /* Fetch the offending instruction */ - xor t8, k1, 1 /* Prepare t8 for exit */ - and t1, t0, 0xf81f /* Check for entry/exit opcode */ - bne t1, 0xe809, other_ri - -deareg: and t1, t0, 0x0700 /* Isolate the three a-bits */ - srl t1, 6 /* Adjust them so x4 is applied */ - slt t2, t1, 17 /* See if this is the exit instruction */ - beqz t2, doexit - la t2, savea - subu t2, t1 - jr t2 /* Jump into the instruction table */ - rfe /* We run the rest in user-mode */ - - /* This is the entry instruction! */ - sw a3, 12(sp) /* 4: a0-a3 saved */ - sw a2, 8(sp) /* 3: a0-a2 saved */ - sw a1, 4(sp) /* 2: a0-a1 saved */ - sw a0, 0(sp) /* 1: a0 saved */ -savea: /* 0: No arg regs saved */ - -dera: and t1, t0, 0x0020 /* Isolate the save-ra bit */ - move t7, sp /* Temporary SP */ - beq t1, zero, desreg - subu sp, 32 /* Default SP adjustment */ - sw ra, -4(t7) - subu t7, 4 - -desreg: and t1, t0, 0x00c0 /* Isolate the two s-bits */ - beq t1, zero, leave - subu t1, 0x0040 - beq t1, zero, leave /* Only one to save... */ - sw s0, -4(t7) /* Do the first one */ - sw s1, -8(t7) /* Do the last one */ - -leave: jr t8 /* Exit to unmodified EPC */ - nop /* Urgh - the only nop!! */ - -doexf0: mtc1 v0,$f0 /* Copy float value */ - b doex2 - -doexf1: mtc1 v1,$f0 /* Copy double value */ - mtc1 v0,$f1 - b doex2 - -doexit: slt t2, t1, 21 - beq t2, zero, doexf0 - slt t2, t1, 25 - beq t2, zero, doexf1 - -doex2: and t1, t0, 0x0020 /* Isolate ra bit */ - beq t1, zero, dxsreg /* t1 holds ra-bit */ - addu t7, sp, 32 /* Temporary SP */ - lw ra, -4(t7) - subu t7, 4 - -dxsreg: and t1, t0, 0x00c0 /* Isolate the two s-bits */ - beq t1, zero, leavex - subu t1, 0x0040 - beq t1, zero, leavex /* Only one to save... */ - lw s0, -4(t7) /* Do the first one */ - lw s1, -8(t7) /* Do the last one */ - -leavex: jr ra /* Exit to ra */ - addu sp, 32 /* Clean up stack pointer */ - -/* Come here for exceptions we can't handle. */ - -ri_in_32: -other_ri: -check_others: /* call the previous handler */ - la k0,__previous - jr k0 - nop - -__exception_code: - .set noreorder - la k0, __entry_exit_handler -# lui k0, %hi(exception) -# addiu k0, k0, %lo(exception) - jr k0 - nop - .set reorder -__exception_code_end: - - .data -__previous: - .space (__exception_code_end - __exception_code) - .text - - -/* void __install_entry_handler(void) - - Install our entry/exit reserved instruction exception handler. -*/ - .ent __install_entry_handler - .globl __install_entry_handler -__install_entry_handler: - .set noreorder - mfc0 a0,C0_SR - nop - li a1,SR_BEV - and a1,a1,a0 - beq a1,$0,baseaddr - lui a0,0x8000 /* delay slot */ - lui a0,0xbfc0 - addiu a0,a0,0x0100 -baseaddr: - addiu a0,a0,0x080 /* a0 = base vector table address */ - li a1,(__exception_code_end - __exception_code) - la a2,__exception_code - la a3,__previous -/* there must be a better way of doing this???? */ -copyloop: - lw v0,0(a0) - sw v0,0(a3) - lw v0,0(a2) - sw v0,0(a0) - addiu a0,a0,4 - addiu a2,a2,4 - addiu a3,a3,4 - subu a1,a1,4 - bne a1,$0,copyloop - nop - j ra - nop - .set reorder - .end __install_entry_handler - - -/* void __remove_entry_handler(void); - - Remove our entry/exit reserved instruction exception handler. -*/ - - .ent __remove_entry_handler - .globl __remove_entry_handler -__remove_entry_handler: - .set noreorder - - mfc0 a0,C0_SR - nop - li a1,SR_BEV - and a1,a1,a0 - beq a1,$0,res_baseaddr - lui a0,0x8000 /* delay slot */ - lui a0,0xbfc0 - addiu a0,a0,0x0200 -res_baseaddr: - addiu a0,a0,0x0180 /* a0 = base vector table address */ - li a1,(__exception_code_end - __exception_code) - la a3,__previous - -/* there must be a better way of doing this???? */ -res_copyloop: - lw v0,0(a3) - sw v0,0(a0) - addiu a0,a0,4 - addiu a3,a3,4 - subu a1,a1,4 - bne a1,$0,res_copyloop - nop - j ra - nop - .set reorder - .end __remove_entry_handler - - -/* software_init_hook - install entry/exit handler and arrange to have it - removed at exit. This function is called by crt0.S. */ - - .text - .globl software_init_hook - .ent software_init_hook -software_init_hook: - .set noreorder - subu sp, sp, 8 /* allocate stack space */ - sw ra, 4(sp) /* save return address */ - jal __install_entry_handler /* install entry/exit handler */ - nop - lui a0, %hi(__remove_entry_handler) /* arrange for exit to */ - jal atexit /* de-install handler */ - addiu a0, a0, %lo(__remove_entry_handler) /* delay slot */ - lw ra, 4(sp) /* get return address */ - j ra /* return */ - addu sp, sp, 8 /* deallocate stack */ - .set reorder - .end software_init_hook |