diff options
| author | Thomas Lively <tlively@google.com> | 2018-08-23 00:36:43 +0000 |
|---|---|---|
| committer | Thomas Lively <tlively@google.com> | 2018-08-23 00:36:43 +0000 |
| commit | 914f0f20a42039cda4eeb6607065556c0c08577f (patch) | |
| tree | c90b1ea65751735ecfc450e11925ee71b3df2a93 /llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td | |
| parent | ab0011ebc015ac5ccd5146720df9d0faf5ad1d42 (diff) | |
| download | bcm5719-llvm-914f0f20a42039cda4eeb6607065556c0c08577f.tar.gz bcm5719-llvm-914f0f20a42039cda4eeb6607065556c0c08577f.zip | |
[WebAssembly][NFC] Move specific instruction formats to specific files
Summary:
WebAssemblyInstrFormats.td retains only multiclasses that are used in
multiple other tablegen files.
Reviewers: aheejin, dschuff
Subscribers: sbc100, jgravelle-google, sunfish, jfb, llvm-commits
Differential Revision: https://reviews.llvm.org/D51143
llvm-svn: 340503
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td index fc8944ee898..26bb53e72d8 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td @@ -18,6 +18,51 @@ def ImmI#SIZE : ImmLeaf<i32, "return (Imm & ((1UL << "#SIZE#") - 1)) == Imm;">; foreach SIZE = [2, 4, 8, 16, 32] in def LaneIdx#SIZE : ImmLeaf<i32, "return 0 <= Imm && Imm < "#SIZE#";">; + +multiclass SIMDBinaryFP<SDNode node, string name, bits<32> baseInst> { + defm _F32x4 : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), + (outs), (ins), + [(set (v4f32 V128:$dst), (node V128:$lhs, V128:$rhs))], + !strconcat("f32x4.", + !strconcat(name, "\t$dst, $lhs, $rhs")), + !strconcat("f32x4.", name), baseInst>; + defm _F64x2 : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), + (outs), (ins), + [(set (v2f64 V128:$dst), (node V128:$lhs, V128:$rhs))], + !strconcat("f64x2.", + !strconcat(name, "\t$dst, $lhs, $rhs")), + !strconcat("f64x2.", name), !add(baseInst, 1)>; +} +multiclass SIMDBinaryIntNoI64x2<SDNode node, string name, bits<32> baseInst> { + defm _I8x16 : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), + (outs), (ins), + [(set (v16i8 V128:$dst), (node V128:$lhs, V128:$rhs))], + !strconcat("i8x16.", + !strconcat(name, "\t$dst, $lhs, $rhs")), + !strconcat("i8x16.", name), baseInst>; + defm _I16x8 : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), + (outs), (ins), + [(set (v8i16 V128:$dst), (node V128:$lhs, V128:$rhs))], + !strconcat("i16x8.", + !strconcat(name, "\t$dst, $lhs, $rhs")), + !strconcat("i16x8.", name), !add(baseInst, 1)>; + defm _I32x4 : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), + (outs), (ins), + [(set (v4i32 V128:$dst), (node V128:$lhs, V128:$rhs))], + !strconcat("i32x4.", + !strconcat(name, "\t$dst, $lhs, $rhs")), + !strconcat("i32x4.", name), !add(baseInst, 2)>; +} +multiclass SIMDBinaryInt<SDNode node, string name, bits<32> baseInst> { + defm "" : SIMDBinaryIntNoI64x2<node, name, baseInst>; + defm _I64x2 : SIMD_I<(outs V128:$dst), (ins V128:$lhs, V128:$rhs), + (outs), (ins), + [(set (v2i64 V128:$dst), (node V128:$lhs, V128:$rhs))], + !strconcat("i64x2.", + !strconcat(name, "\t$dst, $lhs, $rhs")), + !strconcat("i64x2.", name), !add(baseInst, 3)>; +} + // const vectors multiclass ConstVec<ValueType vec_t, dag ops, dag pat, string args> { defm CONST_V128_#vec_t : SIMD_I<(outs V128:$dst), ops, (outs), ops, |

