These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / mips / math-emu / dp_2008class.c
diff --git a/kernel/arch/mips/math-emu/dp_2008class.c b/kernel/arch/mips/math-emu/dp_2008class.c
new file mode 100644 (file)
index 0000000..9dc39fc
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * 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;
+       }
+}