1/* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 1994 - 1999 by Ralf Baechle 7 * Copyright (C) 1999 Silicon Graphics 8 * 9 * Low level exception handling 10 */ 11#include <asm/asm.h> 12#include <asm/regdef.h> 13#include <asm/fpregdef.h> 14#include <asm/mipsregs.h> 15#include <asm/stackframe.h> 16 17 .macro __build_clear_none 18 .endm 19 20 .macro __build_clear_sti 21 STI 22 .endm 23 24 .macro __build_clear_cli 25 CLI 26 .endm 27 28 .macro __build_clear_fpe 29 cfc1 a1, fcr31 30 li a2, ~(0x3f << 12) 31 and a2, a1 32 ctc1 a2, fcr31 33 STI 34 .endm 35 36 .macro __build_clear_ade 37 dmfc0 t0, CP0_BADVADDR 38 sd t0, PT_BVADDR(sp) 39 KMODE 40 .endm 41 42 .macro __BUILD_silent exception 43 .endm 44 45 /* Gas tries to parse the PRINT argument as a string containing 46 string escapes and emits bogus warnings if it believes to 47 recognize an unknown escape code. So make the arguments 48 start with an n and gas will believe \n is ok ... */ 49 .macro __BUILD_verbose nexception 50 ld a1, PT_EPC(sp) 51 PRINT("Got \nexception at %016lx\012") 52 .endm 53 54 .macro __BUILD_count exception 55 .set reorder 56 ld t0,exception_count_\exception 57 daddiu t0, 1 58 sd t0,exception_count_\exception 59 .set noreorder 60 .comm exception_count\exception, 8, 8 61 .endm 62 63 .macro BUILD_HANDLER exception handler clear verbose 64 .align 5 65 NESTED(handle_\exception, PT_SIZE, sp) 66 .set noat 67 SAVE_ALL 68 __BUILD_clear_\clear 69 .set at 70 __BUILD_\verbose \exception 71 move a0, sp 72 jal do_\handler 73 j ret_from_exception 74 nop 75 END(handle_\exception) 76 .endm 77