162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * IEEE754 floating point arithmetic 462306a36Sopenharmony_ci * double precision: CLASS.f 562306a36Sopenharmony_ci * FPR[fd] = class(FPR[fs]) 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * MIPS floating point support 862306a36Sopenharmony_ci * Copyright (C) 2015 Imagination Technologies, Ltd. 962306a36Sopenharmony_ci * Author: Markos Chandras <markos.chandras@imgtec.com> 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "ieee754dp.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciint ieee754dp_2008class(union ieee754dp x) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci COMPXDP; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci EXPLODEXDP; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci /* 2162306a36Sopenharmony_ci * 10 bit mask as follows: 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * bit0 = SNAN 2462306a36Sopenharmony_ci * bit1 = QNAN 2562306a36Sopenharmony_ci * bit2 = -INF 2662306a36Sopenharmony_ci * bit3 = -NORM 2762306a36Sopenharmony_ci * bit4 = -DNORM 2862306a36Sopenharmony_ci * bit5 = -ZERO 2962306a36Sopenharmony_ci * bit6 = INF 3062306a36Sopenharmony_ci * bit7 = NORM 3162306a36Sopenharmony_ci * bit8 = DNORM 3262306a36Sopenharmony_ci * bit9 = ZERO 3362306a36Sopenharmony_ci */ 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci switch(xc) { 3662306a36Sopenharmony_ci case IEEE754_CLASS_SNAN: 3762306a36Sopenharmony_ci return 0x01; 3862306a36Sopenharmony_ci case IEEE754_CLASS_QNAN: 3962306a36Sopenharmony_ci return 0x02; 4062306a36Sopenharmony_ci case IEEE754_CLASS_INF: 4162306a36Sopenharmony_ci return 0x04 << (xs ? 0 : 4); 4262306a36Sopenharmony_ci case IEEE754_CLASS_NORM: 4362306a36Sopenharmony_ci return 0x08 << (xs ? 0 : 4); 4462306a36Sopenharmony_ci case IEEE754_CLASS_DNORM: 4562306a36Sopenharmony_ci return 0x10 << (xs ? 0 : 4); 4662306a36Sopenharmony_ci case IEEE754_CLASS_ZERO: 4762306a36Sopenharmony_ci return 0x20 << (xs ? 0 : 4); 4862306a36Sopenharmony_ci default: 4962306a36Sopenharmony_ci pr_err("Unknown class: %d\n", xc); 5062306a36Sopenharmony_ci return 0; 5162306a36Sopenharmony_ci } 5262306a36Sopenharmony_ci} 53