wai-ops: interp::Kernels, a host's kernels for some operators (integer-
operators §6), and run_with, which asks the host first for each operator and
computes it itself where the host declines; the plan, every check and range
policy, the state and every refusal stay the interpreter's. interp::rq exposes
the requantisation so a host's outputs are the interpreter's. run and
run_observed are unchanged (interp::Reference, a host that has none).
wai-rs int_ops: Host lends the interpreter this crate's fast convolution and
transposed convolution (int_kernels::conv_acc_i128, each output finished with
interp::rq) under a fast Policy, and declines under the reference policy, for
geometry the kernel does not cover, operands past its bound, or a value that
would leave i64. run1 runs through it.
Retargeted equivalence, both halves against the interpreter:
- per operator (int_ops::equivalence): 400 random convolutions and transposed
convolutions, every rounding mode, bias kind and multiplier choice, under every
fast policy against the interpreter alone; the fast kernel must actually run;
a check range refuses before any kernel;
- per decoder (tests/int_synth_ops.rs): every committed int_synth vector, and
the fixtures' base, through the lowering under the reference and four fast
policies, the same bytes.
The inverse-GDN arm the draft had waits for M4.
Co-Authored-By: Claude Opus 5.5 <[email protected]>