WebAssembly: handle more than int32 argument/return
[oota-llvm.git] / lib / Target / WebAssembly / WebAssemblyInstrControl.td
index 6ec345bf37d0162e7edaf0ede446f8cb5055f10e..3025e24fb843058dac36bba14878537db641eb99 100644 (file)
  * switch: switch statement with fallthrough
  */
 
+multiclass RETURN<WebAssemblyRegClass vt> {
+  def RETURN_#vt : I<(outs), (ins vt:$val), [(WebAssemblyreturn vt:$val)]>;
+}
 let hasSideEffects = 1, isReturn = 1, isTerminator = 1, hasCtrlDep = 1,
     isBarrier = 1 in {
-//FIXME return more than just int32.
-def RETURN : I<(outs), (ins Int32:$val), [(WebAssemblyreturn Int32:$val)]>;
-def RETURN_VOID : I<(outs), (ins), [(WebAssemblyreturn)]>;
+  defm : RETURN<Int32>;
+  defm : RETURN<Int64>;
+  defm : RETURN<Float32>;
+  defm : RETURN<Float64>;
+  def RETURN_VOID : I<(outs), (ins), [(WebAssemblyreturn)]>;
 } // hasSideEffects = 1, isReturn = 1, isTerminator = 1, hasCtrlDep = 1,
   // isBarrier = 1