138db37baSMarkos Chandras /*
238db37baSMarkos Chandras  * IEEE754 floating point arithmetic
338db37baSMarkos Chandras  * single precision: CLASS.f
438db37baSMarkos Chandras  * FPR[fd] = class(FPR[fs])
538db37baSMarkos Chandras  *
638db37baSMarkos Chandras  * MIPS floating point support
738db37baSMarkos Chandras  * Copyright (C) 2015 Imagination Technologies, Ltd.
838db37baSMarkos Chandras  * Author: Markos Chandras <markos.chandras@imgtec.com>
938db37baSMarkos Chandras  *
1038db37baSMarkos Chandras  *  This program is free software; you can distribute it and/or modify it
1138db37baSMarkos Chandras  *  under the terms of the GNU General Public License as published by the
1238db37baSMarkos Chandras  *  Free Software Foundation; version 2 of the License.
1338db37baSMarkos Chandras  */
1438db37baSMarkos Chandras 
1538db37baSMarkos Chandras #include "ieee754sp.h"
1638db37baSMarkos Chandras 
1738db37baSMarkos Chandras int ieee754sp_2008class(union ieee754sp x)
1838db37baSMarkos Chandras {
1938db37baSMarkos Chandras 	COMPXSP;
2038db37baSMarkos Chandras 
2138db37baSMarkos Chandras 	EXPLODEXSP;
2238db37baSMarkos Chandras 
2338db37baSMarkos Chandras 	/*
2438db37baSMarkos Chandras 	 * 10 bit mask as follows:
2538db37baSMarkos Chandras 	 *
2638db37baSMarkos Chandras 	 * bit0 = SNAN
2738db37baSMarkos Chandras 	 * bit1 = QNAN
2838db37baSMarkos Chandras 	 * bit2 = -INF
2938db37baSMarkos Chandras 	 * bit3 = -NORM
3038db37baSMarkos Chandras 	 * bit4 = -DNORM
3138db37baSMarkos Chandras 	 * bit5 = -ZERO
3238db37baSMarkos Chandras 	 * bit6 = INF
3338db37baSMarkos Chandras 	 * bit7 = NORM
3438db37baSMarkos Chandras 	 * bit8 = DNORM
3538db37baSMarkos Chandras 	 * bit9 = ZERO
3638db37baSMarkos Chandras 	 */
3738db37baSMarkos Chandras 
3838db37baSMarkos Chandras 	switch(xc) {
3938db37baSMarkos Chandras 	case IEEE754_CLASS_SNAN:
4038db37baSMarkos Chandras 		return 0x01;
4138db37baSMarkos Chandras 	case IEEE754_CLASS_QNAN:
4238db37baSMarkos Chandras 		return 0x02;
4338db37baSMarkos Chandras 	case IEEE754_CLASS_INF:
4438db37baSMarkos Chandras 		return 0x04 << (xs ? 0 : 4);
4538db37baSMarkos Chandras 	case IEEE754_CLASS_NORM:
4638db37baSMarkos Chandras 		return 0x08 << (xs ? 0 : 4);
4738db37baSMarkos Chandras 	case IEEE754_CLASS_DNORM:
4838db37baSMarkos Chandras 		return 0x10 << (xs ? 0 : 4);
4938db37baSMarkos Chandras 	case IEEE754_CLASS_ZERO:
5038db37baSMarkos Chandras 		return 0x20 << (xs ? 0 : 4);
5138db37baSMarkos Chandras 	default:
5238db37baSMarkos Chandras 		pr_err("Unknown class: %d\n", xc);
5338db37baSMarkos Chandras 		return 0;
5438db37baSMarkos Chandras 	}
5538db37baSMarkos Chandras }
56