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) 1809 / 2917 62% [spec-common, spec-all] docs sourced from spec (§3) 2926 / 3175 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) 165 -> 0 [doc-triage] simd mirror drift (§3) 0 -> 0 [comments-yaml] categories.yaml entries (§4) 227 -> 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) 3903 / 5175 75% by (receiver, name) 1809 / 2917 62% by name 275 / 458 60% By build configuration: amd64 1737 / 2692 65% arm64 1068 / 1282 83% 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 1272 / 2247 57% tmplgen 362 / 416 87% wasmgen 337 / 392 86% High-drift-risk names (emitted by >1 generator): covered 130 / 138 94% [spec-all] portable core (comments.yaml .common_methods) 65 / 65 100% [spec-common] spec operations written so far 80 expanding to distinct names 286 expanding to (receiver, name) pairs 2632 ## 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 2926 / 3175 92% [gen-docs, comments-yaml, handwritten-fill, template-docs] simd ∩ archsimd methods with matching docs 253 / 253 100% [gen-docs, comments-yaml] hand-written doc conflicts with spec 165 -> 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 2 -> 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 227 -> 0 [cat-rehome, compiler-ops-impl, cat-delete] unique operation names 198 exported 165 compiler-only categories.yaml entries 42 -> 0 [compiler-ops-impl] exported entries, by field: base 6 -> 0 [cat-rehome] commutative 185 -> 0 [sig-from-spec] constImm 22 -> 0 [cat-rehome] documentation 184 -> 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 183 spec has never defined at all (1100 receivers, counted as coverage in §1 rather than disagreement): relation names Σ|api - spec| Σ|spec - api| (-> 0) (review) api = spec 219 0 0 api ⊂ spec 50 0 773 api ⊃ spec 0 0 0 overlapping 0 0 0 disjoint 6 8 16 api = ∅ 11 0 34 total 286 8 823 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 ReduceSum api ⊂ spec 32 40 0 8 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 26 32 0 6 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