annotate packages/hal/mips/arch/current/include/arch.inc @ 6:d376b777e2ce ecos-sw-1999-05-14

Merge from eCos master repository on 1999-05-14-19:27:43-BST
author jlarmour
date Fri, 14 May 1999 12:20:00 +0000
parents
children ece80412419a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_ARCH_INC
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_ARCH_INC
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
3 ##=============================================================================
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
4 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
5 ## arch.inc
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
6 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
7 ## MIPS assembler header file
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
8 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
9 ##=============================================================================
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
10 #####COPYRIGHTBEGIN####
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
11 #
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
12 # -------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
13 # The contents of this file are subject to the Cygnus eCos Public License
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
14 # Version 1.0 (the "License"); you may not use this file except in
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
15 # compliance with the License. You may obtain a copy of the License at
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
16 # http://sourceware.cygnus.com/ecos
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
17 #
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
18 # Software distributed under the License is distributed on an "AS IS"
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
19 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
20 # License for the specific language governing rights and limitations under
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
21 # the License.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
22 #
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
23 # The Original Code is eCos - Embedded Cygnus Operating System, released
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
24 # September 30, 1998.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
25 #
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
26 # The Initial Developer of the Original Code is Cygnus. Portions created
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
27 # by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
28 # -------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
29 #
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
30 #####COPYRIGHTEND####
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
31 ##=============================================================================
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
32 #######DESCRIPTIONBEGIN####
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
33 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
34 ## Author(s): nickg
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
35 ## Contributors: nickg
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
36 ## Date: 1997-10-16
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
37 ## Purpose: Architecture definitions.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
38 ## Description: This file contains various definitions and macros that are
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
39 ## useful for writing assembly code for the MIPS CPU family.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
40 ## Usage:
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
41 ## #include <cyg/hal/arch.inc>
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
42 ## ...
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
43 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
44 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
45 ######DESCRIPTIONEND####
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
46 ##
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
47 ##=============================================================================
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
48
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
49 #include <cyg/hal/mips.inc>
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
50
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
51 #include <cyg/hal/variant.inc>
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
52
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
53 ##-----------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
54 ## Set up the value for the initial status register
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
55
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
56 #ifndef INITIAL_SR
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
57
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
58 #if defined(CYG_HAL_STARTUP_RAM)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
59 # if defined(CYG_HAL_MIPS_SIM) || !defined(CYG_HAL_USE_ROM_MONITOR)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
60 # define INITIAL_SR 0x1000ff00 /* CP0 usable, Ints enabled */
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
61 # else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
62 # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
63 # endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
64 #elif defined(CYG_HAL_STARTUP_ROM)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
65 # define INITIAL_SR 0x1040ff00 /* as above + ROM vectors used */
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
66 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
67
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
68 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
69
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
70 ##-----------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
71 ## MIPS thread and interrupt saved state. This must match the layout of the
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
72 ## HAL_SavedRegisters in hal_arch.h. Do not change this without changing the
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
73 ## layout there, or viceversa.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
74
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
75 #ifdef CYGHWR_HAL_MIPS_64BIT
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
76 # define mips_regsize 8
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
77 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
78 # define mips_regsize 4
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
79 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
80
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
81 #if defined(CYGHWR_HAL_MIPS_FPU)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
82 # if defined(CYGHWR_HAL_MIPS_FPU_64BIT)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
83 # define mips_fpuregsize 8
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
84 # elif defined(CYGHWR_HAL_MIPS_FPU_32BIT)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
85 # define mips_fpuregsize 4
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
86 # else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
87 # error MIPS FPU register size not defined
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
88 # endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
89 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
90
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
91
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
92 #define mipsreg_regs 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
93 #define mipsreg_hi (mips_regsize*32)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
94 #define mipsreg_lo (mipsreg_hi+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
95 #ifdef CYGHWR_HAL_MIPS_FPU
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
96 # define mipsreg_fpureg (mipsreg_lo+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
97 # define mipsreg_fcr31 (mipsreg_fpureg+(mips_fpuregsize*32))
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
98 # define mipsreg_fppad (mipsreg_fcr31+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
99 # define mipsreg_vector (mipsreg_fppad+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
100 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
101 # define mipsreg_vector (mipsreg_lo+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
102 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
103 #define mipsreg_pc (mipsreg_vector+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
104 #define mipsreg_sr (mipsreg_pc+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
105 #define mipsreg_cache (mipsreg_sr+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
106 #define mipsreg_cause (mipsreg_cache+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
107 #define mipsreg_badvr (mipsreg_cause+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
108 #define mipsreg_prid (mipsreg_badvr+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
109 #define mipsreg_config (mipsreg_prid+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
110 #define mipsreg_size (mipsreg_config+mips_regsize)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
111
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
112 #define mips_exception_decrement (mipsreg_size*2)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
113
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
114 ##-----------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
115 ## Minimal stack frame size uses to call functions from asm.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
116
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
117 #define mips_stack_frame_size 32 // 4 (64 bit) args worth
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
118
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
119
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
120 ##-----------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
121 ## CPU specific macros. These provide a common assembler interface to
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
122 ## operations that may have CPU specific implementations on different
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
123 ## variants of the architecture.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
124
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
125 # Initialize CPU
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
126 .macro hal_cpu_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
127 mtc0 zero,cause # zero cause reg
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
128 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
129 la v0,INITIAL_SR # initialize status register
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
130 mtc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
131 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
132 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
133 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
134
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
135 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
136
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
137 # Enable interrupts
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
138 #ifdef CYG_HAL_MIPS_R3900
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
139 .macro hal_cpu_int_enable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
140 mfc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
141 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
142 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
143 ori v0,v0,0x0001 # set IE bit
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
144 mtc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
145 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
146 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
147 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
148 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
149 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
150 .macro hal_cpu_int_enable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
151 mfc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
152 la v1,0xFFFFFFF9
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
153 and v0,v0,v1 # clear EXL and ERL bits
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
154 ori v0,v0,0x0001 # set IE bit
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
155 mtc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
156 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
157 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
158 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
159 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
160 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
161
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
162
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
163 # Disable interrupts
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
164 .macro hal_cpu_int_disable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
165 mfc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
166 la v1,0xFFFFFFFE
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
167 and v0,v0,v1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
168 mtc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
169 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
170 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
171 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
172 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
173
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
174 # Merge the interrupt enable state of the status register in
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
175 # \sr with the current sr.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
176 #ifdef CYG_HAL_MIPS_R3900
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
177 #define HAL_SR_INT_MASK 0x00000001 // IEc only
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
178 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
179 #define HAL_SR_INT_MASK 0x00000007 // IE, EXL, ERL
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
180 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
181 .macro hal_cpu_int_merge sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
182 mfc0 v0,status # V0 = current SR
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
183 la v1,HAL_SR_INT_MASK # V1 = SR interrupt bits mask
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
184 and \sr,\sr,v1 # Isolate interrupt bits of \sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
185 nor v1,v1,zero # Invert mask
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
186 and v0,v0,v1 # V0 = current SR except int bits
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
187 or v0,v0,\sr # V0 = New SR
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
188 mtc0 v0,status # Return to SR
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
189 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
190
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
191 # Enable further exception processing, and disable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
192 # interrupt processing.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
193 #ifdef CYG_HAL_MIPS_R3900
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
194 .macro hal_cpu_except_enable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
195 hal_cpu_int_disable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
196 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
197 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
198 .macro hal_cpu_except_enable
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
199 mfc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
200 la v1,0xFFFFFFF0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
201 and v0,v0,v1 # clear EXL, ERL and IE bits
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
202 mtc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
203 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
204 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
205 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
206 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
207 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
208
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
209 # Return from exception.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
210 #ifdef CYG_HAL_MIPS_R3900
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
211 .macro hal_cpu_eret pc,sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
212 mtc0 \sr,status # Load status register
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
213 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
214 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
215 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
216 sync # settle things down
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
217 jr \pc # jump back to interrupted code
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
218 rfe # restore state (delay slot)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
219 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
220 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
221 .macro hal_cpu_eret pc,sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
222 mtc0 \pc,epc # put PC in EPC
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
223 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
224 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
225 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
226 mtc0 \sr,status # put SR back
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
227 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
228 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
229 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
230 sync # settle things down
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
231 eret # return
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
232 nop # just to be safe
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
233 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
234 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
235
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
236 ##-----------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
237 # Default MIPS interrupt decoding macros. This uses the basic interrupt
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
238 # support provided by CP0 in the cause and status registers. If there is
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
239 # a more complex external interrupt controller, or the default stuff is
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
240 # interpreted differently (as in the TX3904) then these macros will be
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
241 # overridden and CYGPKG_HAL_MIPS_INTC_DEFINED will be defined.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
242
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
243 #ifndef CYGPKG_HAL_MIPS_INTC_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
244
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
245 #ifndef CYGPKG_HAL_MIPS_INTC_INIT_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
246 # initialize all interrupts to disabled
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
247 .macro hal_intc_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
248 mfc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
249 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
250 lui v1,0xFFFF
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
251 ori v1,v1,0x00FF
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
252 and v0,v0,v1 # clear the IntMask bits
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
253 mtc0 v0,status
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
254 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
255 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
256 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
257 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
258 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
259
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
260 .macro hal_intc_decode vnum
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
261 mfc0 v0,cause # get cause register
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
262 nop # delay slot
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
263 srl v0,v0,10 # shift interrupt bits down
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
264 andi v0,v0,0x7f # isolate 6 interrupt bits
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
265 la v1,hal_intc_translation_table
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
266 add v0,v0,v1 # index into table
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
267 lb \vnum,0(v0) # pick up vector number
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
268 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
269
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
270 .macro hal_intc_decode_data
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
271 hal_intc_translation_table:
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
272 .byte 0, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
273 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
274 .byte 3, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
275 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
276 .byte 4, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
277 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
278 .byte 3, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
279 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
280 .byte 5, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
281 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
282 .byte 3, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
283 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
284 .byte 4, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
285 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
286 .byte 3, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
287 .byte 2, 0, 1, 0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
288 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
289 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
290
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
291 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
292 # FPU macros.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
293 # The MIPS floating point unit essentially operates in two modes. In the first
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
294 # it supplies 32 32bit FP registers that may be paired into 16 64 bit registers.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
295 # In the second it supplies 32 64bit registers. Which mode is to be used depends
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
296 # not only on the specific implementation in use, but also on the setting of the
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
297 # FR bit in the status register (if it is implemented) and on the expectations of
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
298 # the toolchain.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
299
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
300 #ifndef CYGPKG_HAL_MIPS_FPU_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
301
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
302 #ifdef CYGHWR_HAL_MIPS_FPU
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
303
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
304 #if defined(CYGHWR_HAL_MIPS_FPU_64BIT)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
305 #define sfpr sdc1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
306 #define lfpr ldc1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
307 #define CYG_HAL_MIPS_FPU_SR_INIT 0x24000000
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
308 #elif defined(CYGHWR_HAL_MIPS_FPU_32BIT)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
309 #define sfpr swc1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
310 #define lfpr lwc1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
311 #define CYG_HAL_MIPS_FPU_SR_INIT 0x20000000
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
312 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
313 #error MIPS FPU register size not defined
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
314 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
315
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
316 .macro hal_fpu_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
317 mfc0 v0,status # Get sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
318 la v1,0xDBFFFFFF # Clear bits to be changed
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
319 and v0,v0,v1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
320 la v1,CYG_HAL_MIPS_FPU_SR_INIT # Set the bits we want
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
321 or v0,v0,v1 # Set sr to required value
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
322 mtc0 v0,status # return to sr
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
323 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
324 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
325 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
326 ctc1 zero,$31 # clear Fp control reg
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
327 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
328 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
329
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
330 # Save the caller-saved registers as defined by the ABI.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
331 # These only really need saving during interrupts.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
332 .macro hal_fpu_save_caller regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
333 sfpr f0,(mipsreg_fpureg+0*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
334 sfpr f1,(mipsreg_fpureg+1*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
335 sfpr f2,(mipsreg_fpureg+2*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
336 sfpr f3,(mipsreg_fpureg+3*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
337 sfpr f4,(mipsreg_fpureg+4*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
338 sfpr f5,(mipsreg_fpureg+5*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
339 sfpr f6,(mipsreg_fpureg+6*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
340 sfpr f7,(mipsreg_fpureg+7*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
341 sfpr f8,(mipsreg_fpureg+8*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
342 sfpr f9,(mipsreg_fpureg+9*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
343 sfpr f10,(mipsreg_fpureg+10*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
344 sfpr f11,(mipsreg_fpureg+11*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
345 sfpr f12,(mipsreg_fpureg+12*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
346 sfpr f13,(mipsreg_fpureg+13*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
347 sfpr f14,(mipsreg_fpureg+14*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
348 sfpr f15,(mipsreg_fpureg+15*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
349 sfpr f16,(mipsreg_fpureg+16*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
350 sfpr f17,(mipsreg_fpureg+17*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
351 sfpr f18,(mipsreg_fpureg+18*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
352 sfpr f19,(mipsreg_fpureg+19*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
353 sfpr f31,(mipsreg_fpureg+31*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
354 cfc1 v0,$31
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
355 sw v0,mipsreg_fcr31(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
356 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
357
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
358 # Save the callee-saved registers as defined by the ABI.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
359 # These are the only registers that need to be saved
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
360 # across thread switches.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
361 .macro hal_fpu_save_callee regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
362 sfpr f20,(mipsreg_fpureg+20*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
363 sfpr f21,(mipsreg_fpureg+21*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
364 sfpr f22,(mipsreg_fpureg+22*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
365 sfpr f23,(mipsreg_fpureg+23*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
366 sfpr f24,(mipsreg_fpureg+24*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
367 sfpr f25,(mipsreg_fpureg+25*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
368 sfpr f26,(mipsreg_fpureg+26*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
369 sfpr f27,(mipsreg_fpureg+27*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
370 sfpr f28,(mipsreg_fpureg+28*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
371 sfpr f29,(mipsreg_fpureg+29*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
372 sfpr f30,(mipsreg_fpureg+30*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
373 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
374
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
375 # General macro to save everything
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
376 .macro hal_fpu_save regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
377 hal_fpu_save_callee \regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
378 hal_fpu_save_caller \regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
379 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
380
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
381 # Reload the caller-saved registers.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
382 .macro hal_fpu_load_caller regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
383 lw v0,mipsreg_fcr31(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
384 ctc1 v0,$31
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
385 lfpr f0,(mipsreg_fpureg+0*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
386 lfpr f1,(mipsreg_fpureg+1*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
387 lfpr f2,(mipsreg_fpureg+2*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
388 lfpr f3,(mipsreg_fpureg+3*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
389 lfpr f4,(mipsreg_fpureg+4*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
390 lfpr f5,(mipsreg_fpureg+5*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
391 lfpr f6,(mipsreg_fpureg+6*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
392 lfpr f7,(mipsreg_fpureg+7*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
393 lfpr f8,(mipsreg_fpureg+8*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
394 lfpr f9,(mipsreg_fpureg+9*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
395 lfpr f10,(mipsreg_fpureg+10*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
396 lfpr f11,(mipsreg_fpureg+11*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
397 lfpr f12,(mipsreg_fpureg+12*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
398 lfpr f13,(mipsreg_fpureg+13*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
399 lfpr f14,(mipsreg_fpureg+14*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
400 lfpr f15,(mipsreg_fpureg+15*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
401 lfpr f16,(mipsreg_fpureg+16*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
402 lfpr f17,(mipsreg_fpureg+17*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
403 lfpr f18,(mipsreg_fpureg+18*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
404 lfpr f19,(mipsreg_fpureg+19*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
405 lfpr f31,(mipsreg_fpureg+31*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
406 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
407
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
408 # Reload the callee-saved registers.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
409 .macro hal_fpu_load_callee regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
410 lfpr f20,(mipsreg_fpureg+20*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
411 lfpr f21,(mipsreg_fpureg+21*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
412 lfpr f22,(mipsreg_fpureg+22*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
413 lfpr f23,(mipsreg_fpureg+23*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
414 lfpr f24,(mipsreg_fpureg+24*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
415 lfpr f25,(mipsreg_fpureg+25*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
416 lfpr f26,(mipsreg_fpureg+26*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
417 lfpr f27,(mipsreg_fpureg+27*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
418 lfpr f28,(mipsreg_fpureg+28*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
419 lfpr f29,(mipsreg_fpureg+29*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
420 lfpr f30,(mipsreg_fpureg+30*mips_fpuregsize)(\regs)
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
421 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
422
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
423 # Reload everything.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
424 .macro hal_fpu_load regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
425 hal_fpu_load_caller \regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
426 hal_fpu_load_callee \regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
427 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
428 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
429
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
430 # Default macros for non-fpu implementations
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
431
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
432 .macro hal_fpu_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
433 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
434
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
435 .macro hal_fpu_save regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
436 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
437
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
438 .macro hal_fpu_save_caller regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
439 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
440
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
441 .macro hal_fpu_save_callee regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
442 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
443
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
444 .macro hal_fpu_load_caller regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
445 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
446
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
447 .macro hal_fpu_load_callee regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
448 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
449
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
450 .macro hal_fpu_load regs
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
451 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
452
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
453 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
454
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
455 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
456
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
457 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
458 # MMU macros.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
459
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
460 #ifndef CYGPKG_HAL_MIPS_MMU_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
461
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
462 .macro hal_mmu_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
463 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
464
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
465 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
466
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
467 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
468 # MEMC macros.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
469
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
470 #ifndef CYGPKG_HAL_MIPS_MEMC_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
471
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
472 .macro hal_memc_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
473 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
474
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
475 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
476
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
477 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
478 # Cache macros.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
479
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
480 #ifndef CYGPKG_HAL_MIPS_CACHE_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
481
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
482 #ifdef CYG_HAL_MIPS_R3900
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
483 .macro hal_cache_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
484 mfc0 v0,config # disable cache in config register
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
485 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
486 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
487 la v1,0xffffffcf
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
488 and v0,v0,v1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
489 mtc0 v0,config
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
490 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
491 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
492 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
493 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
494 #else
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
495 .macro hal_cache_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
496 mfc0 v0,config0 # disable Kseg0 caching in config0 register
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
497 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
498 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
499 la v1,0xfffffff8
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
500 and v0,v0,v1
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
501 ori v0,v0,2
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
502 mtc0 v0,config0
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
503 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
504 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
505 nop
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
506 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
507 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
508
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
509 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
510
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
511 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
512 # Diagnostics macros.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
513
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
514 #ifndef CYGPKG_HAL_MIPS_DIAG_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
515
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
516 .macro hal_diag_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
517 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
518
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
519 .macro hal_diag_excpt_start
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
520 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
521
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
522 .macro hal_diag_intr_start
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
523 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
524
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
525 .macro hal_diag_restore
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
526 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
527 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
528
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
529 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
530 # Timer initialization.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
531
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
532 #ifndef CYGPKG_HAL_MIPS_TIMER_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
533
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
534 .macro hal_timer_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
535 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
536
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
537 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
538
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
539 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
540 # Monitor initialization.
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
541
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
542 #ifndef CYGPKG_HAL_MIPS_MON_DEFINED
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
543
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
544 .macro hal_mon_init
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
545 .endm
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
546
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
547 #endif
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
548
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
549 #------------------------------------------------------------------------------
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
550 #endif // ifndef CYGONCE_HAL_ARCH_INC
d376b777e2ce Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
diff changeset
551 # end of arch.inc