|  | // 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; | 
|  | } | 
|  | } |