| SIMD spec transition progress |
| |
| Generated by archsimd/_gen/cmd/specstats; do not edit. |
| Regenerate with: go run ./cmd/specstats -w |
| |
| Every fraction heads for 100%; every count heads for zero. Bracketed |
| names are SPEC-TRANSITION.md tasks that move the figure. Indented, |
| untagged numbers are context breaking down the figure above them. |
| String, Len, ToArch, and FromArch are excluded throughout (§2.7). |
| |
| |
| ## Summary |
| |
| Heading for 100%: |
| |
| spec coverage, by (receiver, name) (§1) 1823 / 2929 62% [spec-common, spec-all] |
| docs sourced from spec (§3) 2958 / 3206 92% [gen-docs, comments-yaml, handwritten-fill, template-docs] |
| |
| Heading for zero: |
| |
| type mismatches with spec (§2) 0 -> 0 [fill-enforce] |
| type divergence across targets (§2) 0 -> 0 [fill-enforce] |
| spec coverage gaps in defined names (§5) 8 -> 0 [spec-all, convert-lo, mask-bits] |
| hand-written doc conflicts with spec (§3) 164 -> 0 [doc-triage] |
| simd mirror drift (§3) 0 -> 0 [comments-yaml] |
| categories.yaml entries (§4) 229 -> 0 [cat-rehome, compiler-ops-impl, cat-delete] |
| midway/comments.yaml entries spec covers (§4) 0 -> 0 [comments-yaml, spec-all] |
| |
| |
| ## 1. Spec coverage of API [spec-common, spec-all] |
| |
| by (target, receiver, name) 3934 / 5204 76% |
| by (receiver, name) 1823 / 2929 62% |
| by name 276 / 462 60% |
| |
| By build configuration: |
| |
| amd64 1737 / 2692 65% |
| arm64 1099 / 1311 84% |
| wasm 750 / 829 90% |
| portable 348 / 372 94% |
| |
| By generator (declarations per tool, counted once per tool per pair): |
| |
| hand-written 502 / 561 89% |
| midway 348 / 348 100% |
| simdgen 1293 / 2272 57% |
| tmplgen 373 / 421 89% |
| wasmgen 337 / 392 86% |
| |
| High-drift-risk names (emitted by >1 generator): |
| |
| covered 135 / 143 94% [spec-all] |
| portable core (comments.yaml .common_methods) 65 / 65 100% [spec-common] |
| |
| spec operations written so far 81 |
| expanding to distinct names 287 |
| expanding to (receiver, name) pairs 2672 |
| |
| |
| ## 2. Signatures and names [named-results, fill-enforce] |
| |
| Spec/API disagreement, for declarations spec covers. As in specdoc.Fill, |
| a named argument whose name differs from spec's is a mismatch; an unnamed |
| one (or _) is not, and is counted below as a name Fill fills in instead: |
| |
| type mismatches 0 -> 0 [fill-enforce] |
| parameter-name mismatches 0 -> 0 [named-results] |
| result-name mismatches 0 -> 0 [named-results] |
| |
| Names spec gives that the API leaves unnamed, for declarations spec covers: |
| |
| declarations with unnamed parameters 0 -> 0 [named-results] |
| declarations with unnamed results 0 -> 0 [named-results] |
| |
| API consistency across targets (the "one meaning" invariant), for |
| (receiver, name) pairs declared for more than one target. An unnamed |
| argument agrees with any name: |
| |
| divergent parameter or result types 0 -> 0 [fill-enforce] |
| divergent parameter names 0 -> 0 [fill-enforce, spec-all] |
| divergent result names 0 -> 0 [named-results] |
| |
| |
| ## 3. Documentation [gen-docs, comments-yaml, handwritten-fill, template-docs] |
| |
| A declaration counts as sourced from spec when its doc comment begins with |
| spec's text (a prefix test, because Fill leaves generator notes below). |
| |
| covered declarations whose doc comes from spec 2958 / 3206 92% [gen-docs, comments-yaml, handwritten-fill, template-docs] |
| |
| simd ∩ archsimd methods with matching docs 270 / 270 100% [gen-docs, comments-yaml] |
| |
| hand-written doc conflicts with spec 164 -> 0 [doc-triage] |
| archsimd/clmul_arm64.go 4 -> 0 [doc-triage] |
| archsimd/extra_amd64.go 6 -> 0 [doc-triage] |
| archsimd/maskrange_128.go 4 -> 0 [doc-triage] |
| archsimd/maskrange_amd64.go 12 -> 0 [doc-triage] |
| archsimd/ops_emulated_amd64.go 48 -> 0 [doc-triage] |
| archsimd/ops_emulated_arm64.go 1 -> 0 [doc-triage] |
| archsimd/ops_emulated_wasm.go 29 -> 0 [doc-triage] |
| archsimd/shuffles_amd64.go 12 -> 0 [doc-triage] |
| archsimd/slicepart_128.go 8 -> 0 [doc-triage] |
| archsimd/slicepart_amd64.go 4 -> 0 [doc-triage] |
| archsimd/slicepart_arm64.go 12 -> 0 [doc-triage] |
| archsimd/slicepart_wasm.go 12 -> 0 [doc-triage] |
| simd_emulated.go 12 -> 0 [doc-triage] |
| drifted docs in simd mirror (stubs vs emulated) 0 -> 0 [comments-yaml] |
| mirrored declarations 372 |
| |
| |
| ## 4. Retiring the old inputs |
| [comments-yaml, cat-rehome, compiler-ops-impl, cat-delete] |
| |
| categories.yaml's exported entries are emptied field by field: template-docs |
| removes documentation, cat-rehome removes the rest, sig-from-spec removes |
| commutative, and cat-delete removes the file. Compiler-only entries are |
| handled wholesale by compiler-ops-impl. |
| |
| categories.yaml entries 229 -> 0 [cat-rehome, compiler-ops-impl, cat-delete] |
| unique operation names 200 |
| exported 167 |
| compiler-only categories.yaml entries 42 -> 0 [compiler-ops-impl] |
| |
| exported entries, by field: |
| base 6 -> 0 [cat-rehome] |
| commutative 187 -> 0 [sig-from-spec] |
| constImm 22 -> 0 [cat-rehome] |
| documentation 186 -> 0 [cat-rehome] |
| elemBits 14 -> 0 [cat-rehome] |
| out 20 -> 0 [cat-rehome] |
| regexpTag 25 -> 0 [cat-rehome] |
| signed 6 -> 0 [cat-rehome] |
| |
| midway/comments.yaml entries spec covers 0 -> 0 [comments-yaml, spec-all] |
| |
| commutativity disagreements, spec vs categories.yaml 7 -> 0 [spec-all] |
| |
| |
| ## 5. Spec/API coverage disagreement detail [spec-all, convert-lo, mask-bits] |
| |
| Where both sides define a name, receivers only the API declares are spec |
| bugs (a constraint is wrong or a sibling function is missing). Receivers |
| only spec generates are a review queue -- spec is deliberately maximal. |
| |
| spec misses receivers of a name it defines 8 -> 0 [spec-all, convert-lo, mask-bits] |
| declarations affected, counting each target 8 -> 0 [spec-all, convert-lo, mask-bits] |
| spec operations implemented nowhere 1 -> 0 [spec-all] |
| TrailingZeros |
| |
| Every name either side defines, less the 186 spec has never defined at all |
| (1098 receivers, counted as coverage in §1 rather than disagreement): |
| |
| relation names Σ|api - spec| Σ|spec - api| |
| (-> 0) (review) |
| api = spec 219 0 0 |
| api ⊂ spec 51 0 799 |
| api ⊃ spec 0 0 0 |
| overlapping 0 0 0 |
| disjoint 6 8 16 |
| api = ∅ 11 0 34 |
| total 287 8 849 |
| |
| Names that disagree, with api - spec receivers (the defects): |
| |
| name relation |api| |spec| |api - spec| |spec - api| |
| AddSaturated api ⊂ spec 24 32 0 8 |
| Average api ⊂ spec 12 32 0 20 |
| CarrylessMultiplyEven api ⊂ spec 4 16 0 12 |
| CarrylessMultiplyEvenOdd api ⊂ spec 3 16 0 13 |
| CarrylessMultiplyOdd api ⊂ spec 4 16 0 12 |
| CarrylessMultiplyOddEven api ⊂ spec 3 16 0 13 |
| ConcatAddPairs api ⊂ spec 10 40 0 30 |
| ConcatAddPairsGrouped api ⊂ spec 6 40 0 34 |
| ConcatAddPairsSaturated api ⊂ spec 1 32 0 31 |
| ConcatAddPairsSaturatedGrouped api ⊂ spec 1 32 0 31 |
| ConcatSubPairs api ⊂ spec 6 40 0 34 |
| ConcatSubPairsGrouped api ⊂ spec 6 40 0 34 |
| ConcatSubPairsSaturated api ⊂ spec 1 32 0 31 |
| ConcatSubPairsSaturatedGrouped api ⊂ spec 1 32 0 31 |
| ConvertLo16ToFloat32 api = ∅ 0 4 0 4 |
| ConvertLo2ToFloat64 api ⊂ spec 3 7 0 4 |
| ConvertLo4ToFloat32 api = ∅ 0 4 0 4 |
| ConvertLo4ToFloat64 api = ∅ 0 7 0 7 |
| ConvertLo8ToFloat32 api = ∅ 0 4 0 4 |
| ConvertLo8ToFloat64 api = ∅ 0 7 0 7 |
| ConvertToFloat32 api ⊂ spec 16 23 0 7 |
| ConvertToFloat64 api ⊂ spec 12 16 0 4 |
| ConvertToInt16 api ⊂ spec 4 26 0 22 |
| ConvertToInt32 api ⊂ spec 11 23 0 12 |
| ConvertToInt64 api ⊂ spec 9 16 0 7 |
| ConvertToInt8 api ⊂ spec 4 28 0 24 |
| ConvertToUint16 api ⊂ spec 4 26 0 22 |
| ConvertToUint32 api ⊂ spec 10 23 0 13 |
| ConvertToUint64 api ⊂ spec 9 16 0 7 |
| ConvertToUint8 api ⊂ spec 4 28 0 24 |
| Div api ⊂ spec 12 40 0 28 |
| DotProductPairs api ⊂ spec 3 28 0 25 |
| DotProductPairsSaturated api ⊂ spec 3 12 0 9 |
| ExtendLo16ToInt16 api = ∅ 0 1 0 1 |
| ExtendLo16ToInt32 api = ∅ 0 2 0 2 |
| ExtendLo16ToUint16 api = ∅ 0 1 0 1 |
| ExtendLo16ToUint32 api = ∅ 0 2 0 2 |
| ExtendLo32ToInt16 api = ∅ 0 1 0 1 |
| ExtendLo32ToUint16 api = ∅ 0 1 0 1 |
| ExtendLo4ToInt64 disjoint 2 3 2 3 |
| api - spec = Int16x8 Int8x16 |
| ExtendLo4ToUint64 disjoint 2 3 2 3 |
| api - spec = Uint16x8 Uint8x16 |
| ExtendLo8ToInt32 disjoint 1 2 1 2 |
| api - spec = Int8x16 |
| ExtendLo8ToInt64 disjoint 1 3 1 3 |
| api - spec = Int8x16 |
| ExtendLo8ToUint32 disjoint 1 2 1 2 |
| api - spec = Uint8x16 |
| ExtendLo8ToUint64 disjoint 1 3 1 3 |
| api - spec = Uint8x16 |
| IsNaN api ⊂ spec 6 8 0 2 |
| LeadingZeros api ⊂ spec 16 32 0 16 |
| Less api ⊂ spec 39 40 0 1 |
| LessEqual api ⊂ spec 39 40 0 1 |
| MulAdd api ⊂ spec 22 40 0 18 |
| NotEqual api ⊂ spec 40 56 0 16 |
| OnesCount api ⊂ spec 26 32 0 6 |
| Permute api ⊂ spec 24 40 0 16 |
| ReduceMax api ⊂ spec 10 40 0 30 |
| ReduceSum api ⊂ spec 34 40 0 6 |
| RotateAllLeft api ⊂ spec 13 16 0 3 |
| RotateAllRight api ⊂ spec 13 16 0 3 |
| RotateLeft api ⊂ spec 6 16 0 10 |
| RotateRight api ⊂ spec 6 16 0 10 |
| ScaleSaturated api ⊂ spec 8 32 0 24 |
| ShiftAllLeft api ⊂ spec 28 32 0 4 |
| ShiftAllRight api ⊂ spec 25 32 0 7 |
| ShiftLeft api ⊂ spec 18 32 0 14 |
| ShiftRight api ⊂ spec 18 32 0 14 |
| StoreArrayMasked api ⊂ spec 22 30 0 8 |
| SubSaturated api ⊂ spec 24 32 0 8 |
| ToMask api ⊂ spec 16 40 0 24 |
| TrailingZeros api ⊂ spec 16 32 0 16 |