annotate packages/hal/i386/arch/current/include/arch.inc @ 208:e0c0827131d1 ecos

Merge from eCos master repository on 2002-05-20-20:11:54-BST
author jlarmour
date Mon, 20 May 2002 22:19:26 +0000
parents 8147f1c99f15
children d2c90368aeef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_ARCH_INC
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_ARCH_INC
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
3 ##=============================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
4 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
5 ## arch.inc
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
6 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
7 ## i386 assembler header file
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
8 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
9 ##=============================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
10 #####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
11 # -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
12 # This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
13 # Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
14 #
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
15 # eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
16 # the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
17 # Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
18 #
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
19 # eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
20 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
21 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
22 # for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
23 #
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
24 # You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
25 # with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
26 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
27 #
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
28 # As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
29 # or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
30 # with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
31 # by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
32 # License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
33 # in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
34 #
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
35 # This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
36 # this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
37 #
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
38 # Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
39 # at http://sources.redhat.com/ecos/ecos-license
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
40 # -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
41 #####ECOSGPLCOPYRIGHTEND####
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
42 ##=============================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
43 #######DESCRIPTIONBEGIN####
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
44 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
45 ## Author(s): nickg
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
46 ## Contributors: nickg, pjo
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
47 ## Date: 1999-10-15
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
48 ## Purpose: Architecture definitions.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
49 ## Description: This file contains various definitions and macros that are
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
50 ## useful for writing assembly code for the i386 CPU family.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
51 ## Usage:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
52 ## #include <cyg/hal/arch.inc>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
53 ## ...
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
54 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
55 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
56 ######DESCRIPTIONEND####
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
57 ##
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
58 ##=============================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
59
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
60 #include <cyg/hal/i386.inc>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
61
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
62 #include <cyg/hal/variant.inc>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
63
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
64 ##-----------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
65 ## CPU specific macros. These provide a common assembler interface to
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
66 ## operations that may have CPU specific implementations on different
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
67 ## variants of the architecture.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
68
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
69 #ifndef CYGPKG_HAL_I386_CPU_INIT_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
70 # Initialize CPU
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
71 .macro hal_cpu_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
72 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
73 #endif /* !CYGPKG_HAL_I386_CPU_INIT_DEFINED */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
74
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
75 ##-----------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
76
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
77 #ifndef CYGPKG_HAL_I386_INTC_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
78
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
79 #ifndef CYGPKG_HAL_I386_INTC_INIT_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
80 # initialize all interrupts to disabled
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
81 .macro hal_intc_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
82 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
83 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
84
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
85 .macro hal_intc_decode vnum
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
86 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
87
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
88 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
89
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
90 #------------------------------------------------------------------------------
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
91 # SMP support
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
92
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
93 #ifdef CYGPKG_HAL_SMP_SUPPORT
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
94
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
95 .macro hal_smp_init
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
96 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
97 movl $0,cyg_hal_smp_vsr_sync_flag
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
98 #endif
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
99 .endm
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
100
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
101 // Put CPU number in register
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
102 .macro hal_smp_cpu reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
103 movl cyg_hal_smp_local_apic,\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
104 movl 0x20(\reg),\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
105 shrl $24,\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
106 .endm
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
107
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
108 #else
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
109
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
110 .macro hal_smp_init
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
111 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
112
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
113 .macro hal_smp_cpu reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
114 movl $0,\reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
115 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
116
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
117 #endif
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
118
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
119 #------------------------------------------------------------------------------
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
120 # Stack switching macros
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
121
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
122 #ifndef CYG_HAL_I386_INTSTACK_MACROS_DEFINED
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
123
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
124 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
125
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
126 #ifdef CYGPKG_HAL_SMP_SUPPORT
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
127
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
128 .macro hal_init_istack reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
129 hal_smp_cpu %ebx
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
130 movl $__interrupt_stack_vector,%ecx
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
131 movl $CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE,%eax
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
132 imull %ebx,%eax
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
133 addl $__interrupt_stack_first,%eax
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
134 movl %eax,0(%ecx,%ebx,4)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
135 movl $CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE,\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
136 addl %eax,\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
137 .endm
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
138
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
139 .macro hal_load_istack reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
140 hal_load_istack_base \reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
141 addl $CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE,\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
142 .endm
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
143
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
144 .macro hal_load_istack_base reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
145 hal_smp_cpu \reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
146 movl $__interrupt_stack_vector,%eax
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
147 movl 0(%eax,\reg,4),\reg
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
148 .endm
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
149
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
150 #else // CYGPKG_HAL_SMP_SUPPORT
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
151 .macro hal_init_istack reg,tr
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
152 movl $__interrupt_stack,\reg // Load interrupt stack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
153 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
154
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
155 .macro hal_load_istack reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
156 movl $__interrupt_stack,\reg // Load interrupt stack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
157 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
158
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
159 .macro hal_load_istack_base reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
160 movl $__interrupt_stack_base,\reg // Load interrupt stack base
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
161 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
162
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 200
diff changeset
163 #endif // CYGPKG_HAL_SMP_SUPPORT
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
164
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
165 .macro hal_to_intstack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
166 hal_load_istack_base %ebx // EBX = stack base
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
167 movl %ebx,%eax
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
168 addl $CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE,%eax
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
169 cmpl %ebx,%ebp # compare SP with istack base
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
170 jb 1f # if sp < istack base, switch
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
171 cmpl %eax,%ebp # compare SP with istack top
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
172 jbe 2f # if sp < istack top, dont switch
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
173 1:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
174 movl %eax,%esp # move on to new stack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
175 2:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
176 pushl %ebp # Save old SP on new stack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
177 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
178
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
179 .macro hal_from_intstack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
180 popl %esp # pop old SP from stack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
181 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
182
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
183 #define CYG_HAL_I386_INTSTACK_MACROS_DEFINED
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
184
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
185
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
186 #else // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
187
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
188 .macro hal_init_istack reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
189 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
190
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
191 .macro hal_load_istack_base reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
192 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
193
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
194 .macro hal_load_istack reg
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
195 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
196
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
197 .macro hal_to_intstack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
198 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
199
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
200 .macro hal_from_intstack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
201 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
202
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
203 #define CYG_HAL_I386_INTSTACK_MACROS_DEFINED
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
204
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
205 #endif // CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
206
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
207 #endif // CYG_HAL_I386_INTSTACK_MACROS_DEFINED
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
208
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
209 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
210 # FPU macros.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
211
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
212 #ifndef CYGPKG_HAL_I386_FPU_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
213
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
214 #ifdef CYGHWR_HAL_I386_FPU
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
215
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
216 #define CYGPKG_HAL_I386_FPU_DEFINED
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
217
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
218 .macro hal_fpu_init
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
219 # Tell the CPU to use the math hardware.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
220 movl %cr0, %eax
171
42f843b391aa Merge from eCos master repository on 2001-07-18-03:13:25-BST
jlarmour
parents: 161
diff changeset
221 orl $0x32, %eax # Set MP, ET, NE bits
42f843b391aa Merge from eCos master repository on 2001-07-18-03:13:25-BST
jlarmour
parents: 161
diff changeset
222 andl $~0x8, %eax # And clear TS bit
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
223 movl %eax, %cr0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
224
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
225 finit # and initialize...
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
226
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
227 ## Enable floating point exceptions. Bit mask:
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
228 ## 1 - invalid operation
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
229 ## 2 - denormalized operand
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
230 ## 4 - zero divide
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
231 ## 8 - overflow
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
232 ## 16 - underflow
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
233 ## 32 - precision
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
234 pushl $0 # space for CW
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
235 fstcw 0(%esp) # store FPCW to stack
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
236 movl 0(%esp),%eax # get into EAX
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
237 andb $(~0x04),%al # allow only zero divide exceptions
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
238 movl %eax,0(%esp) # put back into memory
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
239 fldcw 0(%esp) # reload
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
240 addl $4,%esp # pop value
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
241
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
242 #ifdef CYGHWR_HAL_I386_PENTIUM_SSE
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
243 # set CR4.OSFXSR to safely use stmxcsr/ldmxcsr
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
244 movl %cr4, %eax
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
245 orl $0x200, %eax
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
246 movl %eax, %cr4
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
247
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
248 ## Enable SIMD exceptions. Bit mask:
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
249 ## 0x0080 - invalid operation
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
250 ## 0x0100 - denormalized operand
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
251 ## 0x0200 - zero divide
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
252 ## 0x0400 - overflow
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
253 ## 0x0800 - underflow
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
254 ## 0x1000 - precision
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
255 pushl $0 # space for MXCSR
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
256 stmxcsr 0(%esp) # store MXCSR to stack
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
257 movl 0(%esp),%eax # get into EAX
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
258 andw $(~0x0200),%ax # allow only zero divide exceptions
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
259 movl %eax,0(%esp) # put back into memory
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
260 ldmxcsr 0(%esp) # reload
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
261 addl $4,%esp # pop value
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
262 #endif
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
263
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
264 #ifdef CYGHWR_HAL_I386_FPU_SWITCH_LAZY
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
265 # Tell the CPU to generate an FPU unavailable exception
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
266 # when the FPU is first used.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
267 movl %cr0, %eax
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
268 orl $0x8, %eax
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
269 movl %eax, %cr0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
270 # Plant a pointer to the FPU switch VSR into slot 7
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
271 # of the VSR table.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
272 movl $__fpu_switch_vsr,%eax
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
273 movl %eax,(hal_vsr_table+7*4)
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
274 # Now create an FPU context on the stack so that we can take
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
275 # FPU-using interrupts and exceptions before the machine starts
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
276 # up.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
277 subl $i386reg_fpucontext_size,%esp
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
278 movl $0,i386reg_fpucontext_valid(%esp)
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
279 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
280 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
281 movl %esp,0(%ecx,%ebx,4) # save in table[cpu] entry
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
282 #endif
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
283 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
284
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
285 .macro hal_fpu_cpu_init
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
286 # Tell the CPU to use the math hardware.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
287 movl %cr0, %eax
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
288 orl $0x32, %eax # Set MP, ET, NE bits
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
289 andl $~0x8, %eax # And clear TS bit
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
290 movl %eax, %cr0
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
291
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
292 finit # and initialize...
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
293
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
294 ## Enable floating point exceptions. Bit mask:
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
295 ## 1 - invalid operation
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
296 ## 2 - denormalized operand
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
297 ## 4 - zero divide
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
298 ## 8 - overflow
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
299 ## 16 - underflow
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
300 ## 32 - precision
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
301 pushl $0 # space for CW
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
302 fstcw 0(%esp) # store FPCW to stack
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
303 movl 0(%esp),%eax # get into EAX
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
304 andb $(~0x04),%al # allow only zero divide exceptions
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
305 movl %eax,0(%esp) # put back into memory
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
306 fldcw 0(%esp) # reload
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
307 addl $4,%esp # pop value
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
308
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
309 #ifdef CYGHWR_HAL_I386_PENTIUM_SSE
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
310 # set CR4.OSFXSR to safely use stmxcsr/ldmxcsr
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
311 movl %cr4, %eax
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
312 orl $0x200, %eax
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
313 movl %eax, %cr4
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
314
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
315 ## Enable SIMD exceptions. Bit mask:
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
316 ## 0x0080 - invalid operation
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
317 ## 0x0100 - denormalized operand
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
318 ## 0x0200 - zero divide
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
319 ## 0x0400 - overflow
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
320 ## 0x0800 - underflow
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
321 ## 0x1000 - precision
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
322 pushl $0 # space for MXCSR
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
323 stmxcsr 0(%esp) # store MXCSR to stack
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
324 movl 0(%esp),%eax # get into EAX
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
325 andw $(~0x0200),%ax # allow only zero divide exceptions
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
326 movl %eax,0(%esp) # put back into memory
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
327 ldmxcsr 0(%esp) # reload
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
328 addl $4,%esp # pop value
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
329 #endif
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
330
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
331 #ifdef CYGHWR_HAL_I386_FPU_SWITCH_LAZY
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
332 # Tell the CPU to generate an FPU unavailable exception
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
333 # when the FPU is first used.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
334 movl %cr0, %eax
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
335 orl $0x8, %eax
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
336 movl %eax, %cr0
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
337 # Now create an FPU context on the stack so that we can take
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
338 # FPU-using interrupts and exceptions before the kernel starts
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
339 # up.
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
340 subl $i386reg_fpucontext_size,%esp
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
341 movl $0,i386reg_fpucontext_valid(%esp)
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
342 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
343 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
344 movl %esp,0(%ecx,%ebx,4) # save in table[cpu] entry
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
345 #endif
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
346
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
347 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
348
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
349 #ifndef CYGHWR_HAL_I386_FPU_SWITCH_LAZY
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
350
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
351 # Non-lazy CPU state switching. We simply switch the entire
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
352 # FPU state on every context switch, interrupt or exception.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
353
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
354 # ------------------------------------------------------------
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
355 # Context switch handling
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
356
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
357 .macro hal_fpu_push_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
358 subl $i386reg_fpstate_size,%esp # make space
200
8147f1c99f15 Merge from eCos master repository on 2001-12-21-06:43:03-GMT
jlarmour
parents: 191
diff changeset
359 fnsave i386reg_fpstate(%esp) # save FPU state
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
360 #ifdef CYGHWR_HAL_I386_PENTIUM_SSE
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
361 # Save SIMD state.
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
362
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
363 # FIXME. This is awfully inefficient. Need to use FXSAVE to
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
364 # save FPU and SIMD at same time. FXSAVE requires a 16 byte
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
365 # alignment and does not have an implicit finit as does FSAVE.
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
366
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
367 stmxcsr i386reg_simd_mxcsr(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
368 movups %xmm0,i386reg_simd_xmm0(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
369 movups %xmm1,i386reg_simd_xmm1(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
370 movups %xmm2,i386reg_simd_xmm2(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
371 movups %xmm3,i386reg_simd_xmm3(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
372 movups %xmm4,i386reg_simd_xmm4(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
373 movups %xmm5,i386reg_simd_xmm5(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
374 movups %xmm6,i386reg_simd_xmm6(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
375 movups %xmm7,i386reg_simd_xmm7(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
376 #endif
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
377 movl $1,i386reg_fpstate_valid(%esp) # indicate it is valid
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
378 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
379
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
380 .macro hal_fpu_pop_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
381 btl $0,i386reg_fpstate_valid(%esp) # check ls bit of valid flag
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
382 jc 1f # if set, restore state
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
383 finit # otherwise init FPU
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
384 #ifdef CYGHWR_HAL_I386_PENTIUM_SSE
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
385 # FIXME. Anything needed here?
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
386 #endif
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
387 jmp 2f # and skip restore
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
388 1:
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
389 frstor i386reg_fpstate(%esp) # restore FPU state
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
390 #ifdef CYGHWR_HAL_I386_PENTIUM_SSE
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
391 # Restore SIMD state.
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
392
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
393 # FIXME. This is awfully inefficient. Need to use FXRSTOR to
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
394 # restore FPU and SIMD at same time. FXRSTOR requires a 16 byte
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
395 # alignment.
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
396
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
397 movups i386reg_simd_xmm0(%esp),%xmm0
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
398 movups i386reg_simd_xmm1(%esp),%xmm1
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
399 movups i386reg_simd_xmm2(%esp),%xmm2
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
400 movups i386reg_simd_xmm3(%esp),%xmm3
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
401 movups i386reg_simd_xmm4(%esp),%xmm4
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
402 movups i386reg_simd_xmm5(%esp),%xmm5
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
403 movups i386reg_simd_xmm6(%esp),%xmm6
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
404 movups i386reg_simd_xmm7(%esp),%xmm7
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
405 ldmxcsr i386reg_simd_mxcsr(%esp)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
406 #endif
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
407 2:
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
408 addl $i386reg_fpstate_size,%esp # pop space used
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
409 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
410
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
411 # ------------------------------------------------------------
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
412 # Interrupt and exception handling
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
413
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
414 # In this configuration, the interrupt and exception code behaves in
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
415 # exactly the same way as the context switch code.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
416
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
417 .macro hal_fpu_push_int
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
418 hal_fpu_push_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
419 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
420
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
421 .macro hal_fpu_push_int_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
422 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
423
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
424 .macro hal_fpu_pop_int_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
425 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
426
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
427 .macro hal_fpu_pop_int
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
428 hal_fpu_pop_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
429 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
430
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
431 .macro hal_fpu_push_exc
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
432 hal_fpu_push_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
433 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
434
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
435 .macro hal_fpu_push_exc_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
436 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
437
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
438 .macro hal_fpu_pop_exc_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
439 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
440
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
441 .macro hal_fpu_pop_exc
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
442 hal_fpu_pop_ctx
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
443 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
444
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
445 #else // CYGHWR_HAL_I386_FPU_SWITCH_LAZY
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
446
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
447 # Lazy CPU state switching. We defer CPU state switching until the new
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
448 # thread actually uses the FPU. This state switch is handled by
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
449 # __fpu_switch_vsr in vectors.S.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
450
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
451 .extern cyg_hal_fpustate_owner
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
452 .extern cyg_hal_fpustate_current
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
453
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
454 # ------------------------------------------------------------
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
455 # Context switch handling
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
456
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
457 # On context switch we simply stack a pointer to this
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
458 # threads FPU context save area.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
459
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
460 .macro hal_fpu_push_ctx
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
461 hal_smp_cpu %ebx # Get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
462 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
463 pushl 0(%ecx,%ebx,4) # push table[cpu] entry
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
464 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
465
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
466 # We do nothing here but set the CR0:TS bit to force
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
467 # an exception when the FPU is next used and pop the
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
468 # FPU save area pointer into the static variable.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
469
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
470 .macro hal_fpu_pop_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
471 movl %cr0, %ecx # get CR0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
472 orl $0x8, %ecx # set TS bit
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
473 movl %ecx, %cr0 # restore CR0
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
474 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
475 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
476 popl 0(%ecx,%ebx,4) # pop table[cpu] entry
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
477 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
478
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
479 # ------------------------------------------------------------
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
480 # Interrupt handling
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
481
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
482 # On entry to an interrupt we save the current threads FPU context
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
483 # pointer and set the CR0:TS bit to trap any FP operations in the
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
484 # interrupt.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
485
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
486 .macro hal_fpu_push_int
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
487 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
488 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
489 pushl 0(%ecx,%ebx,4) # push table[cpu] entry
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
490 # ensure that CR0:TS bit is set
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
491 movl %cr0, %ecx # get CR0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
492 orl $0x8, %ecx # set TS bit
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
493 movl %ecx, %cr0 # restore CR0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
494 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
495
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
496 # The following is called after we transfer to the interrupt
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
497 # stack. We make space here for the FPU state of the interrupt
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
498 # handler to be saved in case we get nested interrupts that use FP.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
499
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
500 .macro hal_fpu_push_int_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
501 subl $i386reg_fpucontext_size,%esp
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
502 movl $0,i386reg_fpucontext_valid(%esp)
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
503 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
504 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
505 movl %esp,0(%ecx,%ebx,4) # save in table[cpu] entry
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
506 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
507
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
508 # This is invoked just before any transfer back to the thread stack.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
509 # We check whether we are the FPU state owner, and if so, abdicate.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
510 # There is no need to save the state, the next thread will load its
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
511 # own state over the top of it.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
512
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
513 .macro hal_fpu_pop_int_annex
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
514 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
515 movl $cyg_hal_fpustate_owner,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
516 cmpl 0(%ecx,%ebx,4),%esp # are we FPU owner?
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
517 jne 1f # if not, then just continue
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
518 movl $0,0(%ecx,%ebx,4) # no one owns FPU now
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
519 # ensure that CR0:TS bit is set to force a reload of
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
520 # the previous FPU state
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
521 movl %cr0, %ecx # get CR0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
522 orl $0x8, %ecx # set TS bit
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
523 movl %ecx, %cr0 # restore CR0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
524 1:
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
525 addl $i386reg_fpucontext_size,%esp # pop FPU save area
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
526 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
527
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
528 # Final return from interrupt handling. Just pull the current
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
529 # FPU context off the stack.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
530 .macro hal_fpu_pop_int
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
531 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
532 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
533 popl 0(%ecx,%ebx,4) # pop table[cpu] entry
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
534 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
535
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
536 # ------------------------------------------------------------
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
537 # Exception handling
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
538
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
539 # Whenever we take an exception, we save the current FPU state away
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
540 # into its save area. This way, if we are going to end up in GDB, the
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
541 # whole machine state is saved in memory.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
542
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
543 .macro hal_fpu_push_exc
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
544 hal_smp_cpu %ebx # get CPU id
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
545 movl $cyg_hal_fpustate_current,%ecx # current state table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
546 pushl 0(%ecx,%ebx,4) # push table[cpu] entry
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
547 movl $cyg_hal_fpustate_owner,%ecx # current owner table
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
548 movl 0(%ecx,%ebx,4),%eax # EAX = FPU state owner
171
42f843b391aa Merge from eCos master repository on 2001-07-18-03:13:25-BST
jlarmour
parents: 161
diff changeset
549 cmpl $0,%eax # test it
42f843b391aa Merge from eCos master repository on 2001-07-18-03:13:25-BST
jlarmour
parents: 161
diff changeset
550 je 1f # skip if zero
200
8147f1c99f15 Merge from eCos master repository on 2001-12-21-06:43:03-GMT
jlarmour
parents: 191
diff changeset
551 fnsave i386reg_fpucontext_state(%eax) # save state
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
552 #ifdef CYGHWR_HAL_I386_PENTIUM_SSE
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
553 # Save SIMD state.
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
554
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
555 # FIXME. This is awfully inefficient. Need to use FXSAVE to
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
556 # save FPU and SIMD at same time. FXSAVE requires a 16 byte
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
557 # alignment and does not have an implicit finit as does FSAVE.
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
558
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
559 stmxcsr i386reg_simd_mxcsr(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
560 movups %xmm0,i386reg_simd_xmm0(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
561 movups %xmm1,i386reg_simd_xmm1(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
562 movups %xmm2,i386reg_simd_xmm2(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
563 movups %xmm3,i386reg_simd_xmm3(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
564 movups %xmm4,i386reg_simd_xmm4(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
565 movups %xmm5,i386reg_simd_xmm5(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
566 movups %xmm6,i386reg_simd_xmm6(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
567 movups %xmm7,i386reg_simd_xmm7(%eax)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 182
diff changeset
568 #endif
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
569 movl $1,i386reg_fpucontext_valid(%eax) # set valid
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
570 movl $0,0(%ecx,%ebx,4) # zero owner pointer
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
571 1:
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
572 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
573
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
574 # The rest of the exception macros behave exactly like the
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
575 # interrupt ones.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
576
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
577 .macro hal_fpu_push_exc_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
578 hal_fpu_push_int_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
579 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
580
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
581 .macro hal_fpu_pop_exc_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
582 hal_fpu_pop_int_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
583 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
584
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
585 .macro hal_fpu_pop_exc
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
586 hal_fpu_pop_int
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
587 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
588
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
589 #endif // CYGHWR_HAL_I386_FPU_SWITCH_LAZY
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
590
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
591 #else /* !CYGHWR_HAL_I386_FPU */
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
592
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
593 # Non-FP macros.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
594
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
595 .macro hal_fpu_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
596 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
597
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
598 .macro hal_fpu_cpu_init
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
599 .endm
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 171
diff changeset
600
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
601 .macro hal_fpu_push_ctx
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
602 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
603
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
604 .macro hal_fpu_pop_ctx
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
605 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
606
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
607 .macro hal_fpu_push_int
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
608 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
609
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
610 .macro hal_fpu_push_int_annex
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
611 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
612
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
613 .macro hal_fpu_pop_int_annex
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
614 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
615
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
616 .macro hal_fpu_pop_int
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
617 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
618
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
619 .macro hal_fpu_push_exc
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
620 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
621
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
622 .macro hal_fpu_push_exc_annex
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
623 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
624
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
625 .macro hal_fpu_pop_exc_annex
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
626 .endm
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
627
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
628 .macro hal_fpu_pop_exc
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
629 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
630
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
631 #endif
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
632
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
633 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
634
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
635 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
636 # MMU macros.
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
637
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
638 #ifndef CYGPKG_HAL_I386_MMU_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
639
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
640 #define CYGPKG_HAL_I386_MMU_DEFINED
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
641
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
642 .macro hal_mmu_init
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
643 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
644
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
645 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
646
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
647 #------------------------------------------------------------------------------
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
648 # A20 gate enable
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
649
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
650 #define K_RDWR 0x60
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
651 #define K_STATUS 0x64
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
652 #define K_CMD 0x64
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
653 #define K_OBUF_FUL 0x01
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
654 #define K_IBUF_FUL 0x02
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
655 #define KC_CMD_WIN 0xD0
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
656 #define KC_CMD_WOUT 0xD1
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
657 #define KB_A20 0xDF
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
658
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
659 .macro hal_a20_enable
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
660 // Enable A20 so that addresses at 1MB don't wrap around back to 0.
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
661 1: inb $K_STATUS, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
662 testb $K_IBUF_FUL, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
663 jnz 1b
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
664
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
665 2: inb $K_STATUS, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
666 testb $K_OBUF_FUL, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
667 jz 3f
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
668 inb $K_RDWR, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
669 jmp 2b
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
670
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
671 3: movb $KC_CMD_WOUT, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
672 outb %al, $K_CMD
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
673 1: inb $K_STATUS, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
674 testb $K_IBUF_FUL, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
675 jnz 1b
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
676
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
677 movb $KB_A20, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
678 outb %al, $K_RDWR
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
679 1: inb $K_STATUS, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
680 testb $K_IBUF_FUL, %al
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
681 jnz 1b
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
682 .endm
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
683
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
684 #------------------------------------------------------------------------------
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
685 # MEMC macros.
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
686 # This version simply enables the A20 gate.
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
687
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
688 #ifndef CYGPKG_HAL_I386_MEMC_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
689
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
690 .macro hal_memc_init
161
ac086aa3217e Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents: 72
diff changeset
691 hal_a20_enable
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
692 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
693
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
694 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
695
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
696 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
697 # Cache macros.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
698
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
699 #ifndef CYGPKG_HAL_I386_CACHE_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
700
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
701 .macro hal_cache_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
702 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
703
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
704 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
705
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
706 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
707 # Diagnostics macros.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
708
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
709 #ifndef CYGPKG_HAL_I386_DIAG_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
710
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
711 .macro hal_diag_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
712 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
713
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
714 .macro hal_diag_excpt_start
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
715 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
716
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
717 .macro hal_diag_intr_start
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
718 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
719
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
720 .macro hal_diag_restore
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
721 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
722 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
723
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
724 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
725 # Timer initialization.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
726
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
727 #ifndef CYGPKG_HAL_I386_TIMER_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
728
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
729 .macro hal_timer_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
730 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
731
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
732 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
733
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
734 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
735 # Monitor initialization.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
736
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
737 #ifndef CYGPKG_HAL_I386_MON_DEFINED
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
738
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
739 .macro hal_mon_init
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
740 .endm
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
741
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
742 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
743
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
744 #------------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
745 #endif // ifndef CYGONCE_HAL_ARCH_INC
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
746 # end of arch.inc