OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [mips/] [math-emu/] [dp_cmp.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* IEEE754 floating point arithmetic
2
 * double precision: common utilities
3
 */
4
/*
5
 * MIPS floating point support
6
 * Copyright (C) 1994-2000 Algorithmics Ltd.  All rights reserved.
7
 * http://www.algor.co.uk
8
 *
9
 * ########################################################################
10
 *
11
 *  This program is free software; you can distribute it and/or modify it
12
 *  under the terms of the GNU General Public License (Version 2) as
13
 *  published by the Free Software Foundation.
14
 *
15
 *  This program is distributed in the hope it will be useful, but WITHOUT
16
 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18
 *  for more details.
19
 *
20
 *  You should have received a copy of the GNU General Public License along
21
 *  with this program; if not, write to the Free Software Foundation, Inc.,
22
 *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
23
 *
24
 * ########################################################################
25
 */
26
 
27
 
28
#include "ieee754dp.h"
29
 
30
int ieee754dp_cmp(ieee754dp x, ieee754dp y, int cmp, int sig)
31
{
32
        COMPXDP;
33
        COMPYDP;
34
 
35
        EXPLODEXDP;
36
        EXPLODEYDP;
37
        FLUSHXDP;
38
        FLUSHYDP;
39
        CLEARCX;        /* Even clear inexact flag here */
40
 
41
        if (ieee754dp_isnan(x) || ieee754dp_isnan(y)) {
42
                if (sig || xc == IEEE754_CLASS_SNAN || yc == IEEE754_CLASS_SNAN)
43
                        SETCX(IEEE754_INVALID_OPERATION);
44
                if (cmp & IEEE754_CUN)
45
                        return 1;
46
                if (cmp & (IEEE754_CLT | IEEE754_CGT)) {
47
                        if (sig && SETANDTESTCX(IEEE754_INVALID_OPERATION))
48
                                return ieee754si_xcpt(0, "fcmpf", x);
49
                }
50
                return 0;
51
        } else {
52
                s64 vx = x.bits;
53
                s64 vy = y.bits;
54
 
55
                if (vx < 0)
56
                        vx = -vx ^ DP_SIGN_BIT;
57
                if (vy < 0)
58
                        vy = -vy ^ DP_SIGN_BIT;
59
 
60
                if (vx < vy)
61
                        return (cmp & IEEE754_CLT) != 0;
62
                else if (vx == vy)
63
                        return (cmp & IEEE754_CEQ) != 0;
64
                else
65
                        return (cmp & IEEE754_CGT) != 0;
66
        }
67
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.