This Operation comes directly from the instruction owner; the page does not rewrite its behavior.
34
5pure func FP16NumericFormatDescriptor() => NumericFormatDescriptor6begin7 return NumericFormatDescriptor {8 available = TRUE, kind = NumericFormatKind_FixedBinary,9 carrier_bits = 16, lane_bits = 16, lanes_per_carrier = 1,10 sign_bits = 1, sign_bit = 15,11 exponent_bits_min = 5, exponent_bits_max = 5,12 fraction_bits_min = 10, fraction_bits_max = 10,13 exponent_bias_available = TRUE, exponent_bias = 15,14 required_low_zero_bits = 0, 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 FP16FiniteDecomposition(value: bits(16))22 => (boolean, boolean, Word, integer {-1074..1023})23begin24 let exponent = value[14:10];25 let fraction = value[9:0];26 if exponent == Ones{5} then27 return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);28 elsif exponent == Zeros{5} then29 if fraction == Zeros{10} then30 return (TRUE, value[15] == '1', Zeros{PTO_XLEN}, 0);31 else return (TRUE, value[15] == '1',32 ZeroExtend{PTO_XLEN}(fraction), -24);33 end;34 else return (TRUE, value[15] == '1',35 LSL(Zeros{PTO_XLEN} + 1, 10) +36 ZeroExtend{PTO_XLEN}(fraction),37 (UInt(exponent) - (15 + 10))38 as integer {-1074..1023});39 end;40end;41pure func ClassifyFP16(value: bits(16)) => NumericValueClass42begin43 let exponent = value[14:10];44 let fraction = value[9:0];45 if exponent == Ones{5} then46 if fraction == Zeros{10} then47 if value[15] == '1' then return NumericValue_NegativeInfinity;48 else return NumericValue_PositiveInfinity;49 end;50 elsif fraction[9] == '1' then return NumericValue_QuietNaN;51 else return NumericValue_SignalingNaN;52 end;53 end;54 return NumericValueClassFromFiniteSign(value[15],55 exponent == Zeros{5} && fraction == Zeros{10},56 exponent == Zeros{5} && fraction != Zeros{10});57end;58
59pure func FP16CanonicalNaN() => Word60begin61 return Zeros{PTO_XLEN} + 0x7e00;62end;63
64pure func FP16SignedZeroEncodings() => (Word, Word)65begin66 return (Zeros{PTO_XLEN}, Zeros{PTO_XLEN} + 0x8000);67end;
View the complete ASL owner
1234
5pure func FP16NumericFormatDescriptor() => NumericFormatDescriptor6begin7 return NumericFormatDescriptor {8 available = TRUE, kind = NumericFormatKind_FixedBinary,9 carrier_bits = 16, lane_bits = 16, lanes_per_carrier = 1,10 sign_bits = 1, sign_bit = 15,11 exponent_bits_min = 5, exponent_bits_max = 5,12 fraction_bits_min = 10, fraction_bits_max = 10,13 exponent_bias_available = TRUE, exponent_bias = 15,14 required_low_zero_bits = 0, 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 FP16FiniteDecomposition(value: bits(16))22 => (boolean, boolean, Word, integer {-1074..1023})23begin24 let exponent = value[14:10];25 let fraction = value[9:0];26 if exponent == Ones{5} then27 return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);28 elsif exponent == Zeros{5} then29 if fraction == Zeros{10} then30 return (TRUE, value[15] == '1', Zeros{PTO_XLEN}, 0);31 else return (TRUE, value[15] == '1',32 ZeroExtend{PTO_XLEN}(fraction), -24);33 end;34 else return (TRUE, value[15] == '1',35 LSL(Zeros{PTO_XLEN} + 1, 10) +36 ZeroExtend{PTO_XLEN}(fraction),37 (UInt(exponent) - (15 + 10))38 as integer {-1074..1023});39 end;40end;41pure func ClassifyFP16(value: bits(16)) => NumericValueClass42begin43 let exponent = value[14:10];44 let fraction = value[9:0];45 if exponent == Ones{5} then46 if fraction == Zeros{10} then47 if value[15] == '1' then return NumericValue_NegativeInfinity;48 else return NumericValue_PositiveInfinity;49 end;50 elsif fraction[9] == '1' then return NumericValue_QuietNaN;51 else return NumericValue_SignalingNaN;52 end;53 end;54 return NumericValueClassFromFiniteSign(value[15],55 exponent == Zeros{5} && fraction == Zeros{10},56 exponent == Zeros{5} && fraction != Zeros{10});57end;58
59pure func FP16CanonicalNaN() => Word60begin61 return Zeros{PTO_XLEN} + 0x7e00;62end;63
64pure func FP16SignedZeroEncodings() => (Word, Word)65begin66 return (Zeros{PTO_XLEN}, Zeros{PTO_XLEN} + 0x8000);67end;6869