diff options
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrConv.td | 85 |
1 files changed, 54 insertions, 31 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrConv.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrConv.td index ca1068f7f39..760b4ce5f41 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrConv.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrConv.td @@ -13,35 +13,58 @@ /// //===----------------------------------------------------------------------===// -/* - * TODO(jfb): Add the following. - * - * i32.wrap[i64]: wrap a 64-bit integer to a 32-bit integer - * i32.trunc_s[f32]: truncate a 32-bit float to a signed 32-bit integer - * i32.trunc_s[f64]: truncate a 64-bit float to a signed 32-bit integer - * i32.trunc_u[f32]: truncate a 32-bit float to an unsigned 32-bit integer - * i32.trunc_u[f64]: truncate a 64-bit float to an unsigned 32-bit integer - * i32.reinterpret[f32]: reinterpret the bits of a 32-bit float as a 32-bit integer - * i64.extend_s[i32]: extend a signed 32-bit integer to a 64-bit integer - * i64.extend_u[i32]: extend an unsigned 32-bit integer to a 64-bit integer - * i64.trunc_s[f32]: truncate a 32-bit float to a signed 64-bit integer - * i64.trunc_s[f64]: truncate a 64-bit float to a signed 64-bit integer - * i64.trunc_u[f32]: truncate a 32-bit float to an unsigned 64-bit integer - * i64.trunc_u[f64]: truncate a 64-bit float to an unsigned 64-bit integer - * i64.reinterpret[f64]: reinterpret the bits of a 64-bit float as a 64-bit integer - * f32.demote[f64]: demote a 64-bit float to a 32-bit float - * f32.convert_s[i32]: convert a signed 32-bit integer to a 32-bit float - * f32.convert_s[i64]: convert a signed 64-bit integer to a 32-bit float - * f32.convert_u[i32]: convert an unsigned 32-bit integer to a 32-bit float - * f32.convert_u[i64]: convert an unsigned 64-bit integer to a 32-bit float - * f32.reinterpret[i32]: reinterpret the bits of a 32-bit integer as a 32-bit float - * f64.promote[f32]: promote a 32-bit float to a 64-bit float - * f64.convert_s[i32]: convert a signed 32-bit integer to a 64-bit float - * f64.convert_s[i64]: convert a signed 64-bit integer to a 64-bit float - * f64.convert_u[i32]: convert an unsigned 32-bit integer to a 64-bit float - * f64.convert_u[i64]: convert an unsigned 64-bit integer to a 64-bit float - * f64.reinterpret[i64]: reinterpret the bits of a 64-bit integer as a 64-bit float - */ - -def WRAP_I64_I32 : I<(outs I32:$dst), (ins I64:$src), +def I32_WRAP_I64 : I<(outs I32:$dst), (ins I64:$src), [(set I32:$dst, (trunc I64:$src))]>; + +def I64_EXTEND_S_I32 : I<(outs I64:$dst), (ins I32:$src), + [(set I64:$dst, (sext I32:$src))]>; +def I64_EXTEND_U_I32 : I<(outs I64:$dst), (ins I32:$src), + [(set I64:$dst, (zext I32:$src))]>; + +def I32_TRUNC_S_F32 : I<(outs I32:$dst), (ins F32:$src), + [(set I32:$dst, (fp_to_sint F32:$src))]>; +def I32_TRUNC_U_F32 : I<(outs I32:$dst), (ins F32:$src), + [(set I32:$dst, (fp_to_uint F32:$src))]>; +def I64_TRUNC_S_F32 : I<(outs I64:$dst), (ins F32:$src), + [(set I64:$dst, (fp_to_sint F32:$src))]>; +def I64_TRUNC_U_F32 : I<(outs I64:$dst), (ins F32:$src), + [(set I64:$dst, (fp_to_uint F32:$src))]>; +def I32_TRUNC_S_F64 : I<(outs I32:$dst), (ins F64:$src), + [(set I32:$dst, (fp_to_sint F64:$src))]>; +def I32_TRUNC_U_F64 : I<(outs I32:$dst), (ins F64:$src), + [(set I32:$dst, (fp_to_uint F64:$src))]>; +def I64_TRUNC_S_F64 : I<(outs I64:$dst), (ins F64:$src), + [(set I64:$dst, (fp_to_sint F64:$src))]>; +def I64_TRUNC_U_F64 : I<(outs I64:$dst), (ins F64:$src), + [(set I64:$dst, (fp_to_uint F64:$src))]>; + +def F32_CONVERT_S_I32 : I<(outs F32:$dst), (ins I32:$src), + [(set F32:$dst, (sint_to_fp I32:$src))]>; +def F32_CONVERT_U_I32 : I<(outs F32:$dst), (ins I32:$src), + [(set F32:$dst, (uint_to_fp I32:$src))]>; +def F64_CONVERT_S_I32 : I<(outs F64:$dst), (ins I32:$src), + [(set F64:$dst, (sint_to_fp I32:$src))]>; +def F64_CONVERT_U_I32 : I<(outs F64:$dst), (ins I32:$src), + [(set F64:$dst, (uint_to_fp I32:$src))]>; +def F32_CONVERT_S_I64 : I<(outs F32:$dst), (ins I64:$src), + [(set F32:$dst, (sint_to_fp I64:$src))]>; +def F32_CONVERT_U_I64 : I<(outs F32:$dst), (ins I64:$src), + [(set F32:$dst, (uint_to_fp I64:$src))]>; +def F64_CONVERT_S_I64 : I<(outs F64:$dst), (ins I64:$src), + [(set F64:$dst, (sint_to_fp I64:$src))]>; +def F64_CONVERT_U_I64 : I<(outs F64:$dst), (ins I64:$src), + [(set F64:$dst, (uint_to_fp I64:$src))]>; + +def F64_PROMOTE_F32 : I<(outs F64:$dst), (ins F32:$src), + [(set F64:$dst, (fextend F32:$src))]>; +def F32_DEMOTE_F64 : I<(outs F32:$dst), (ins F64:$src), + [(set F32:$dst, (fround F64:$src))]>; + +def I32_REINTERPRET_F32 : I<(outs I32:$dst), (ins F32:$src), + [(set I32:$dst, (bitconvert F32:$src))]>; +def F32_REINTERPRET_I32 : I<(outs F32:$dst), (ins I32:$src), + [(set F32:$dst, (bitconvert I32:$src))]>; +def I64_REINTERPRET_F64 : I<(outs I64:$dst), (ins F64:$src), + [(set I64:$dst, (bitconvert F64:$src))]>; +def F64_REINTERPRET_I64 : I<(outs F64:$dst), (ins I64:$src), + [(set F64:$dst, (bitconvert I64:$src))]>; |