32#ifndef __ARCH_AMDGPU_COMMON_DTYPE_MXFP_HH__
33#define __ARCH_AMDGPU_COMMON_DTYPE_MXFP_HH__
68 data <<= (32 - int(FMT::sbits) - int(FMT::ebits) - int(FMT::mbits));
74 conv_out =
convertMXFP<FMT,
decltype(
f.getFmt())>(
f.getFmt());
75 data = conv_out.storage;
89 conv_out =
convertMXFP<FMT,
decltype(
f.getFmt())>(
f.getFmt());
90 data = conv_out.storage;
94 operator float()
const
107 return int(FMT::mbits) + int(FMT::ebits) + int(FMT::sbits);
134 int scale_val = bfp.
exp;
138 if (scale_val == 0xFF) {
143 scale_val -= bfp.
bias;
149 if (exp == 0 && in.mant == 0) {
158 in.exp = exp + scale_val;
170 int scale_val = bfp.
exp;
174 if (scale_val == 0xFF) {
179 scale_val -= bfp.
bias;
185 if (exp == 0 && in.mant == 0) {
194 in.exp = exp - scale_val;
198 uint32_t
m = in.mant | 1 << FMT::mbits;
200 in.mant =
m &
mask(FMT::mbits);
233 }
else if (*
this < 0.0f) {
280 a.data ^= 0x80000000;
318 return T(
float(
a) +
float(
b));
324 return T(
float(
a) -
float(
b));
330 return T(
float(
a) *
float(
b));
336 return T(
float(
a) /
float(
b));
371 return float(
a) < float(
b);
377 return float(
a) > float(
b);
383 return float(
a) <= float(
b);
389 return float(
a) >= float(
b);
395 return float(
a) == float(
b);
401 return float(
a) != float(
b);
void clamp(bool do_clamp)
void scaleMul(const float &f)
void omodModifier(unsigned omod)
mxfp & operator=(const mxfp &f)
uint32_t float_to_mxfp(float f)
static constexpr int size()
mxfp(const uint32_t &raw)
void scaleDiv(const float &f)
mxfp & operator=(const float &f)
bool operator==(T a, T b)
union gem5::AMDGPU::binary32_u binary32
dFMT convertMXFP(sFMT in, mxfpRoundingMode mode=roundTiesToEven, uint32_t seed=0)
bool operator!=(T a, T b)
bool operator<=(T a, T b)
bool operator>=(T a, T b)
Copyright (c) 2024 Arm Limited All rights reserved.