// WebAssemblyInstrFormats.td - WebAssembly Instruction Formats -*- tblgen -*-// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// \brief WebAssembly instruction format definitions. /// //===----------------------------------------------------------------------===// // WebAssembly Instruction Format class WebAssemblyInst : Instruction { field bits<0> Inst; // Instruction encoding. let Namespace = "WebAssembly"; let Pattern = []; let Constraints = cstr; } // Normal instructions class I pattern, string cstr = ""> : WebAssemblyInst { dag OutOperandList = oops; dag InOperandList = iops; let Pattern = pattern; } // Unary and binary instructions, for the local types that WebAssembly supports. multiclass UnaryInt { def _I32 : I<(outs Int32:$dst), (ins Int32:$src), [(set Int32:$dst, (node Int32:$src))]>; def _I64 : I<(outs Int64:$dst), (ins Int64:$src), [(set Int64:$dst, (node Int64:$src))]>; } multiclass BinaryInt { def _I32 : I<(outs Int32:$dst), (ins Int32:$lhs, Int32:$rhs), [(set Int32:$dst, (node Int32:$lhs, Int32:$rhs))]>; def _I64 : I<(outs Int64:$dst), (ins Int64:$lhs, Int64:$rhs), [(set Int64:$dst, (node Int64:$lhs, Int64:$rhs))]>; } multiclass UnaryFP { def _F32 : I<(outs Float32:$dst), (ins Float32:$src), [(set Float32:$dst, (node Float32:$src))]>; def _F64 : I<(outs Float64:$dst), (ins Float64:$src), [(set Float64:$dst, (node Float64:$src))]>; } multiclass BinaryFP { def _F32 : I<(outs Float32:$dst), (ins Float32:$lhs, Float32:$rhs), [(set Float32:$dst, (node Float32:$lhs, Float32:$rhs))]>; def _F64 : I<(outs Float64:$dst), (ins Float64:$lhs, Float64:$rhs), [(set Float64:$dst, (node Float64:$lhs, Float64:$rhs))]>; }