1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- * IEEE754 floating point arithmetic
- * double precision: CLASS.f
- * FPR[fd] = class(FPR[fs])
- *
- * MIPS floating point support
- * Copyright (C) 2015 Imagination Technologies, Ltd.
- * Author: Markos Chandras <markos.chandras@imgtec.com>
- *
- * This program is free software; you can distribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; version 2 of the License.
- */
- #include "ieee754dp.h"
- int ieee754dp_2008class(union ieee754dp x)
- {
- COMPXDP;
- EXPLODEXDP;
- /*
- * 10 bit mask as follows:
- *
- * bit0 = SNAN
- * bit1 = QNAN
- * bit2 = -INF
- * bit3 = -NORM
- * bit4 = -DNORM
- * bit5 = -ZERO
- * bit6 = INF
- * bit7 = NORM
- * bit8 = DNORM
- * bit9 = ZERO
- */
- switch(xc) {
- case IEEE754_CLASS_SNAN:
- return 0x01;
- case IEEE754_CLASS_QNAN:
- return 0x02;
- case IEEE754_CLASS_INF:
- return 0x04 << (xs ? 0 : 4);
- case IEEE754_CLASS_NORM:
- return 0x08 << (xs ? 0 : 4);
- case IEEE754_CLASS_DNORM:
- return 0x10 << (xs ? 0 : 4);
- case IEEE754_CLASS_ZERO:
- return 0x20 << (xs ? 0 : 4);
- default:
- pr_err("Unknown class: %d\n", xc);
- return 0;
- }
- }
|