This Operation comes directly from the instruction owner; the page does not rewrite its behavior.
34
5pure func TF32NumericFormatDescriptor() => NumericFormatDescriptor6begin7 return NumericFormatDescriptor {8 available = TRUE, kind = NumericFormatKind_FixedBinary,9 carrier_bits = 32, lane_bits = 32, lanes_per_carrier = 1,10 sign_bits = 1, sign_bit = 31,11 exponent_bits_min = 8, exponent_bits_max = 8,12 fraction_bits_min = 10, fraction_bits_max = 10,13 exponent_bias_available = TRUE, exponent_bias = 127,14 required_low_zero_bits = 13, required_high_zero_bits = 0,15 has_zero = TRUE, has_signed_zero = TRUE, has_subnormal = TRUE,16 has_infinity = TRUE, has_quiet_nan = TRUE,17 has_signaling_nan = TRUE18 };19end;20
21pure func TF32FiniteDecomposition(value: bits(32))22 => (boolean, boolean, Word, integer {-1074..1023})23begin24 if value[12:0] != Zeros{13} then25 return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);26 end;27 let exponent = value[30:23];28 let fraction = value[22:13];29 if exponent == Ones{8} then30 return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);31 elsif exponent == Zeros{8} then32 if fraction == Zeros{10} then33 return (TRUE, value[31] == '1', Zeros{PTO_XLEN}, 0);34 else return (TRUE, value[31] == '1',35 ZeroExtend{PTO_XLEN}(fraction), -136);36 end;37 else return (TRUE, value[31] == '1',38 LSL(Zeros{PTO_XLEN} + 1, 10) +39 ZeroExtend{PTO_XLEN}(fraction),40 (UInt(exponent) - (127 + 10))41 as integer {-1074..1023});42 end;43end;44
45pure func TF32EncodingValid(value: bits(32)) => boolean46begin47 return value[12:0] == Zeros{13};48end;49pure func ClassifyTF32(value: bits(32)) => NumericValueClass50begin51 let exponent = value[30:23];52 let fraction = value[22:13];53 if exponent == Ones{8} then54 if fraction == Zeros{10} then55 if value[31] == '1' then return NumericValue_NegativeInfinity;56 else return NumericValue_PositiveInfinity;57 end;58 elsif fraction[9] == '1' then return NumericValue_QuietNaN;59 else return NumericValue_SignalingNaN;60 end;61 end;62 return NumericValueClassFromFiniteSign(value[31],63 exponent == Zeros{8} && fraction == Zeros{10},64 exponent == Zeros{8} && fraction != Zeros{10});65end;66
67pure func TF32CanonicalNaN() => Word68begin69 return Zeros{PTO_XLEN} + 0x7fc00000;70end;71
72pure func TF32SignedZeroEncodings() => (Word, Word)73begin74 return (Zeros{PTO_XLEN}, Zeros{PTO_XLEN} + 0x80000000);75end;
View the complete ASL owner
1234
5pure func TF32NumericFormatDescriptor() => NumericFormatDescriptor6begin7 return NumericFormatDescriptor {8 available = TRUE, kind = NumericFormatKind_FixedBinary,9 carrier_bits = 32, lane_bits = 32, lanes_per_carrier = 1,10 sign_bits = 1, sign_bit = 31,11 exponent_bits_min = 8, exponent_bits_max = 8,12 fraction_bits_min = 10, fraction_bits_max = 10,13 exponent_bias_available = TRUE, exponent_bias = 127,14 required_low_zero_bits = 13, required_high_zero_bits = 0,15 has_zero = TRUE, has_signed_zero = TRUE, has_subnormal = TRUE,16 has_infinity = TRUE, has_quiet_nan = TRUE,17 has_signaling_nan = TRUE18 };19end;20
21pure func TF32FiniteDecomposition(value: bits(32))22 => (boolean, boolean, Word, integer {-1074..1023})23begin24 if value[12:0] != Zeros{13} then25 return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);26 end;27 let exponent = value[30:23];28 let fraction = value[22:13];29 if exponent == Ones{8} then30 return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);31 elsif exponent == Zeros{8} then32 if fraction == Zeros{10} then33 return (TRUE, value[31] == '1', Zeros{PTO_XLEN}, 0);34 else return (TRUE, value[31] == '1',35 ZeroExtend{PTO_XLEN}(fraction), -136);36 end;37 else return (TRUE, value[31] == '1',38 LSL(Zeros{PTO_XLEN} + 1, 10) +39 ZeroExtend{PTO_XLEN}(fraction),40 (UInt(exponent) - (127 + 10))41 as integer {-1074..1023});42 end;43end;44
45pure func TF32EncodingValid(value: bits(32)) => boolean46begin47 return value[12:0] == Zeros{13};48end;49pure func ClassifyTF32(value: bits(32)) => NumericValueClass50begin51 let exponent = value[30:23];52 let fraction = value[22:13];53 if exponent == Ones{8} then54 if fraction == Zeros{10} then55 if value[31] == '1' then return NumericValue_NegativeInfinity;56 else return NumericValue_PositiveInfinity;57 end;58 elsif fraction[9] == '1' then return NumericValue_QuietNaN;59 else return NumericValue_SignalingNaN;60 end;61 end;62 return NumericValueClassFromFiniteSign(value[31],63 exponent == Zeros{8} && fraction == Zeros{10},64 exponent == Zeros{8} && fraction != Zeros{10});65end;66
67pure func TF32CanonicalNaN() => Word68begin69 return Zeros{PTO_XLEN} + 0x7fc00000;70end;71
72pure func TF32SignedZeroEncodings() => (Word, Word)73begin74 return (Zeros{PTO_XLEN}, Zeros{PTO_XLEN} + 0x80000000);75end;7677