Support wasm select instruction with V128-typed operands on AArch64.

* this requires upgrading to wasmparser 0.67.0.

* There are no CLIF side changes because the CLIF `select` instruction is
  polymorphic enough.

* on aarch64, there is unfortunately no conditional-move (csel) instruction on
  vectors.  This patch adds a synthetic instruction `VecCSel` which *does*
  behave like that.  At emit time, this is emitted as an if-then-else diamond
  (4 insns).

* aarch64 implementation is otherwise straightforwards.
This commit is contained in:
Julian Seward
2020-11-11 17:09:57 +01:00
committed by julian-seward1
parent 9ced345aed
commit 41e87a2f99
15 changed files with 122 additions and 18 deletions

View File

@@ -3879,6 +3879,17 @@ fn test_aarch64_binemit() {
"ld1r { v0.8b }, [x25]",
));
insns.push((
Inst::VecCSel {
rd: writable_vreg(5),
rn: vreg(10),
rm: vreg(19),
cond: Cond::Gt,
},
"6C000054651EB34E02000014451DAA4E",
"vcsel v5.16b, v10.16b, v19.16b, gt (if-then-else diamond)",
));
insns.push((
Inst::Extend {
rd: writable_xreg(1),