| // SPDX-License-Identifier: GPL-2.0-only | 
 | /* | 
 |  * IEEE754 floating point arithmetic | 
 |  * single 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> | 
 |  */ | 
 |  | 
 | #include "ieee754sp.h" | 
 |  | 
 | int ieee754sp_2008class(union ieee754sp x) | 
 | { | 
 | 	COMPXSP; | 
 |  | 
 | 	EXPLODEXSP; | 
 |  | 
 | 	/* | 
 | 	 * 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; | 
 | 	} | 
 | } |