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;
153 in.exp = exp + scale_val;
165 int scale_val = bfp.
exp;
169 if (scale_val == 0xFF) {
174 scale_val -= bfp.
bias;
184 in.exp = exp - scale_val;
188 uint32_t
m = in.mant | 1 << FMT::mbits;
190 in.mant =
m &
mask(FMT::mbits);
226 a.data ^= 0x80000000;
264 return T(
float(
a) +
float(
b));
270 return T(
float(
a) -
float(
b));
276 return T(
float(
a) *
float(
b));
282 return T(
float(
a) /
float(
b));
317 return float(
a) < float(
b);
323 return float(
a) > float(
b);
329 return float(
a) <= float(
b);
335 return float(
a) >= float(
b);
341 return float(
a) == float(
b);
347 return float(
a) != float(
b);
void scaleMul(const float &f)
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.