Mercurial > flash_v2
annotate packages/hal/mips/arch/current/src/mipsfp.c @ 1777:c16341b1bac6 default tip
* Added execute permissions to files missed in conversion from CVS
| author | alexs |
|---|---|
| date | Mon, 12 Oct 2009 02:26:09 +0100 |
| parents | d2c90368aeef |
| children |
| rev | line source |
|---|---|
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
3 // mipsfp.c |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
5 // HAL miscellaneous functions |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
8 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
9 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
10 // 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:
92
diff
changeset
|
11 // 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:
92
diff
changeset
|
12 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
13 // 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:
92
diff
changeset
|
14 // 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:
92
diff
changeset
|
15 // 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:
92
diff
changeset
|
16 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
17 // 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:
92
diff
changeset
|
18 // 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:
92
diff
changeset
|
19 // 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:
92
diff
changeset
|
20 // for more details. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
21 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
22 // 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:
92
diff
changeset
|
23 // 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:
92
diff
changeset
|
24 // 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:
92
diff
changeset
|
25 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
26 // 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:
92
diff
changeset
|
27 // 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:
92
diff
changeset
|
28 // 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:
92
diff
changeset
|
29 // 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:
92
diff
changeset
|
30 // 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:
92
diff
changeset
|
31 // 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:
92
diff
changeset
|
32 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
33 // 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:
92
diff
changeset
|
34 // 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:
92
diff
changeset
|
35 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
37 // at http://sources.redhat.com/ecos/ecos-license/ |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
38 // ------------------------------------------- |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
92
diff
changeset
|
39 //####ECOSGPLCOPYRIGHTEND#### |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
40 //========================================================================== |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
41 //#####DESCRIPTIONBEGIN#### |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
42 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
43 // Author(s): jlarmour |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
44 // Contributors: jlarmour |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
45 // Date: 1999-07-13 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
46 // Purpose: Emulate unimplemented FP operations on MIPS architectures |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
47 // Description: This catches the unimplemented operation excetion only, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
48 // and if possible deals with it so processing can continue |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
49 // as if the MIPS had a proper IEEE FPU |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
50 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
51 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
52 //####DESCRIPTIONEND#### |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
53 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
54 //========================================================================*/ |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
55 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
56 // CONFIGURATION |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
57 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
58 #include <pkgconf/hal.h> |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
59 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
60 #ifdef CYGHWR_HAL_MIPS_FPU |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
61 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
62 // INCLUDES |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
63 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
64 #include <cyg/infra/cyg_type.h> // Standard eCos types |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
65 #include <cyg/infra/cyg_ass.h> // Standard eCos assertion support |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
66 #include <cyg/infra/cyg_trac.h> // Standard eCos tracing support |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
67 #include <cyg/hal/hal_intr.h> // HAL interrupt vectors |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
68 #include <cyg/hal/hal_arch.h> // Architecture types such as |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
69 // HAL_SavedRegisters |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
70 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
71 #include <cyg/hal/mips-regs.h> // MIPS register and bitmask definitions |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
72 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
73 // TYPES |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
74 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
75 // The following types were taken from <sys/ieeefp.h> from libm. |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
76 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
77 #if (CYG_BYTEORDER == CYG_MSBFIRST) // Big endian |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
78 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
79 typedef union |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
80 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
81 cyg_int32 asi32[2]; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
82 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
83 cyg_int64 asi64; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
84 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
85 double value; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
86 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
87 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
88 { |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
89 #if (CYG_DOUBLE_BYTEORDER == CYG_MSBFIRST) |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
90 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
91 unsigned int exponent: 11; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
92 unsigned int fraction0:4; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
93 unsigned int fraction1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
94 unsigned int fraction2:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
95 unsigned int fraction3:16; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
96 #else |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
97 unsigned int fraction2:16; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
98 unsigned int fraction3:16; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
99 unsigned int sign : 1; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
100 unsigned int exponent: 11; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
101 unsigned int fraction0:4; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
102 unsigned int fraction1:16; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
103 #endif |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
104 } number; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
105 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
106 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
107 { |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
108 #if (CYG_DOUBLE_BYTEORDER == CYG_MSBFIRST) |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
109 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
110 unsigned int exponent: 11; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
111 unsigned int quiet:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
112 unsigned int function0:3; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
113 unsigned int function1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
114 unsigned int function2:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
115 unsigned int function3:16; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
116 #else |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
117 unsigned int function2:16; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
118 unsigned int function3:16; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
119 unsigned int sign : 1; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
120 unsigned int exponent: 11; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
121 unsigned int quiet:1; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
122 unsigned int function0:3; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
123 unsigned int function1:16; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
124 #endif |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
125 } nan; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
126 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
127 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
128 { |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
129 #if (CYG_DOUBLE_BYTEORDER == CYG_MSBFIRST) |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
130 cyg_uint32 msw; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
131 cyg_uint32 lsw; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
132 #else |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
133 cyg_uint32 lsw; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
134 cyg_uint32 msw; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
135 #endif |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
136 } parts; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
137 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
138 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
139 } Cyg_libm_ieee_double_shape_type; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
140 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
141 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
142 typedef union |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
143 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
144 cyg_int32 asi32; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
145 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
146 float value; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
147 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
148 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
149 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
150 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
151 unsigned int exponent: 8; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
152 unsigned int fraction0: 7; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
153 unsigned int fraction1: 16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
154 } number; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
155 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
156 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
157 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
158 unsigned int sign:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
159 unsigned int exponent:8; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
160 unsigned int quiet:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
161 unsigned int function0:6; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
162 unsigned int function1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
163 } nan; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
164 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
165 } Cyg_libm_ieee_float_shape_type; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
166 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
167 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
168 #else // Little endian |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
169 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
170 typedef union |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
171 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
172 cyg_int32 asi32[2]; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
173 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
174 cyg_int64 asi64; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
175 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
176 double value; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
177 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
178 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
179 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
180 #if (CYG_DOUBLE_BYTEORDER == CYG_MSBFIRST) // Big endian |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
181 unsigned int fraction1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
182 unsigned int fraction0: 4; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
183 unsigned int exponent :11; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
184 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
185 unsigned int fraction3:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
186 unsigned int fraction2:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
187 #else |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
188 unsigned int fraction3:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
189 unsigned int fraction2:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
190 unsigned int fraction1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
191 unsigned int fraction0: 4; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
192 unsigned int exponent :11; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
193 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
194 #endif |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
195 } number; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
196 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
197 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
198 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
199 #if (CYG_DOUBLE_BYTEORDER == CYG_MSBFIRST) // Big endian |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
200 unsigned int function1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
201 unsigned int function0:3; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
202 unsigned int quiet:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
203 unsigned int exponent: 11; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
204 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
205 unsigned int function3:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
206 unsigned int function2:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
207 #else |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
208 unsigned int function3:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
209 unsigned int function2:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
210 unsigned int function1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
211 unsigned int function0:3; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
212 unsigned int quiet:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
213 unsigned int exponent: 11; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
214 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
215 #endif |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
216 } nan; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
217 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
218 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
219 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
220 #if (CYG_DOUBLE_BYTEORDER == CYG_MSBFIRST) // Big endian |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
221 cyg_uint32 msw; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
222 cyg_uint32 lsw; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
223 #else |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
224 cyg_uint32 lsw; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
225 cyg_uint32 msw; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
226 #endif |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
227 } parts; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
228 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
229 } Cyg_libm_ieee_double_shape_type; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
230 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
231 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
232 typedef union |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
233 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
234 cyg_int32 asi32; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
235 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
236 float value; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
237 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
238 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
239 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
240 unsigned int fraction0: 7; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
241 unsigned int fraction1: 16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
242 unsigned int exponent: 8; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
243 unsigned int sign : 1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
244 } number; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
245 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
246 struct |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
247 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
248 unsigned int function1:16; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
249 unsigned int function0:6; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
250 unsigned int quiet:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
251 unsigned int exponent:8; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
252 unsigned int sign:1; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
253 } nan; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
254 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
255 } Cyg_libm_ieee_float_shape_type; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
256 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
257 #endif // little-endian |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
258 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
259 typedef enum { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
260 ADD_INSN=0, // 0 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
261 SUB_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
262 MUL_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
263 DIV_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
264 SQRT_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
265 ABS_INSN, // 5 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
266 MOV_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
267 NEG_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
268 ROUNDL_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
269 TRUNCL_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
270 CEILL_INSN, // 10 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
271 FLOORL_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
272 ROUNDW_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
273 TRUNCW_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
274 CEILW_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
275 FLOORW_INSN, // 15 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
276 // ... |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
277 CVTS_INSN=32, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
278 CVTD_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
279 // ... |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
280 CVTW_INSN=36, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
281 CVTL_INSN, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
282 // ... |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
283 // |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
284 // 48-63 are floating point compare - treated separately |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
285 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
286 } fp_operation; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
287 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
288 typedef enum { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
289 S_FORMAT=16, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
290 D_FORMAT=17, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
291 W_FORMAT=20, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
292 L_FORMAT=21 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
293 } fp_format; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
294 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
295 // FUNCTIONS |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
296 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
297 #define issubnormal(_x_) ((_x_).number.exponent == 0) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
298 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
299 // These functions convert between single precision floating point numbers |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
300 // represented in register or union form. This is required because endian-ness |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
301 // matters when a 32-bit float is in a 64-bit register. |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
302 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
303 static __inline__ void |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
304 reg2flt( CYG_HAL_FPU_REG *fpu_reg_p, Cyg_libm_ieee_float_shape_type *flt) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
305 { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
306 #if defined(CYGHWR_HAL_MIPS_FPU_32BIT) || (CYG_BYTEORDER == CYG_LSBFIRST) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
307 flt->asi32 = *(cyg_int32 *)fpu_reg_p; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
308 #else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
309 flt->asi32 = *((cyg_int32 *)fpu_reg_p + 1); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
310 # endif |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
311 } // reg2flt() |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
312 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
313 static __inline__ void |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
314 flt2reg( Cyg_libm_ieee_float_shape_type *flt, CYG_HAL_FPU_REG *fpu_reg_p ) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
315 { |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
316 #if defined(CYGHWR_HAL_MIPS_FPU_32BIT) || (CYG_BYTEORDER == CYG_LSBFIRST) |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
317 *(cyg_int32 *)fpu_reg_p = flt->asi32; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
318 #else |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
319 *((cyg_int32 *)fpu_reg_p + 1) = flt->asi32; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
320 # endif |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
321 } // flt2reg() |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
322 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
323 static __inline__ void |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
324 reg2dbl( CYG_HAL_FPU_REG *fpu_reg_p, Cyg_libm_ieee_double_shape_type *flt) |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
325 { |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
326 flt->asi64 = *(cyg_int64 *)fpu_reg_p; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
327 } // reg2dbl() |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
328 |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
329 static __inline__ void |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
330 dbl2reg( Cyg_libm_ieee_double_shape_type *flt, CYG_HAL_FPU_REG *fpu_reg_p ) |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
331 { |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
332 *(cyg_uint64*)fpu_reg_p = flt->asi64; |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
333 } // dbl2reg() |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
334 |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
335 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
336 // This function returns non-zero if the exception has been handled |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
337 // successfully. |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
338 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
339 // FIXME: Arguably we should raise underflow exceptions in some of the cases |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
340 // below e.g. sqrt(subnormal). And perhaps we should round appropriately to |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
341 // +/- 2^^Emin if round to +/- infinity is enabled, as per the FS bit. Not sure. |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
342 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
343 externC cyg_uint8 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
344 cyg_hal_mips_process_fpe( HAL_SavedRegisters *regs ) |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
345 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
346 CYG_WORD insn; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
347 CYG_HAL_FPU_REG *srcreg1, *srcreg2, *dstreg; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
348 cyg_uint8 handled=0; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
349 fp_format format; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
350 cyg_uint8 fp64bit=0; // true if format is 64bit, false if 32bit |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
351 cyg_uint8 fixedpoint=0; // true if format is fixed point, false if |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
352 // floating point |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
353 cyg_uint8 computational_insn=1; // computational FP instruction |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
354 cyg_bool delay_slot; // did it happen in a delay slot |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
355 |
|
30
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
26
diff
changeset
|
356 CYG_REPORT_FUNCNAMETYPE("cyg_hal_mips_process_fpe", "returning %d"); |
|
641b639be825
Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents:
26
diff
changeset
|
357 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
358 CYG_CHECK_DATA_PTR( regs, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
359 "cyg_hal_mips_process_fpe() called with invalid regs ptr"); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
360 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
361 CYG_PRECONDITION( (regs->vector>>2) == CYGNUM_HAL_VECTOR_FPE, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
362 "Asked to process non-FPE exception"); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
363 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
364 // First of all, we only handle the unimplemented operation exception |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
365 // here, so if we don't have that, we just exit |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
366 if ((regs->fcr31 & FCR31_CAUSE_E) == 0) { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
367 CYG_REPORT_RETVAL(0); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
368 return 0; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
369 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
370 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
371 // Get the contents of the instruction that caused the exception. This |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
372 // may have been in a branch delay slot however, so we have to check |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
373 // the BD bit in the cause register first. |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
374 if (regs->cause & CAUSE_BD) { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
375 insn = *(((CYG_WORD *) regs->pc) + 1); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
376 delay_slot = true; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
377 } else { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
378 insn = *(CYG_WORD *) regs->pc; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
379 delay_slot = false; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
380 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
381 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
382 CYG_TRACE2(true, "exception at pc %08x containing %08x", regs->pc, insn); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
383 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
384 CYG_ASSERT( (insn>>26) == 0x11, |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
385 "Instruction at pc doesn't have expected opcode COP1"); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
386 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
387 // Determine the format |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
388 format = (insn >> 21) & 0x1f; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
389 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
390 switch (format) |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
391 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
392 case S_FORMAT: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
393 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
394 case D_FORMAT: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
395 fp64bit++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
396 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
397 case W_FORMAT: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
398 fixedpoint++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
399 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
400 case L_FORMAT: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
401 fixedpoint++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
402 fp64bit++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
403 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
404 default: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
405 computational_insn=0; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
406 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
407 } // switch |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
408 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
409 // This module only emulates computational floating point instructions |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
410 if (computational_insn && !fixedpoint) { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
411 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
412 // Decode the registers used |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
413 dstreg = ®s->f[ (insn >> 6) & 0x1f ]; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
414 srcreg1 = ®s->f[ (insn >> 11) & 0x1f ]; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
415 srcreg2 = ®s->f[ (insn >> 16) & 0x1f ]; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
416 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
417 // Determine the operation requested |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
418 switch (insn & 0x3f) |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
419 { |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
420 case ADD_INSN: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
421 case SUB_INSN: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
422 case MUL_INSN: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
423 case DIV_INSN: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
424 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
425 if (fp64bit) { |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
426 Cyg_libm_ieee_double_shape_type s1, s2; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
427 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
428 reg2dbl( srcreg1, &s1 ); |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
429 reg2dbl( srcreg2, &s2 ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
430 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
431 if ( issubnormal( s1 ) ) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
432 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
433 if (s1.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
434 s1.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
435 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
436 s1.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
437 dbl2reg( &s1, srcreg1 ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
438 handled++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
439 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
440 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
441 // We could try flushing both to 0 at the same time, but |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
442 // that's inadvisable if both numbers are very small. |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
443 // Particularly if this is DIV_INSN, when we could therefore |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
444 // get 0/0 even when the program explicitly checked for |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
445 // denominator != 0. That's also why we check s1 first. |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
446 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
447 else if ( issubnormal( s2 ) ) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
448 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
449 if (s2.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
450 s2.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
451 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
452 s2.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
453 dbl2reg( &s2, srcreg2 ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
454 handled++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
455 } |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
456 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
457 } else { // 32-bit |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
458 Cyg_libm_ieee_float_shape_type s1, s2; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
459 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
460 reg2flt( srcreg1, &s1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
461 reg2flt( srcreg2, &s2 ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
462 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
463 if ( issubnormal( s1 )) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
464 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
465 if (s1.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
466 s1.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
467 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
468 s1.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
469 flt2reg( &s1, srcreg1 ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
470 handled++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
471 } |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
472 else if ( issubnormal( s2 ) ) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
473 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
474 if (s2.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
475 s2.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
476 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
477 s2.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
478 flt2reg( &s2, srcreg2 ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
479 handled++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
480 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
481 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
482 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
483 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
484 case SQRT_INSN: |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
485 if ( fp64bit ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
486 Cyg_libm_ieee_double_shape_type d, s; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
487 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
488 reg2dbl( dstreg, &d ); |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
489 reg2dbl( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
490 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
491 if ( issubnormal( s ) ) { // Sqrt of something tiny is 0 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
492 // if this is a delay slot, we can't restart properly |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
493 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
494 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
495 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
496 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
497 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
498 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
499 s.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
500 dbl2reg( &s, srcreg1 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
501 } else { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
502 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
503 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
504 d.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
505 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
506 d.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
507 dbl2reg( &d, dstreg ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
508 regs->pc += 4; // We've dealt with this so move on |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
509 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
510 handled++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
511 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
512 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
513 } else { // 32-bit |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
514 Cyg_libm_ieee_float_shape_type d, s; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
515 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
516 reg2flt( dstreg, &d ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
517 reg2flt( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
518 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
519 if ( issubnormal( s ) ) { // Sqrt of something tiny is 0 |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
520 // if this is a delay slot, we can't restart properly |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
521 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
522 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
523 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
524 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
525 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
526 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
527 s.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
528 flt2reg( &s, srcreg1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
529 } else { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
530 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
531 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
532 d.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
533 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
534 d.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
535 flt2reg( &d, dstreg ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
536 regs->pc += 4; // We've dealt with this so move on |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
537 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
538 handled++; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
539 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
540 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
541 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
542 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
543 case ABS_INSN: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
544 // We may as well do this right if we can |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
545 if ( fp64bit ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
546 Cyg_libm_ieee_double_shape_type d, s; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
547 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
548 reg2dbl( dstreg, &d ); |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
549 reg2dbl( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
550 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
551 // if this is a delay slot, we can't restart properly |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
552 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
553 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
554 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
555 // The sign is still important for abs in case |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
556 // there are any further operations on the same |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
557 // register |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
558 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
559 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
560 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
561 s.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
562 dbl2reg( &s, srcreg1 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
563 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
564 } |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
565 } else { |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
566 d.asi64 = s.asi64; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
567 d.number.sign = 0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
568 dbl2reg( &d, dstreg ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
569 regs->pc += 4; |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
570 handled++; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
571 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
572 } else { // 32-bit |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
573 Cyg_libm_ieee_float_shape_type d, s; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
574 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
575 reg2flt( dstreg, &d ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
576 reg2flt( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
577 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
578 // if this is a delay slot, we can't restart properly |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
579 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
580 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
581 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
582 // The sign is still important for abs in case |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
583 // there are any further operations on the same |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
584 // register |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
585 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
586 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
587 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
588 s.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
589 flt2reg( &s, srcreg1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
590 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
591 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
592 } else { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
593 d.asi32 = s.asi32; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
594 d.number.sign = 0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
595 flt2reg( &d, dstreg ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
596 regs->pc += 4; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
597 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
598 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
599 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
600 break; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
601 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
602 case MOV_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
603 // We may as well do this right if we can |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
604 if ( fp64bit ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
605 Cyg_libm_ieee_double_shape_type d, s; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
606 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
607 reg2dbl( dstreg, &d ); |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
608 reg2dbl( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
609 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
610 // if this is a delay slot, we can't restart properly |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
611 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
612 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
613 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
614 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
615 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
616 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
617 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
618 s.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
619 dbl2reg( &s, srcreg1 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
620 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
621 } |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
622 } else { |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
623 d.asi64 = s.asi64; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
624 dbl2reg( &d, dstreg ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
625 regs->pc += 4; |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
626 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
627 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
628 } else { // 32-bit |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
629 Cyg_libm_ieee_float_shape_type d, s; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
630 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
631 reg2flt( dstreg, &d ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
632 reg2flt( srcreg1, &s ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
633 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
634 // if this is a delay slot, we can't restart properly |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
635 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
636 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
637 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
638 // The sign is still important for abs in case |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
639 // there are any further operations on the same |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
640 // register |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
641 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
642 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
643 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
644 s.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
645 flt2reg( &s, srcreg1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
646 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
647 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
648 } else { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
649 d.asi32 = s.asi32; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
650 flt2reg( &d, dstreg ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
651 regs->pc += 4; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
652 handled++; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
653 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
654 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
655 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
656 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
657 case NEG_INSN: |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
658 // We may as well do this right if we can |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
659 if ( fp64bit ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
660 Cyg_libm_ieee_double_shape_type d, s; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
661 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
662 reg2dbl( dstreg, &d ); |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
663 reg2dbl( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
664 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
665 // if this is a delay slot, we can't restart properly |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
666 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
667 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
668 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
669 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
670 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
671 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
672 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
673 s.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
674 dbl2reg( &s, srcreg1 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
675 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
676 } |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
677 } else { |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
678 d.asi64 = s.asi64; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
679 d.number.sign = s.number.sign ? 0 : 1; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
680 dbl2reg( &d, dstreg ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
681 regs->pc += 4; |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
682 handled++; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
683 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
684 } else { // 32-bit |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
685 Cyg_libm_ieee_float_shape_type d, s; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
686 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
687 reg2flt( dstreg, &d ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
688 reg2flt( srcreg1, &s ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
689 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
690 // if this is a delay slot, we can't restart properly |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
691 // so if it is subnormal, clear the source register instead |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
692 if ( delay_slot ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
693 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
694 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
695 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
696 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
697 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
698 s.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
699 flt2reg( &s, srcreg1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
700 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
701 } |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
702 } else { |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
703 d.asi32 = s.asi32; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
704 d.number.sign = s.number.sign ? 0 : 1; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
705 flt2reg( &d, dstreg ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
706 regs->pc += 4; |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
707 handled++; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
708 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
709 } |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
710 break; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
711 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
712 // We can't do much about floating-point to fixed-point arithmetic |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
713 // without emulating the FPU here ourselves! |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
714 // So simply zero denormalized numbers |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
715 case ROUNDL_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
716 case TRUNCL_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
717 case CEILL_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
718 case FLOORL_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
719 case ROUNDW_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
720 case TRUNCW_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
721 case CEILW_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
722 case FLOORW_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
723 case CVTS_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
724 case CVTD_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
725 case CVTW_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
726 case CVTL_INSN: |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
727 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
728 if ( fp64bit ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
729 Cyg_libm_ieee_double_shape_type s; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
730 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
731 reg2dbl( srcreg1, &s ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
732 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
733 // just try and 0 the source register if it is subnormal |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
734 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
735 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
736 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
737 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
738 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
739 s.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
740 dbl2reg( &s, srcreg1 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
741 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
742 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
743 } else { // 32-bit |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
744 Cyg_libm_ieee_float_shape_type s; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
745 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
746 reg2flt( srcreg1, &s ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
747 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
748 // just try and 0 the source register if it is subnormal |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
749 if ( issubnormal( s ) ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
750 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
751 if (s.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
752 s.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
753 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
754 s.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
755 flt2reg( &s, srcreg1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
756 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
757 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
758 } |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
759 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
760 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
761 default: |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
762 // check for floating-point compare (C.cond.fmt) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
763 if ( (insn & 0x30) == 0x30 ) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
764 if (fp64bit) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
765 Cyg_libm_ieee_double_shape_type s1, s2; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
766 |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
767 reg2dbl( srcreg1, &s1 ); |
|
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
768 reg2dbl( srcreg2, &s2 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
769 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
770 if ( issubnormal( s1 ) ) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
771 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
772 if (s1.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
773 s1.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
774 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
775 s1.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
776 dbl2reg( &s1, srcreg1 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
777 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
778 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
779 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
780 if ( issubnormal( s2 ) ) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
781 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
782 if (s2.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
783 s2.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
784 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
785 s2.value = 0.0; |
|
92
08ffab08d2ee
Merge from eCos master repository on 2000-05-26-07:47:03-BST
jlarmour
parents:
66
diff
changeset
|
786 dbl2reg( &s2, srcreg2 ); |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
787 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
788 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
789 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
790 } else { // 32-bit |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
791 Cyg_libm_ieee_float_shape_type s1, s2; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
792 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
793 reg2flt( srcreg1, &s1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
794 reg2flt( srcreg2, &s2 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
795 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
796 if ( issubnormal( s1 )) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
797 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
798 if (s1.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
799 s1.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
800 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
801 s1.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
802 flt2reg( &s1, srcreg1 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
803 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
804 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
805 if ( issubnormal( s2 ) ) { // flush to 0 and restart |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
806 // but preserve sign |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
807 if (s2.number.sign) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
808 s2.value = -0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
809 else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
810 s2.value = 0.0; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
811 flt2reg( &s2, srcreg2 ); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
812 handled++; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
813 } |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
814 } // else |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
815 } // if |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
816 break; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
817 } // switch |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
818 } // if (computational_insn && !fixedpoint) |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
819 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
820 if ( handled != 0) { |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
821 // We must clear the cause and flag bits before restoring FPCR31 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
822 regs->fcr31 &= ~(FCR31_CAUSE_E | FCR31_CAUSE_V | FCR31_CAUSE_Z | |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
823 FCR31_CAUSE_O | FCR31_CAUSE_U | FCR31_CAUSE_I | |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
824 FCR31_FLAGS_V | FCR31_FLAGS_Z | |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
825 FCR31_FLAGS_O | FCR31_FLAGS_U | FCR31_FLAGS_I); |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
826 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
827 } |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
828 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
30
diff
changeset
|
829 CYG_REPORT_RETVAL( handled ); |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
830 return handled; |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
831 } // cyg_hal_mips_process_fpe() |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
832 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
833 #endif // ifdef CYGHWR_HAL_MIPS_FPU |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
834 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
diff
changeset
|
835 // EOF mipsfp.c |
