Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
math-emu
sp_cmp.c
Go to the documentation of this file.
1
/* IEEE754 floating point arithmetic
2
* single precision
3
*/
4
/*
5
* MIPS floating point support
6
* Copyright (C) 1994-2000 Algorithmics Ltd.
7
*
8
* ########################################################################
9
*
10
* This program is free software; you can distribute it and/or modify it
11
* under the terms of the GNU General Public License (Version 2) as
12
* published by the Free Software Foundation.
13
*
14
* This program is distributed in the hope it will be useful, but WITHOUT
15
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17
* for more details.
18
*
19
* You should have received a copy of the GNU General Public License along
20
* with this program; if not, write to the Free Software Foundation, Inc.,
21
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
22
*
23
* ########################################################################
24
*/
25
26
27
#include "
ieee754sp.h
"
28
29
int
ieee754sp_cmp
(ieee754sp
x
, ieee754sp
y
,
int
cmp,
int
sig
)
30
{
31
COMPXSP
;
32
COMPYSP
;
33
34
EXPLODEXSP
;
35
EXPLODEYSP
;
36
FLUSHXSP
;
37
FLUSHYSP
;
38
CLEARCX
;
/* Even clear inexact flag here */
39
40
if
(
ieee754sp_isnan
(x) ||
ieee754sp_isnan
(y)) {
41
if
(sig ||
xc
==
IEEE754_CLASS_SNAN
|| yc ==
IEEE754_CLASS_SNAN
)
42
SETCX
(
IEEE754_INVALID_OPERATION
);
43
if
(cmp &
IEEE754_CUN
)
44
return
1;
45
if
(cmp & (
IEEE754_CLT
|
IEEE754_CGT
)) {
46
if
(sig &&
SETANDTESTCX
(
IEEE754_INVALID_OPERATION
))
47
return
ieee754si_xcpt
(0,
"fcmpf"
, x);
48
}
49
return
0;
50
}
else
{
51
int
vx = x.bits;
52
int
vy = y.bits;
53
54
if
(vx < 0)
55
vx = -vx ^
SP_SIGN_BIT
;
56
if
(vy < 0)
57
vy = -vy ^
SP_SIGN_BIT
;
58
59
if
(vx < vy)
60
return
(cmp &
IEEE754_CLT
) != 0;
61
else
if
(vx == vy)
62
return
(cmp &
IEEE754_CEQ
) != 0;
63
else
64
return
(cmp &
IEEE754_CGT
) != 0;
65
}
66
}
Generated on Thu Jan 10 2013 13:11:39 for Linux Kernel by
1.8.2