JF Bastien | 5ca0bac | 2015-07-10 18:23:10 +0000 | [diff] [blame] | 1 | // WebAssemblyInstrInteger.td-WebAssembly Integer codegen -------*- tablegen -*- |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | /// |
| 10 | /// \file |
| 11 | /// \brief WebAssembly Integer operand code-gen constructs. |
| 12 | /// |
| 13 | //===----------------------------------------------------------------------===// |
| 14 | |
Dan Gohman | af29bd4 | 2015-11-05 20:42:30 +0000 | [diff] [blame] | 15 | defm ADD : BinaryInt<add, "add">; |
| 16 | defm SUB : BinaryInt<sub, "sub">; |
| 17 | defm MUL : BinaryInt<mul, "mul">; |
| 18 | defm DIV_S : BinaryInt<sdiv, "div_s">; |
| 19 | defm DIV_U : BinaryInt<udiv, "div_u">; |
| 20 | defm REM_S : BinaryInt<srem, "rem_s">; |
| 21 | defm REM_U : BinaryInt<urem, "rem_u">; |
| 22 | defm AND : BinaryInt<and, "and">; |
| 23 | defm OR : BinaryInt<or, "or">; |
| 24 | defm XOR : BinaryInt<xor, "xor">; |
| 25 | defm SHL : BinaryInt<shl, "shl">; |
| 26 | defm SHR_U : BinaryInt<srl, "shr_u">; |
| 27 | defm SHR_S : BinaryInt<sra, "shr_s">; |
JF Bastien | d9767a3 | 2015-07-14 21:13:29 +0000 | [diff] [blame] | 28 | |
Dan Gohman | af29bd4 | 2015-11-05 20:42:30 +0000 | [diff] [blame] | 29 | defm EQ : ComparisonInt<SETEQ, "eq">; |
| 30 | defm NE : ComparisonInt<SETNE, "ne">; |
| 31 | defm LT_S : ComparisonInt<SETLT, "lt_s">; |
| 32 | defm LE_S : ComparisonInt<SETLE, "le_s">; |
| 33 | defm LT_U : ComparisonInt<SETULT, "lt_u">; |
| 34 | defm LE_U : ComparisonInt<SETULE, "le_u">; |
| 35 | defm GT_S : ComparisonInt<SETGT, "gt_s">; |
| 36 | defm GE_S : ComparisonInt<SETGE, "ge_s">; |
| 37 | defm GT_U : ComparisonInt<SETUGT, "gt_u">; |
| 38 | defm GE_U : ComparisonInt<SETUGE, "ge_u">; |
JF Bastien | d9767a3 | 2015-07-14 21:13:29 +0000 | [diff] [blame] | 39 | |
Dan Gohman | af29bd4 | 2015-11-05 20:42:30 +0000 | [diff] [blame] | 40 | defm CLZ : UnaryInt<ctlz, "clz">; |
| 41 | defm CTZ : UnaryInt<cttz, "ctz">; |
| 42 | defm POPCNT : UnaryInt<ctpop, "popcnt">; |
Dan Gohman | 08fc966 | 2015-08-24 16:39:37 +0000 | [diff] [blame] | 43 | |
| 44 | // Expand the "don't care" operations to supported operations. |
Dan Gohman | d0bf981 | 2015-09-26 01:09:44 +0000 | [diff] [blame] | 45 | def : Pat<(ctlz_zero_undef I32:$src), (CLZ_I32 I32:$src)>; |
| 46 | def : Pat<(ctlz_zero_undef I64:$src), (CLZ_I64 I64:$src)>; |
| 47 | def : Pat<(cttz_zero_undef I32:$src), (CTZ_I32 I32:$src)>; |
| 48 | def : Pat<(cttz_zero_undef I64:$src), (CTZ_I64 I64:$src)>; |
Derek Schuff | 6b5c6da | 2015-11-03 22:40:40 +0000 | [diff] [blame] | 49 | |
| 50 | def SELECT_I32 : I<(outs I32:$dst), (ins I32:$cond, I32:$lhs, I32:$rhs), |
Dan Gohman | af29bd4 | 2015-11-05 20:42:30 +0000 | [diff] [blame] | 51 | [(set I32:$dst, (select I32:$cond, I32:$lhs, I32:$rhs))], |
| 52 | "i32.select $dst, $cond, $lhs, $rhs">; |
Derek Schuff | 6b5c6da | 2015-11-03 22:40:40 +0000 | [diff] [blame] | 53 | def SELECT_I64 : I<(outs I64:$dst), (ins I32:$cond, I64:$lhs, I64:$rhs), |
Dan Gohman | af29bd4 | 2015-11-05 20:42:30 +0000 | [diff] [blame] | 54 | [(set I64:$dst, (select I32:$cond, I64:$lhs, I64:$rhs))], |
Dan Gohman | b9ce5a8 | 2015-11-05 20:59:49 +0000 | [diff] [blame] | 55 | "i64.select $dst, $cond, $lhs, $rhs">; |