Lines Matching +full:low +full:- +full:precision
16 val = val >> shift | ((val << (32 - shift)) != 0); in vfp_shiftright32jamming()
27 val = val >> shift | ((val << (64 - shift)) != 0); in vfp_shiftright64jamming()
131 z -= 0x100000000ULL; in vfp_estimate_div128to64()
150 * Single-precision
162 * VFP_SINGLE_MANTISSA_BITS - number of bits in the mantissa
163 * VFP_SINGLE_EXPONENT_BITS - number of bits in the exponent
164 * VFP_SINGLE_LOW_BITS - number of low bits in the unpacked significand
169 #define VFP_SINGLE_LOW_BITS (32 - VFP_SINGLE_MANTISSA_BITS - 2)
170 #define VFP_SINGLE_LOW_BITS_MASK ((1 << VFP_SINGLE_LOW_BITS) - 1)
175 #define VFP_SINGLE_SIGNIFICAND_QNAN (1 << (VFP_SINGLE_MANTISSA_BITS - 1 + VFP_SINGLE_LOW_BITS))
178 * Operations on packed single-precision numbers
183 …ngle_packed_exponent(v) (((v) >> VFP_SINGLE_MANTISSA_BITS) & ((1 << VFP_SINGLE_EXPONENT_BITS) - 1))
184 #define vfp_single_packed_mantissa(v) ((v) & ((1 << VFP_SINGLE_MANTISSA_BITS) - 1))
187 * Unpack a single-precision float. Note that this returns the magnitude
188 * of the single-precision float mantissa with the 1. if necessary,
195 s->sign = vfp_single_packed_sign(val) >> 16, in vfp_single_unpack()
196 s->exponent = vfp_single_packed_exponent(val); in vfp_single_unpack()
199 significand = (significand << (32 - VFP_SINGLE_MANTISSA_BITS)) >> 2; in vfp_single_unpack()
200 if (s->exponent && s->exponent != 255) in vfp_single_unpack()
202 s->significand = significand; in vfp_single_unpack()
206 * Re-pack a single-precision float. This assumes that the float is
212 val = (s->sign << 16) + in vfp_single_pack()
213 (s->exponent << VFP_SINGLE_MANTISSA_BITS) + in vfp_single_pack()
214 (s->significand >> VFP_SINGLE_LOW_BITS); in vfp_single_pack()
231 if (s->exponent == 255) { in vfp_single_type()
232 if (s->significand == 0) in vfp_single_type()
234 else if (s->significand & VFP_SINGLE_SIGNIFICAND_QNAN) in vfp_single_type()
238 } else if (s->exponent == 0) { in vfp_single_type()
239 if (s->significand == 0) in vfp_single_type()
255 * Double-precision
278 #define VFP_DOUBLE_LOW_BITS (64 - VFP_DOUBLE_MANTISSA_BITS - 2)
279 #define VFP_DOUBLE_LOW_BITS_MASK ((1 << VFP_DOUBLE_LOW_BITS) - 1)
284 #define VFP_DOUBLE_SIGNIFICAND_QNAN (1ULL << (VFP_DOUBLE_MANTISSA_BITS - 1 + VFP_DOUBLE_LOW_BITS))
287 * Operations on packed single-precision numbers
292 …uble_packed_exponent(v) (((v) >> VFP_DOUBLE_MANTISSA_BITS) & ((1 << VFP_DOUBLE_EXPONENT_BITS) - 1))
293 #define vfp_double_packed_mantissa(v) ((v) & ((1ULL << VFP_DOUBLE_MANTISSA_BITS) - 1))
296 * Unpack a double-precision float. Note that this returns the magnitude
297 * of the double-precision float mantissa with the 1. if necessary,
304 s->sign = vfp_double_packed_sign(val) >> 48; in vfp_double_unpack()
305 s->exponent = vfp_double_packed_exponent(val); in vfp_double_unpack()
308 significand = (significand << (64 - VFP_DOUBLE_MANTISSA_BITS)) >> 2; in vfp_double_unpack()
309 if (s->exponent && s->exponent != 2047) in vfp_double_unpack()
311 s->significand = significand; in vfp_double_unpack()
315 * Re-pack a double-precision float. This assumes that the float is
321 val = ((u64)s->sign << 48) + in vfp_double_pack()
322 ((u64)s->exponent << VFP_DOUBLE_MANTISSA_BITS) + in vfp_double_pack()
323 (s->significand >> VFP_DOUBLE_LOW_BITS); in vfp_double_pack()
330 if (s->exponent == 2047) { in vfp_double_type()
331 if (s->significand == 0) in vfp_double_type()
333 else if (s->significand & VFP_DOUBLE_SIGNIFICAND_QNAN) in vfp_double_type()
337 } else if (s->exponent == 0) { in vfp_double_type()
338 if (s->significand == 0) in vfp_double_type()
361 #define VFP_EXCEPTION_ERROR ((u32)-1 & ~VFP_NAN_FLAG)
365 * OP_SCALAR - this operation always operates in scalar mode
366 * OP_SD - the instruction exceptionally writes to a single precision result.
367 * OP_DD - the instruction exceptionally writes to a double precision result.
368 * OP_SM - the instruction exceptionally reads from a single precision operand.