Help us shape the future of Go! Take the 2026 Go Developer Survey

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)          1919 / 3025   63%  [spec-common, spec-all]
    17  docs sourced from spec (§3)                      3108 / 3398   91%  [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)         206 -> 0       [doc-triage]
    25  simd mirror drift (§3)                             42 -> 0       [comments-yaml]
    26  categories.yaml entries (§4)                      229 -> 0       [cat-rehome, compiler-ops-impl, cat-delete]
    27  midway/comments.yaml entries spec covers (§4)       2 -> 0       [comments-yaml, spec-all]
    28  
    29  
    30  ## 1. Spec coverage of API   [spec-common, spec-all]
    31  
    32  by (target, receiver, name)                      4174 / 5444   77%
    33  by (receiver, name)                              1919 / 3025   63%
    34  by name                                           278 / 464    60%
    35  
    36  By build configuration:
    37  
    38    amd64                                          1833 / 2788   66%
    39    arm64                                          1171 / 1383   85%
    40    wasm                                            798 / 877    91%
    41    portable                                        372 / 396    94%
    42  
    43  By generator (declarations per tool, counted once per tool per pair):
    44  
    45    hand-written                                    526 / 585    90%
    46    midway                                          372 / 372   100%
    47    simdgen                                        1347 / 2326   58%
    48    tmplgen                                         415 / 463    90%
    49    wasmgen                                         361 / 416    87%
    50  
    51  High-drift-risk names (emitted by >1 generator):
    52  
    53    covered                                         137 / 145    94%  [spec-all]
    54    portable core (comments.yaml .common_methods)    67 / 67    100%  [spec-common]
    55  
    56  spec operations written so far                     92
    57    expanding to distinct names                     289
    58    expanding to (receiver, name) pairs            2676
    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   3108 / 3398   91%  [gen-docs, comments-yaml, handwritten-fill, template-docs]
    91  
    92  simd ∩ archsimd methods with matching docs        294 / 294   100%  [gen-docs, comments-yaml]
    93  
    94  hand-written doc conflicts with spec              206 -> 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                  1 -> 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                               54 -> 0       [doc-triage]
   108  drifted docs in simd mirror (stubs vs emulated)    42 -> 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                           229 -> 0       [cat-rehome, compiler-ops-impl, cat-delete]
   121      unique operation names                        200
   122        exported                                    167
   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                                   187 -> 0       [sig-from-spec]
   128      constImm                                       22 -> 0       [cat-rehome]
   129      documentation                                 186 -> 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            2 -> 0       [comments-yaml, spec-all]
   136  
   137  commutativity disagreements, spec vs categories.yaml     9 -> 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 186 spec has never defined at all
   152  (1098 receivers, counted as coverage in §1 rather than disagreement):
   153  
   154    relation         names  Σ|api - spec|  Σ|spec - api|
   155                                   (-> 0)       (review)
   156    api = spec         221              0              0
   157    api ⊂ spec          51              0            707
   158    api ⊃ spec           0              0              0
   159    overlapping          0              0              0
   160    disjoint             6              8             16
   161    api = ∅             11              0             34
   162    total              289              8            757
   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     10            0            6
   190    ConvertToInt64             api ⊂ spec      9     10            0            1
   191    ConvertToInt8              api ⊂ spec      4     10            0            6
   192    ConvertToUint16            api ⊂ spec      4     10            0            6
   193    ConvertToUint32            api ⊂ spec     10     11            0            1
   194    ConvertToUint64            api ⊂ spec      9     10            0            1
   195    ConvertToUint8             api ⊂ spec      4     10            0            6
   196    Div                        api ⊂ spec     12     40            0           28
   197    DotProductPairs            api ⊂ spec      3     24            0           21
   198    DotProductPairsSaturated   api ⊂ spec      3     12            0            9
   199    ExtendLo16ToInt16          api = ∅         0      1            0            1
   200    ExtendLo16ToInt32          api = ∅         0      2            0            2
   201    ExtendLo16ToUint16         api = ∅         0      1            0            1
   202    ExtendLo16ToUint32         api = ∅         0      2            0            2
   203    ExtendLo32ToInt16          api = ∅         0      1            0            1
   204    ExtendLo32ToUint16         api = ∅         0      1            0            1
   205    ExtendLo4ToInt64           disjoint        2      3            2            3
   206        api - spec = Int16x8 Int8x16
   207    ExtendLo4ToUint64          disjoint        2      3            2            3
   208        api - spec = Uint16x8 Uint8x16
   209    ExtendLo8ToInt32           disjoint        1      2            1            2
   210        api - spec = Int8x16
   211    ExtendLo8ToInt64           disjoint        1      3            1            3
   212        api - spec = Int8x16
   213    ExtendLo8ToUint32          disjoint        1      2            1            2
   214        api - spec = Uint8x16
   215    ExtendLo8ToUint64          disjoint        1      3            1            3
   216        api - spec = Uint8x16
   217    IsNaN                      api ⊂ spec      6      8            0            2
   218    LeadingZeros               api ⊂ spec     16     32            0           16
   219    Len                        api ⊂ spec     40     56            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    ReduceMax                  api ⊂ spec     10     40            0           30
   227    ReduceSum                  api ⊂ spec     34     40            0            6
   228    RotateAllLeft              api ⊂ spec     13     16            0            3
   229    RotateAllRight             api ⊂ spec     13     16            0            3
   230    RotateLeft                 api ⊂ spec      6     16            0           10
   231    RotateRight                api ⊂ spec      6     16            0           10
   232    ScaleSaturated             api ⊂ spec      8     32            0           24
   233    ShiftAllLeft               api ⊂ spec     28     32            0            4
   234    ShiftAllRight              api ⊂ spec     25     32            0            7
   235    ShiftLeft                  api ⊂ spec     18     32            0           14
   236    ShiftRight                 api ⊂ spec     18     32            0           14
   237    StoreArrayMasked           api ⊂ spec     22     30            0            8
   238    SubSaturated               api ⊂ spec     24     32            0            8
   239    ToMask                     api ⊂ spec     16     40            0           24
   240    TrailingZeros              api ⊂ spec     16     32            0           16
   241  

View as plain text