跳到主要内容

PTO-ARCH-DATA-TYPES-FORMAT-HIF8

PTO-ARCH-DATA-TYPES-FORMAT-HIF8

ASL 伪代码

下面是该指令所有者中的 Operation;页面没有重写这段行为。

// PTO-REQ-HARDWARE-NUMERIC-001: exact HiF8 dynamic encoding.
pure func HiF8NumericFormatDescriptor() => NumericFormatDescriptorbegin    return NumericFormatDescriptor {        available = TRUE, kind = NumericFormatKind_HiF8,        carrier_bits = 8, lane_bits = 8, lanes_per_carrier = 1,        sign_bits = 1, sign_bit = 7,        exponent_bits_min = 0, exponent_bits_max = 4,        fraction_bits_min = 1, fraction_bits_max = 3,        exponent_bias_available = FALSE, exponent_bias = 0,        required_low_zero_bits = 0, required_high_zero_bits = 0,        has_zero = TRUE, has_signed_zero = FALSE, has_subnormal = TRUE,        has_infinity = TRUE, has_quiet_nan = TRUE,        has_signaling_nan = FALSE    };end;
pure func HiF8DecodeDotField(value: bits(8))    => (HiF8DotField, integer {0..4}, integer {1..3})begin    if value[6:3] == '0000' then        return (HiF8DotField_Denormal, 0, 3);    elsif value[6:3] == '0001' then        return (HiF8DotField_D0, 0, 3);    elsif value[6:4] == '001' then        return (HiF8DotField_D1, 1, 3);    elsif value[6:5] == '01' then        return (HiF8DotField_D2, 2, 3);    elsif value[6:5] == '10' then        return (HiF8DotField_D3, 3, 2);    else return (HiF8DotField_D4, 4, 1);    end;end;
pure func HiF8FiniteDecomposition(value: bits(8))    => (boolean, boolean, Word, integer {-1074..1023})begin    if value == '10000000' || value == '01101111' ||       value == '11101111' then        return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);    end;    let (dot, exponent_bits, fraction_bits) = HiF8DecodeDotField(value);    case dot of        when HiF8DotField_Denormal =>            let mantissa = value[2:0];            if mantissa == Zeros{3} then                return (TRUE, FALSE, Zeros{PTO_XLEN}, 0);            else return (TRUE, value[7] == '1', Zeros{PTO_XLEN} + 1,                         (UInt(mantissa) - 23)                             as integer {-1074..1023});            end;        when HiF8DotField_D0 =>            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 3) +                        ZeroExtend{PTO_XLEN}(value[2:0]), -3);        when HiF8DotField_D1 =>            var actual_exponent: integer {-15..15} = 1;            if value[3] == '1' then actual_exponent = -1; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 3) +                        ZeroExtend{PTO_XLEN}(value[2:0]),                    (actual_exponent - 3) as integer {-1074..1023});        when HiF8DotField_D2 =>            let magnitude = 2 + UInt(value[3]);            var actual_exponent: integer {-15..15} = magnitude;            if value[4] == '1' then actual_exponent = 0 - magnitude; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 3) +                        ZeroExtend{PTO_XLEN}(value[2:0]),                    (actual_exponent - 3) as integer {-1074..1023});        when HiF8DotField_D3 =>            let magnitude = 4 + UInt(value[3:2]);            var actual_exponent: integer {-15..15} = magnitude;            if value[4] == '1' then actual_exponent = 0 - magnitude; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 2) +                        ZeroExtend{PTO_XLEN}(value[1:0]),                    (actual_exponent - 2) as integer {-1074..1023});        when HiF8DotField_D4 =>            let magnitude = 8 + UInt(value[3:1]);            var actual_exponent: integer {-15..15} = magnitude;            if value[4] == '1' then actual_exponent = 0 - magnitude; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 1) +                        ZeroExtend{PTO_XLEN}(value[0:0]),                    (actual_exponent - 1) as integer {-1074..1023});    end;end;pure func ClassifyHiF8(value: bits(8)) => NumericValueClassbegin    if value == '10000000' then return NumericValue_QuietNaN;    elsif value == '01101111' then return NumericValue_PositiveInfinity;    elsif value == '11101111' then return NumericValue_NegativeInfinity;    elsif value == Zeros{8} then return NumericValue_PositiveZero;    elsif UInt(value[6:0]) <= 7 then        return NumericValueClassFromFiniteSign(value[7], FALSE, TRUE);    else return NumericValueClassFromFiniteSign(value[7], FALSE, FALSE);    end;end;
pure func HiF8CanonicalNaN() => Wordbegin    return Zeros{PTO_XLEN} + 0x80;end;
查看完整 ASL 所有者
// PTO-UNIT: {"id":"PTO-ARCH-DATA-TYPES-FORMAT-HIF8","surface":"arch","classification":["data-types","formats","hif8"],"depends_on":["PTO-ARCH-DATA-TYPES-FORMAT-DESCRIPTOR"]}// DOC-BEGIN: operation// PTO-REQ-HARDWARE-NUMERIC-001: exact HiF8 dynamic encoding.
pure func HiF8NumericFormatDescriptor() => NumericFormatDescriptorbegin    return NumericFormatDescriptor {        available = TRUE, kind = NumericFormatKind_HiF8,        carrier_bits = 8, lane_bits = 8, lanes_per_carrier = 1,        sign_bits = 1, sign_bit = 7,        exponent_bits_min = 0, exponent_bits_max = 4,        fraction_bits_min = 1, fraction_bits_max = 3,        exponent_bias_available = FALSE, exponent_bias = 0,        required_low_zero_bits = 0, required_high_zero_bits = 0,        has_zero = TRUE, has_signed_zero = FALSE, has_subnormal = TRUE,        has_infinity = TRUE, has_quiet_nan = TRUE,        has_signaling_nan = FALSE    };end;
pure func HiF8DecodeDotField(value: bits(8))    => (HiF8DotField, integer {0..4}, integer {1..3})begin    if value[6:3] == '0000' then        return (HiF8DotField_Denormal, 0, 3);    elsif value[6:3] == '0001' then        return (HiF8DotField_D0, 0, 3);    elsif value[6:4] == '001' then        return (HiF8DotField_D1, 1, 3);    elsif value[6:5] == '01' then        return (HiF8DotField_D2, 2, 3);    elsif value[6:5] == '10' then        return (HiF8DotField_D3, 3, 2);    else return (HiF8DotField_D4, 4, 1);    end;end;
pure func HiF8FiniteDecomposition(value: bits(8))    => (boolean, boolean, Word, integer {-1074..1023})begin    if value == '10000000' || value == '01101111' ||       value == '11101111' then        return (FALSE, FALSE, Zeros{PTO_XLEN}, 0);    end;    let (dot, exponent_bits, fraction_bits) = HiF8DecodeDotField(value);    case dot of        when HiF8DotField_Denormal =>            let mantissa = value[2:0];            if mantissa == Zeros{3} then                return (TRUE, FALSE, Zeros{PTO_XLEN}, 0);            else return (TRUE, value[7] == '1', Zeros{PTO_XLEN} + 1,                         (UInt(mantissa) - 23)                             as integer {-1074..1023});            end;        when HiF8DotField_D0 =>            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 3) +                        ZeroExtend{PTO_XLEN}(value[2:0]), -3);        when HiF8DotField_D1 =>            var actual_exponent: integer {-15..15} = 1;            if value[3] == '1' then actual_exponent = -1; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 3) +                        ZeroExtend{PTO_XLEN}(value[2:0]),                    (actual_exponent - 3) as integer {-1074..1023});        when HiF8DotField_D2 =>            let magnitude = 2 + UInt(value[3]);            var actual_exponent: integer {-15..15} = magnitude;            if value[4] == '1' then actual_exponent = 0 - magnitude; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 3) +                        ZeroExtend{PTO_XLEN}(value[2:0]),                    (actual_exponent - 3) as integer {-1074..1023});        when HiF8DotField_D3 =>            let magnitude = 4 + UInt(value[3:2]);            var actual_exponent: integer {-15..15} = magnitude;            if value[4] == '1' then actual_exponent = 0 - magnitude; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 2) +                        ZeroExtend{PTO_XLEN}(value[1:0]),                    (actual_exponent - 2) as integer {-1074..1023});        when HiF8DotField_D4 =>            let magnitude = 8 + UInt(value[3:1]);            var actual_exponent: integer {-15..15} = magnitude;            if value[4] == '1' then actual_exponent = 0 - magnitude; end;            return (TRUE, value[7] == '1',                    LSL(Zeros{PTO_XLEN} + 1, 1) +                        ZeroExtend{PTO_XLEN}(value[0:0]),                    (actual_exponent - 1) as integer {-1074..1023});    end;end;pure func ClassifyHiF8(value: bits(8)) => NumericValueClassbegin    if value == '10000000' then return NumericValue_QuietNaN;    elsif value == '01101111' then return NumericValue_PositiveInfinity;    elsif value == '11101111' then return NumericValue_NegativeInfinity;    elsif value == Zeros{8} then return NumericValue_PositiveZero;    elsif UInt(value[6:0]) <= 7 then        return NumericValueClassFromFiniteSign(value[7], FALSE, TRUE);    else return NumericValueClassFromFiniteSign(value[7], FALSE, FALSE);    end;end;
pure func HiF8CanonicalNaN() => Wordbegin    return Zeros{PTO_XLEN} + 0x80;end;// DOC-END: operation

架构行为

目的与范围

目的与范围

本单元精确定义 HiF8 的八位格式描述、动态点字段解码、有限值分解、数值分类和规范 NaN。

有了这一归属单元,使用者可以直接根据原始载体推理,而无需用宿主浮点类型替代架构规定的编码。

概念与架构状态

概念与可见状态

  • HiF8NumericFormatDescriptor 规定一个符号位、0..4 个可变指数位、1..3 个小数位和一个八位通道,并且不采用固定指数偏置。
  • HiF8DecodeDotField 将载体中的点字段映射为 HiF8DotField_Denormal 或 HiF8DotField_D0 至 HiF8DotField_D4,同时返回当前采用的指数宽度和小数宽度。
  • HiF8FiniteDecomposition 返回可用性、符号、整数有效数和二进制指数;ClassifyHiF8 返回相应的数值类别。
规则与交互

规则与交互

原始载体 0x80、0x6f 和 0xef 都是非有限值:前者是静默 NaN,后两者分别是正无穷大和负无穷大。

全零载体表示正零。低七位处于 1..7 的载体归类为带符号次正规数,其余有限载体归类为带符号正规数。

HiF8CanonicalNaN 返回 0x80,与分类规则一致,不另设第二种 NaN 编码。

边界与未定义范围

架构边界

该描述符声明支持零、次正规数、无穷大和静默 NaN,但不支持带符号零或信号 NaN。

所有非有限载体的分解结果都标记为不可用;调用者必须先检查可用性,再使用返回的有效数和指数。

使用示例

示例性阅读示例

对于 0x01,解码器选择 HiF8DotField_Denormal。该值可用、为正且属于次正规数,其精确大小由返回的整数有效数和指数表示。

对于 0x80,分类结果为 NumericValue_QuietNaN,有限值分解则报告不可用。

这只是两个 API 的阅读示例,不构成新的算术规则。

NDF 条款

正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。

No NDF clause is attached to this unit.

Evidence index

8 matching entries

Executable evidence2
  • PTO-ARCH-DATA-TYPES-FORMAT-HIF8 compiles as an independent normative unit
    1. surfaceARCH
    2. ownerPTO-ARCH-DATA-TYPES-FORMAT-HIF8
    3. categorySTATIC-INVARIANT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-DATA-TYPES-FORMAT-HIF8-STATIC-001
    Path
    tests/asl/arch/data-types/formats/hif8/arch-static-hif8-contract-001.asl
    Kind / role
    static-invariant
    Pass condition
    the complete model and this unit's static invariant compile
    SHA-256
    fc8d132d8a3c3f53ce9f9d7eff7e45e97248c8065b39098e0cbc99b0a8b1921a
    Open exact source ↗ for PTO-AVS-ARCH-DATA-TYPES-FORMAT-HIF8-STATIC-001
  • HiF8 exposes its exact descriptor and finite-value decomposition.
    1. surfaceARCH
    2. ownerPTO-ARCH-DATA-TYPES-FORMAT-HIF8
    3. categoryBOUNDARY
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-HIF8-DECOMP-001
    Path
    tests/asl/arch/data-types/formats/hif8/arch-bound-hif8-decomp-001.asl
    Kind / role
    boundary
    Requirements
    PTO-NUMERIC-FINITE-DECOMPOSITION-001
    Pass condition
    Field metadata, finite boundaries, unavailable special values, and existing value-class rules agree.
    SHA-256
    12250e47f7ee38605ce521d2db8c778afd485227af4e450ad82194d08a15eb16
    Open exact source ↗ for PTO-AVS-ARCH-HIF8-DECOMP-001
Commit-scoped evidence5
  • spec/evidence/release-traceability-readiness.json · closedPTO-EVIDENCE-RELEASE-TRACEABILITY
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-TRACEABILITY
    Path
    spec/evidence/release-traceability-readiness.json
    Kind / role
    ASL/NDF/documentation/AVS traceability
    SHA-256
    c7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3e
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-TRACEABILITY
  • spec/evidence/instruction-contract-closure.json · closedPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Path
    spec/evidence/instruction-contract-closure.json
    Kind / role
    mnemonic and encoding contract closure
    SHA-256
    3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106a
    Open exact source ↗ for PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
  • spec/evidence/architecture-readiness.json · openPTO-EVIDENCE-ARCHITECTURE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-ARCHITECTURE-READINESS
    Path
    spec/evidence/architecture-readiness.json
    Kind / role
    architecture maturity and blockers
    SHA-256
    4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004
    Open exact source ↗ for PTO-EVIDENCE-ARCHITECTURE-READINESS
  • spec/evidence/release-gate-readiness.json · ready-for-exact-head-verificationPTO-EVIDENCE-RELEASE-GATE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-GATE-READINESS
    Path
    spec/evidence/release-gate-readiness.json
    Kind / role
    exact-head gate readiness
    SHA-256
    a0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-GATE-READINESS
  • spec/release-manifest.json · draftPTO-EVIDENCE-RELEASE-MANIFEST
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-MANIFEST
    Path
    spec/release-manifest.json
    Kind / role
    release content and encoding fingerprints
    SHA-256
    1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-MANIFEST
Decision history1
  • Numeric format value classification · accepted
    1. decision recordADR
    2. case0048

    Decision record

    Loading ADR-0048…

    Sources and references
    Complete stable ID
    ADR-0048
    Path
    docs/status/decisions/0048-numeric-format-value-classification.md
    Affected units
    PTO-ARCH-DATA-TYPES-FORMAT-BF16, PTO-ARCH-DATA-TYPES-FORMAT-DESCRIPTOR, PTO-ARCH-DATA-TYPES-FORMAT-E1M2X2, PTO-ARCH-DATA-TYPES-FORMAT-E2M1X2, PTO-ARCH-DATA-TYPES-FORMAT-E2M3, PTO-ARCH-DATA-TYPES-FORMAT-E3M2, PTO-ARCH-DATA-TYPES-FORMAT-E4M3, PTO-ARCH-DATA-TYPES-FORMAT-E5M2, PTO-ARCH-DATA-TYPES-FORMAT-E8M0, PTO-ARCH-DATA-TYPES-FORMAT-FP16, PTO-ARCH-DATA-TYPES-FORMAT-FP32, PTO-ARCH-DATA-TYPES-FORMAT-FP64, PTO-ARCH-DATA-TYPES-FORMAT-HF32, PTO-ARCH-DATA-TYPES-FORMAT-HIF4X2, PTO-ARCH-DATA-TYPES-FORMAT-HIF8, PTO-ARCH-DATA-TYPES-FORMAT-TF32, PTO-ARCH-DATA-TYPES-NUMERIC-CLASSIFICATION, PTO-ARCH-DATA-TYPES-NUMERIC-FORMATS, PTO-SCALAR-FMAX, PTO-SCALAR-FMIN, PTO-SCALAR-MODEL-FSU-PROFILE, PTO-TILE-MODEL-EXECUTION-COMPARISON, PTO-TILE-MODEL-EXECUTION-FUSED-MULTIPLY-ADD, PTO-TILE-MODEL-EXECUTION-UNARY, PTO-TILE-MODEL-NUMERIC-FORMATS, PTO-TILE-MODEL-ORDERING-SORTING, PTO-TILE-TMAX, PTO-TILE-TMIN
    Affected NDF
    PTO-FMAX-DECISION-BINDING-001, PTO-FMIN-DECISION-BINDING-001, PTO-NUMERIC-FINITE-DECOMPOSITION-001, PTO-NUMERIC-FORMAT-DESCRIPTOR-001, PTO-TMAX-CONTRACT-001, PTO-TMIN-CONTRACT-001
    SHA-256
    ce3ecd1851e22b5517d07076ab8bd2db36b6b4582111c761db19240275853d9c
    Open exact decision source ↗ for ADR-0048

Unit metadata

Open 4 generated metadata fields
id
PTO-ARCH-DATA-TYPES-FORMAT-HIF8
surface
arch
classification
[
  "data-types",
  "formats",
  "hif8"
]
depends_on
[
  "PTO-ARCH-DATA-TYPES-FORMAT-DESCRIPTOR"
]
Open generated traceability record
{
  "classification": [
    "data-types",
    "formats",
    "hif8"
  ],
  "documentation": "docs/arch/data-types/formats/hif8.md",
  "id": "PTO-ARCH-DATA-TYPES-FORMAT-HIF8",
  "mnemonic": null,
  "readiness_subjects": [
    "ADR-0048"
  ],
  "semantic_tests": [
    "PTO-AVS-ARCH-HIF8-DECOMP-001"
  ],
  "source": "asl/arch/data-types/formats/hif8.asl",
  "surface": "arch",
  "tests": [
    "PTO-AVS-ARCH-DATA-TYPES-FORMAT-HIF8-STATIC-001",
    "PTO-AVS-ARCH-HIF8-DECOMP-001"
  ]
}

来源与发布信息

展开 commit、路径、hash、版本和规范所有者
发布
0.58.5 · 候选发布
Commit
7dc8b7e5b121d2b2499a2273bebff29e2cd86812
ASL SHA-256
44dbda4ee90a1dcb8f96cf7d087492e6a18d9b6e4e4b3d84b0cada344804578c
文档 SHA-256
bfe6274ebfd4ef845692cedbf2dec915071a771385af80c0856321b105035c8f

精确所有者