WebAssemblyInstrFormats.td revision 288943
1183906Skmacy// WebAssemblyInstrFormats.td - WebAssembly Instruction Formats -*- tblgen -*-// 2183906Skmacy// 3183906Skmacy// The LLVM Compiler Infrastructure 4255040Sgibbs// 5183906Skmacy// This file is distributed under the University of Illinois Open Source 6183906Skmacy// License. See LICENSE.TXT for details. 7183906Skmacy// 8185386Sdfr//===----------------------------------------------------------------------===// 9185386Sdfr/// 10185386Sdfr/// \file 11183906Skmacy/// \brief WebAssembly instruction format definitions. 12185386Sdfr/// 13185386Sdfr//===----------------------------------------------------------------------===// 14185386Sdfr 15185386Sdfr// WebAssembly Instruction Format 16185386Sdfrclass WebAssemblyInst<string cstr> : Instruction { 17185386Sdfr field bits<0> Inst; // Instruction encoding. 18183906Skmacy let Namespace = "WebAssembly"; 19183906Skmacy let Pattern = []; 20183906Skmacy let Constraints = cstr; 21183906Skmacy} 22183906Skmacy 23183906Skmacy// Normal instructions 24183906Skmacyclass I<dag oops, dag iops, list<dag> pattern, string cstr = ""> 25183906Skmacy : WebAssemblyInst<cstr> { 26183906Skmacy dag OutOperandList = oops; 27183906Skmacy dag InOperandList = iops; 28183906Skmacy let Pattern = pattern; 29183906Skmacy} 30183906Skmacy 31183906Skmacy// Unary and binary instructions, for the local types that WebAssembly supports. 32183906Skmacymulticlass UnaryInt<SDNode node> { 33183906Skmacy def _I32 : I<(outs Int32:$dst), (ins Int32:$src), 34183906Skmacy [(set Int32:$dst, (node Int32:$src))]>; 35255040Sgibbs def _I64 : I<(outs Int64:$dst), (ins Int64:$src), 36255040Sgibbs [(set Int64:$dst, (node Int64:$src))]>; 37183906Skmacy} 38183906Skmacymulticlass BinaryInt<SDNode node> { 39185637Sdfr def _I32 : I<(outs Int32:$dst), (ins Int32:$lhs, Int32:$rhs), 40185637Sdfr [(set Int32:$dst, (node Int32:$lhs, Int32:$rhs))]>; 41183906Skmacy def _I64 : I<(outs Int64:$dst), (ins Int64:$lhs, Int64:$rhs), 42183906Skmacy [(set Int64:$dst, (node Int64:$lhs, Int64:$rhs))]>; 43183906Skmacy} 44185637Sdfrmulticlass UnaryFP<SDNode node> { 45185386Sdfr def _F32 : I<(outs Float32:$dst), (ins Float32:$src), 46185386Sdfr [(set Float32:$dst, (node Float32:$src))]>; 47185386Sdfr def _F64 : I<(outs Float64:$dst), (ins Float64:$src), 48183906Skmacy [(set Float64:$dst, (node Float64:$src))]>; 49183906Skmacy} 50183906Skmacymulticlass BinaryFP<SDNode node> { 51183906Skmacy def _F32 : I<(outs Float32:$dst), (ins Float32:$lhs, Float32:$rhs), 52185386Sdfr [(set Float32:$dst, (node Float32:$lhs, Float32:$rhs))]>; 53183906Skmacy def _F64 : I<(outs Float64:$dst), (ins Float64:$lhs, Float64:$rhs), 54185386Sdfr [(set Float64:$dst, (node Float64:$lhs, Float64:$rhs))]>; 55185386Sdfr} 56185386Sdfr