Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/m68k/mvme135-asm.S')
-rw-r--r--libgloss/m68k/mvme135-asm.S397
1 files changed, 0 insertions, 397 deletions
diff --git a/libgloss/m68k/mvme135-asm.S b/libgloss/m68k/mvme135-asm.S
deleted file mode 100644
index 1722c1804..000000000
--- a/libgloss/m68k/mvme135-asm.S
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * mvme135-asm.S -- assembler routines for the MVME stub.
- *
- * This code was pulled out of mvme135-stub.c by Ian Taylor so that I
- * could handle different register and label prefixes in a sensible
- * way.
- */
-
-/****************************************************************************
-
- THIS SOFTWARE IS NOT COPYRIGHTED
-
- HP offers the following for use in the public domain. HP makes no
- warranty with regard to the software or it's performance and the
- user accepts the software "AS IS" with all faults.
-
- HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
- TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-****************************************************************************/
-
-#include "asm.h"
-
- .title "mvme135-asm.S for m68k"
-
- .globl SYM (registers)
- .globl SYM (lastFrame)
- .globl SYM (superStack)
- .globl SYM (exceptionHook)
- .globl SYM (_returnFromException)
- .globl SYM (stackPtr)
- .globl SYM (handle_exception)
- .globl SYM (exceptionSize)
- .globl SYM (exceptionHandler)
-
-.text
-
-
-/*
- * Create a new exception vector table and populates it. Vectors from the
- * boot monitor are spliced in so I/O and the abort button will continue
- * to work. We also use the monitor's generalized vector for anything the
- * debugger doesn't want.
- */
- .global SYM (setup_vectors)
-SYM (setup_vectors):
- link fp, IMM (-8)
- /* copy monitor vector table */
-
- movecl vbr, a0
- lea SYM (vbr_table), a1
- movel 0x8(a0), d0 /* get generalized vector */
- movew IMM (0x3fc), d1 /* load vector count */
-
-loop: /* fill table to gen. vector */
- movel d0, (a1,d1)
- subqw IMM (4), d1
- bne loop
-
- movel 0x10(a0), 0x10(a1) /* breakpoint */
- movel 0x24(a0), 0x24(a1) /* trace */
- movel 0xbc(a0), 0xbc(a1) /* system call */
-
- /* add stub vectors to table */
- movel SYM (_catchException), 0x8(a1) /* vector = 2, Access Fault */
- movel SYM (_catchException), 0xc(a1) /* vector = 3, Address Error */
- movel SYM (_catchException), 0x10(a1) /* vector = 4, Illegal instruction */
- movel SYM (_catchException), 0x14(a1) /* vector = 5, divide by 0 */
- movel SYM (_catchException), 0x18(a1) /* vector = 6, chk, chk2 instruction */
- movel SYM (_catchException), 0x1c(a1) /* vector = 7, ftrap, trap, trapv ins */
- movel SYM (_catchException), 0x20(a1) /* vector = 8, priviledge violation */
- movel SYM (_catchException), 0x24(a1) /* vector = 9, trace */
- movel SYM (_catchException), 0x28(a1) /* vector = 10, Aline opcode */
- movel SYM (_catchException), 0x2c(a1) /* vector = 11, fline opcode */
- movel SYM (_catchException), 0x30(a1) /* vector = 12, reserved */
- movel SYM (_catchException), 0x34(a1) /* vector = 13, coprocessor protocol violation */
- movel SYM (_catchException), 0x38(a1) /* vector = 14, format error */
- movel SYM (_catchException), 0x3c(a1) /* vector = 15, unitialized interupt */
-
- /* unassigned, reserved */
- movel SYM (_catchException), 0x40(a1) /* vector = 16 */
- movel SYM (_catchException), 0x44(a1) /* vector = 17 */
- movel SYM (_catchException), 0x48(a1) /* vector = 18 */
- movel SYM (_catchException), 0x4c(a1) /* vector = 19 */
- movel SYM (_catchException), 0x50(a1) /* vector = 20 */
- movel SYM (_catchException), 0x54(a1) /* vector = 21 */
- movel SYM (_catchException), 0x58(a1) /* vector = 22 */
- movel SYM (_catchException), 0x5c(a1) /* vector = 23 */
-
- movel SYM (_catchException), 0x84(a1) /* vector = 33, breakpoint, trap #1 */
- movel SYM (_catchException), 0xa0(a1) /* vector = 40 , trap #8*/
-
- /* floating point traps */
- movel SYM (_catchException), 0xc0(a1) /* vector = 48 */
- movel SYM (_catchException), 0xc4(a1) /* vector = 49 */
- movel SYM (_catchException), 0xc8(a1) /* vector = 50 */
- movel SYM (_catchException), 0xcc(a1) /* vector = 51 */
- movel SYM (_catchException), 0xd0(a1) /* vector = 52 */
- movel SYM (_catchException), 0xd4(a1) /* vector = 53 */
- movel SYM (_catchException), 0xd8(a1) /* vector = 54 */
- movel SYM (_catchException), 0xdc(a1) /* vector = 55 */
- movel SYM (_catchException), 0xe0(a1) /* vector = 56 */
- movel SYM (_catchException), 0xe4(a1) /* vector = 57 */
- movel SYM (_catchException), 0xe8(a1) /* vector = 58 */
-
-/*** movel &__debug_level7, 0x7c(a1) /* level7 interupt vector */
-
- movecl a1, vbr /* change VBR to new table */
- unlk fp
- rts
-/*
- * exceptionHandler -- sets up exception vector table.
- * First arg is an integer vector number
- * Second arg is the function pointer for the vector
- */
-SYM (exceptionHandler):
-# link a6, IMM (-8)
-#str1: .ascii "Exception Handler Called\n"
-# moveal IMM (str1), a0
-# moveal IMM (str1+25), a1
-# jsr SYM (outln)
-
-# unlk a6
- rts
-
-/* this never gets called */
- movel fp@(8), d0 /* get vector number */
- movel fp@(12), a0 /* get function address */
- moveal &SYM (vbr_table), a1 /* FIXME */
-
- addl d0, d0
- addl d0, d0
-
- addal d0, a1
- movel a0, (a1)
-
- movecl a1, vbr
- unlk a6
- rts
-
-.globl SYM (return_to_super)
-SYM (return_to_super):
- movel SYM (registers)+60,sp /* get new stack pointer */
- movel SYM (lastFrame),a0 /* get last frame info */
- bra return_to_any
-
-.globl SYM (return_to_user)
-SYM (return_to_user):
- movel SYM (registers)+60,a0 /* get usp */
- movel a0,usp /* set usp */
- movel SYM (superStack),sp /* get original stack pointer */
-
-return_to_any:
- movel SYM (lastFrame),a0 /* get last frame info */
- movel a0@+,SYM (lastFrame) /* link in previous frame */
- addql IMM (8),a0 /* skip over pc, vector#*/
- movew a0@+,d0 /* get # of words in cpu frame */
- addw d0,a0 /* point to end of data */
- addw d0,a0 /* point to end of data */
- movel a0,a1
-/* copy the stack frame */
- subql IMM (1),d0
-copyUserLoop:
- movew a1@-,sp@-
- dbf d0,copyUserLoop
-
-#ifdef __HAVE_68881__
- fmoveml SYM (registers)+168,fpcr/fpsr/fpi
- fmovemx SYM (registers)+72,fp0-fp7
- cmpl IMM (-1),a0@ /* skip frestore flag set ? */
- beq skip_frestore
- frestore a0@+
-skip_frestore:
-#endif
-
- moveml SYM (registers),d0-d7/a0-a6
- rte /* pop and go! */
-
-
-/* this function is called immediately when a level 7 interrupt occurs */
-/* if the previous interrupt level was 7 then we're already servicing */
-/* this interrupt and an rte is in order to return to the debugger. */
-/* For the 68000, the offset for sr is 6 due to the jsr return address */
-.text
-.globl SYM (_debug_level7)
-SYM (_debug_level7):
- movew d0,sp@-
-#ifdef mc68020
- movew sp@(2),d0
-#else
- movew sp@(6),d0
-#endif
- andiw IMM (0x700),d0
- cmpiw IMM (0x700),d0
- beq _already7
- movew sp@+,d0
- bra SYM (_catchException)
-_already7:
- movew sp@+,d0
-#ifndef mc68020
- lea sp@(4),sp /* pull off 68000 return address */
-#endif
- rte
-
-#ifdef mc68020
-/* This function is called when a 68020 exception occurs. It saves
- * all the cpu and fpcp regs in the _registers array, creates a frame on a
- * linked list of frames which has the cpu and fpcp stack frames needed
- * to properly restore the context of these processors, and invokes
- * an exception handler (remcom_handler).
- *
- * stack on entry: stack on exit:
- * N bytes of junk exception # MSWord
- * Exception Format Word exception # MSWord
- * Program counter LSWord
- * Program counter MSWord
- * Status Register
- *
- *
- */
-
-.text
-.globl SYM (_catchException)
-SYM (_catchException):
-
- oriw IMM (0x0700),sr /* Disable interrupts */
-
- moveml d0-d7/a0-a6,SYM (registers) /* save registers */
- movel SYM (lastFrame),a0 /* last frame pointer */
-
-#ifdef __HAVE_68881__
- /* do an fsave, then remember the address to begin a restore from */
- fsave a0@-
- fmovemx fp0-fp7, SYM (registers)+72
- fmoveml fpcr/fpsr/fpi, SYM (registers)+168
-#endif
-
- lea SYM (registers),a5 /* get address of registers */
- movew sp@,d1 /* get status register */
- movew d1,a5@(66) /* save sr */
- movel sp@(2),a4 /* save pc in a4 for later use */
- movel a4,a5@(68) /* save pc in _regisers[] */
-
-/* figure out how many bytes in the stack frame */
- movew sp@(6),d0 /* get '020 exception format */
- movew d0,d2 /* make a copy of format word */
- andiw IMM (0xf000),d0 /* mask off format type */
- rolw IMM (5),d0 /* rotate into the low byte *2 */
- lea SYM (exceptionSize),a1
- addw d0,a1 /* index into the table */
- movew a1@,d0 /* get number of words in frame */
- movew d0,d3 /* save it */
- subw d0,a0 /* adjust save pointer */
- subw d0,a0 /* adjust save pointer(bytes) */
- movel a0,a1 /* copy save pointer */
- subql IMM (1),d0 /* predecrement loop counter */
-
-/* copy the frame */
-
-saveFrameLoop:
- movew sp@+,a1@+
- dbf d0,saveFrameLoop
-
-/* now that the stack has been clenaed,
- * save the a7 in use at time of exception
- */
- movel sp,SYM (superStack) /* save supervisor sp */
- andiw IMM (0x2000),d1 /* were we in supervisor mode ? */
- beq userMode
- movel a7,a5@(60) /* save a7 */
- bra a7saveDone
-userMode:
- movel usp,a1
- movel a1,a5@(60) /* save user stack pointer */
-a7saveDone:
-
-
-/* save size of frame */
- movew d3,a0@-
-
-/* compute exception number */
- andl IMM (0xfff),d2 /* mask off vector offset */
- lsrw IMM (2),d2 /* divide by 4 to get vect num */
- movel d2,a0@- /* save it */
-
-/* save pc causing exception */
- movel a4,a0@-
-
-/* save old frame link and set the new value*/
- movel SYM (lastFrame),a1 /* last frame pointer */
- movel a1,a0@- /* save pointer to prev frame */
- movel a0,SYM (lastFrame)
-
- movel d2,sp@- /* push exception num */
-#ifdef TMP_HACK
- movel SYM (exceptionHook),a0 /* get address of handler */
- jbsr a0@ /* and call it */
-#else
- jbsr SYM (remcomHandler)
-#endif
- clrl sp@ /* replace exception num parm with frame ptr */
- jbsr SYM (_returnFromException) /* jbsr, but never returns */
-
-#else /* mc68000 */
-
-/* This function is called when an exception occurs. It translates the
- * return address found on the stack into an exception vector # which
- * is then handled by either handle_exception or a system handler.
- * _catchException provides a front end for both.
- *
- * stack on entry: stack on exit:
- * Program counter MSWord exception # MSWord
- * Program counter LSWord exception # MSWord
- * Status Register
- * Return Address MSWord
- * Return Address LSWord
- */
-.text
-.globl SYM (_catchException)
-SYM (_catchException):
-
- oriw IMM (0x0700),sr /* Disable interrupts */
-
- moveml d0-d7/a0-a6,SYM (registers) /* save registers */
- movel SYM (lastFrame),a0 /* last frame pointer */
-
-#ifdef __HAVE_68881__
- /* do an fsave, then remember the address to begin a restore from */
- fsave a0@-
- fmovemx fp0-fp7, SYM (registers)+72
- fmoveml fpcr/fpsr/fpi, SYM (registers)+168
-#endif
-
- lea SYM (registers),a5 /* get address of registers */
- movel sp@+,d2 /* pop return address */
- addl IMM (1530),d2 /* convert return addr to */
- divs IMM (6),d2 /* exception number */
- extl d2
-
- moveql IMM (3),d3 /* assume a three word frame */
-
- cmpiw IMM (3),d2 /* bus error or address error ? */
- bgt normal /* if >3 then normal error */
- movel sp@+,a0@- /* copy error info to frame buff*/
- movel sp@+,a0@- /* these are never used */
- moveql IMM (7),d3 /* this is a 7 word frame */
-
-normal:
- movew sp@+,d1 /* pop status register */
- movel sp@+,a4 /* pop program counter */
- movew d1,a5@(66) /* save sr */
- movel a4,a5@(68) /* save pc in _regisers[] */
- movel a4,a0@- /* copy pc to frame buffer */
- movew d1,a0@- /* copy sr to frame buffer */
-
- movel sp,SYM (superStack) /* save supervisor sp */
-
- andiw IMM (0x2000),d1 /* were we in supervisor mode ? */
- beq userMode
- movel a7,a5@(60) /* save a7 */
- bra saveDone
-userMode:
- movel usp,a1 /* save user stack pointer */
- movel a1,a5@(60) /* save user stack pointer */
-saveDone:
-
- movew d3,a0@- /* push frame size in words */
- movel d2,a0@- /* push vector number */
- movel a4,a0@- /* push exception pc */
-
-/* save old frame link and set the new value */
- movel SYM (lastFrame),a1 /* last frame pointer */
- movel a1,a0@- /* save pointer to prev frame */
- movel a0,SYM (lastFrame)
-
- movel d2,sp@- /* push exception num */
- movel SYM (exceptionHook),a0 /* get address of handler */
- jbsr a0@ /* and call it */
- clrl sp@ /* replace exception num parm with frame ptr */
- jbsr SYM (_returnFromException) /* jbsr, but never returns */
-
-#endif /* m68000 */
-
-/*
- * remcomHandler is a front end for handle_exception. It moves the
- * stack pointer into an area reserved for debugger use in case the
- * breakpoint happened in supervisor mode.
- */
-.globl SYM (remcomHandler)
-SYM (remcomHandler):
- addl IMM (4),sp /* pop off return address */
- movel sp@+,d0 /* get the exception number */
- movel SYM (stackPtr),sp /* move to remcom stack area */
- movel d0,sp@- /* push exception onto stack */
- jbsr SYM (handle_exception) /* this never returns */
- rts /* return */