Text file src/simd/archsimd/_gen/SPEC-STATS.txt

     1  SIMD spec transition progress
     2  
     3  Generated by archsimd/_gen/cmd/specstats; do not edit.
     4  Regenerate with: go run ./cmd/specstats -w
     5  
     6  Every fraction heads for 100%; every count heads for zero. Bracketed
     7  names are SPEC-TRANSITION.md tasks that move the figure. Indented,
     8  untagged numbers are context breaking down the figure above them.
     9  String, Len, ToArch, and FromArch are excluded throughout (§2.7).
    10  
    11  
    12  ## Summary
    13  
    14  Heading for 100%:
    15  
    16  spec coverage, by (receiver, name) (§1)          1809 / 2917   62%  [spec-common, spec-all]
    17  docs sourced from spec (§3)                      2926 / 3175   92%  [gen-docs, comments-yaml, handwritten-fill, template-docs]
    18  
    19  Heading for zero:
    20  
    21  type mismatches with spec (§2)                      0 -> 0       [fill-enforce]
    22  type divergence across targets (§2)                 0 -> 0       [fill-enforce]
    23  spec coverage gaps in defined names (§5)            8 -> 0       [spec-all, convert-lo, mask-bits]
    24  hand-written doc conflicts with spec (§3)         165 -> 0       [doc-triage]
    25  simd mirror drift (§3)                              0 -> 0       [comments-yaml]
    26  categories.yaml entries (§4)                      227 -> 0       [cat-rehome, compiler-ops-impl, cat-delete]
    27  midway/comments.yaml entries spec covers (§4)       0 -> 0       [comments-yaml, spec-all]
    28  
    29  
    30  ## 1. Spec coverage of API   [spec-common, spec-all]
    31  
    32  by (target, receiver, name)                      3903 / 5175   75%
    33  by (receiver, name)                              1809 / 2917   62%
    34  by name                                           275 / 458    60%
    35  
    36  By build configuration:
    37  
    38    amd64                                          1737 / 2692   65%
    39    arm64                                          1068 / 1282   83%
    40    wasm                                            750 / 829    90%
    41    portable                                        348 / 372    94%
    42  
    43  By generator (declarations per tool, counted once per tool per pair):
    44  
    45    hand-written                                    502 / 561    89%
    46    midway                                          348 / 348   100%
    47    simdgen                                        1272 / 2247   57%
    48    tmplgen                                         362 / 416    87%
    49    wasmgen                                         337 / 392    86%
    50  
    51  High-drift-risk names (emitted by >1 generator):
    52  
    53    covered                                         130 / 138    94%  [spec-all]
    54    portable core (comments.yaml .common_methods)    65 / 65    100%  [spec-common]
    55  
    56  spec operations written so far                     80
    57    expanding to distinct names                     286
    58    expanding to (receiver, name) pairs            2632
    59  
    60  
    61  ## 2. Signatures and names   [named-results, fill-enforce]
    62  
    63  Spec/API disagreement, for declarations spec covers. As in specdoc.Fill,
    64  a named argument whose name differs from spec's is a mismatch; an unnamed
    65  one (or _) is not, and is counted below as a name Fill fills in instead:
    66  
    67    type mismatches                                   0 -> 0       [fill-enforce]
    68    parameter-name mismatches                         0 -> 0       [named-results]
    69    result-name mismatches                            0 -> 0       [named-results]
    70  
    71  Names spec gives that the API leaves unnamed, for declarations spec covers:
    72  
    73    declarations with unnamed parameters              0 -> 0       [named-results]
    74    declarations with unnamed results                 0 -> 0       [named-results]
    75  
    76  API consistency across targets (the "one meaning" invariant), for
    77  (receiver, name) pairs declared for more than one target. An unnamed
    78  argument agrees with any name:
    79  
    80    divergent parameter or result types               0 -> 0       [fill-enforce]
    81    divergent parameter names                         0 -> 0       [fill-enforce, spec-all]
    82    divergent result names                            0 -> 0       [named-results]
    83  
    84  
    85  ## 3. Documentation   [gen-docs, comments-yaml, handwritten-fill, template-docs]
    86  
    87  A declaration counts as sourced from spec when its doc comment begins with
    88  spec's text (a prefix test, because Fill leaves generator notes below).
    89  
    90  covered declarations whose doc comes from spec   2926 / 3175   92%  [gen-docs, comments-yaml, handwritten-fill, template-docs]
    91  
    92  simd ∩ archsimd methods with matching docs        253 / 253   100%  [gen-docs, comments-yaml]
    93  
    94  hand-written doc conflicts with spec              165 -> 0       [doc-triage]
    95      archsimd/clmul_arm64.go                         4 -> 0       [doc-triage]
    96      archsimd/extra_amd64.go                         6 -> 0       [doc-triage]
    97      archsimd/maskrange_128.go                       4 -> 0       [doc-triage]
    98      archsimd/maskrange_amd64.go                    12 -> 0       [doc-triage]
    99      archsimd/ops_emulated_amd64.go                 48 -> 0       [doc-triage]
   100      archsimd/ops_emulated_arm64.go                  2 -> 0       [doc-triage]
   101      archsimd/ops_emulated_wasm.go                  29 -> 0       [doc-triage]
   102      archsimd/shuffles_amd64.go                     12 -> 0       [doc-triage]
   103      archsimd/slicepart_128.go                       8 -> 0       [doc-triage]
   104      archsimd/slicepart_amd64.go                     4 -> 0       [doc-triage]
   105      archsimd/slicepart_arm64.go                    12 -> 0       [doc-triage]
   106      archsimd/slicepart_wasm.go                     12 -> 0       [doc-triage]
   107      simd_emulated.go                               12 -> 0       [doc-triage]
   108  drifted docs in simd mirror (stubs vs emulated)     0 -> 0       [comments-yaml]
   109    mirrored declarations                           372
   110  
   111  
   112  ## 4. Retiring the old inputs
   113     [comments-yaml, cat-rehome, compiler-ops-impl, cat-delete]
   114  
   115  categories.yaml's exported entries are emptied field by field: template-docs
   116  removes documentation, cat-rehome removes the rest, sig-from-spec removes
   117  commutative, and cat-delete removes the file. Compiler-only entries are
   118  handled wholesale by compiler-ops-impl.
   119  
   120  categories.yaml entries                           227 -> 0       [cat-rehome, compiler-ops-impl, cat-delete]
   121      unique operation names                        198
   122        exported                                    165
   123  compiler-only categories.yaml entries              42 -> 0       [compiler-ops-impl]
   124  
   125    exported entries, by field:
   126      base                                            6 -> 0       [cat-rehome]
   127      commutative                                   185 -> 0       [sig-from-spec]
   128      constImm                                       22 -> 0       [cat-rehome]
   129      documentation                                 184 -> 0       [cat-rehome]
   130      elemBits                                       14 -> 0       [cat-rehome]
   131      out                                            20 -> 0       [cat-rehome]
   132      regexpTag                                      25 -> 0       [cat-rehome]
   133      signed                                          6 -> 0       [cat-rehome]
   134  
   135  midway/comments.yaml entries spec covers            0 -> 0       [comments-yaml, spec-all]
   136  
   137  commutativity disagreements, spec vs categories.yaml     7 -> 0       [spec-all]
   138  
   139  
   140  ## 5. Spec/API coverage disagreement detail   [spec-all, convert-lo, mask-bits]
   141  
   142  Where both sides define a name, receivers only the API declares are spec
   143  bugs (a constraint is wrong or a sibling function is missing). Receivers
   144  only spec generates are a review queue -- spec is deliberately maximal.
   145  
   146  spec misses receivers of a name it defines          8 -> 0       [spec-all, convert-lo, mask-bits]
   147      declarations affected, counting each target     8 -> 0       [spec-all, convert-lo, mask-bits]
   148  spec operations implemented nowhere                 1 -> 0       [spec-all]
   149      TrailingZeros
   150  
   151  Every name either side defines, less the 183 spec has never defined at all
   152  (1100 receivers, counted as coverage in §1 rather than disagreement):
   153  
   154    relation         names  Σ|api - spec|  Σ|spec - api|
   155                                   (-> 0)       (review)
   156    api = spec         219              0              0
   157    api ⊂ spec          50              0            773
   158    api ⊃ spec           0              0              0
   159    overlapping          0              0              0
   160    disjoint             6              8             16
   161    api = ∅             11              0             34
   162    total              286              8            823
   163  
   164  Names that disagree, with api - spec receivers (the defects):
   165  
   166    name                       relation    |api| |spec| |api - spec| |spec - api|
   167    AddSaturated               api ⊂ spec     24     32            0            8
   168    Average                    api ⊂ spec     12     32            0           20
   169    CarrylessMultiplyEven      api ⊂ spec      4     16            0           12
   170    CarrylessMultiplyEvenOdd   api ⊂ spec      3     16            0           13
   171    CarrylessMultiplyOdd       api ⊂ spec      4     16            0           12
   172    CarrylessMultiplyOddEven   api ⊂ spec      3     16            0           13
   173    ConcatAddPairs             api ⊂ spec     10     40            0           30
   174    ConcatAddPairsGrouped      api ⊂ spec      6     40            0           34
   175    ConcatAddPairsSaturated    api ⊂ spec      1     32            0           31
   176    ConcatAddPairsSaturatedGrouped api ⊂ spec      1     32            0           31
   177    ConcatSubPairs             api ⊂ spec      6     40            0           34
   178    ConcatSubPairsGrouped      api ⊂ spec      6     40            0           34
   179    ConcatSubPairsSaturated    api ⊂ spec      1     32            0           31
   180    ConcatSubPairsSaturatedGrouped api ⊂ spec      1     32            0           31
   181    ConvertLo16ToFloat32       api = ∅         0      4            0            4
   182    ConvertLo2ToFloat64        api ⊂ spec      3      7            0            4
   183    ConvertLo4ToFloat32        api = ∅         0      4            0            4
   184    ConvertLo4ToFloat64        api = ∅         0      7            0            7
   185    ConvertLo8ToFloat32        api = ∅         0      4            0            4
   186    ConvertLo8ToFloat64        api = ∅         0      7            0            7
   187    ConvertToFloat32           api ⊂ spec     16     23            0            7
   188    ConvertToFloat64           api ⊂ spec     12     16            0            4
   189    ConvertToInt16             api ⊂ spec      4     26            0           22
   190    ConvertToInt32             api ⊂ spec     11     23            0           12
   191    ConvertToInt64             api ⊂ spec      9     16            0            7
   192    ConvertToInt8              api ⊂ spec      4     28            0           24
   193    ConvertToUint16            api ⊂ spec      4     26            0           22
   194    ConvertToUint32            api ⊂ spec     10     23            0           13
   195    ConvertToUint64            api ⊂ spec      9     16            0            7
   196    ConvertToUint8             api ⊂ spec      4     28            0           24
   197    Div                        api ⊂ spec     12     40            0           28
   198    DotProductPairs            api ⊂ spec      3     28            0           25
   199    DotProductPairsSaturated   api ⊂ spec      3     12            0            9
   200    ExtendLo16ToInt16          api = ∅         0      1            0            1
   201    ExtendLo16ToInt32          api = ∅         0      2            0            2
   202    ExtendLo16ToUint16         api = ∅         0      1            0            1
   203    ExtendLo16ToUint32         api = ∅         0      2            0            2
   204    ExtendLo32ToInt16          api = ∅         0      1            0            1
   205    ExtendLo32ToUint16         api = ∅         0      1            0            1
   206    ExtendLo4ToInt64           disjoint        2      3            2            3
   207        api - spec = Int16x8 Int8x16
   208    ExtendLo4ToUint64          disjoint        2      3            2            3
   209        api - spec = Uint16x8 Uint8x16
   210    ExtendLo8ToInt32           disjoint        1      2            1            2
   211        api - spec = Int8x16
   212    ExtendLo8ToInt64           disjoint        1      3            1            3
   213        api - spec = Int8x16
   214    ExtendLo8ToUint32          disjoint        1      2            1            2
   215        api - spec = Uint8x16
   216    ExtendLo8ToUint64          disjoint        1      3            1            3
   217        api - spec = Uint8x16
   218    IsNaN                      api ⊂ spec      6      8            0            2
   219    LeadingZeros               api ⊂ spec     16     32            0           16
   220    Less                       api ⊂ spec     39     40            0            1
   221    LessEqual                  api ⊂ spec     39     40            0            1
   222    MulAdd                     api ⊂ spec     22     40            0           18
   223    NotEqual                   api ⊂ spec     40     56            0           16
   224    OnesCount                  api ⊂ spec     26     32            0            6
   225    Permute                    api ⊂ spec     24     40            0           16
   226    ReduceSum                  api ⊂ spec     32     40            0            8
   227    RotateAllLeft              api ⊂ spec     13     16            0            3
   228    RotateAllRight             api ⊂ spec     13     16            0            3
   229    RotateLeft                 api ⊂ spec      6     16            0           10
   230    RotateRight                api ⊂ spec      6     16            0           10
   231    ScaleSaturated             api ⊂ spec      8     32            0           24
   232    ShiftAllLeft               api ⊂ spec     26     32            0            6
   233    ShiftAllRight              api ⊂ spec     25     32            0            7
   234    ShiftLeft                  api ⊂ spec     18     32            0           14
   235    ShiftRight                 api ⊂ spec     18     32            0           14
   236    StoreArrayMasked           api ⊂ spec     22     30            0            8
   237    SubSaturated               api ⊂ spec     24     32            0            8
   238    ToMask                     api ⊂ spec     16     40            0           24
   239    TrailingZeros              api ⊂ spec     16     32            0           16
   240  

View as plain text