|
23 | 23 | (SRAI [0] x) => x
|
24 | 24 | (SRLI [0] x) => x
|
25 | 25 | (SLLI [0] x) => x
|
| 26 | + |
| 27 | +// "Zicond" Extension for Integer Conditional Operations |
| 28 | +// (x == 0) ? x : y |
| 29 | +(CondSelect <t> x y (SEQZ x)) && buildcfg.GORISCV64 >= 23 => (CZEROEQZ <t> y x) |
| 30 | +// (z == 0) ? (x + y) : y |
| 31 | +(CondSelect <t> (ADD x y) x (SEQZ z)) && buildcfg.GORISCV64 >= 23 => (ADD x (CZERONEZ <t> y z)) |
| 32 | +// (z != 0) ? (x + y) : y |
| 33 | +(CondSelect <t> (ADD x y) x (SNEZ z)) && buildcfg.GORISCV64 >= 23 => (ADD x (CZEROEQZ <t> y z)) |
| 34 | +// (z == 0) ? (x - y) : y |
| 35 | +(CondSelect <t> (SUB x y) x (SEQZ z)) && buildcfg.GORISCV64 >= 23 => (SUB x (CZERONEZ <t> y z)) |
| 36 | +// (z != 0) ? (x - y) : y |
| 37 | +(CondSelect <t> (SUB x y) x (SNEZ z)) && buildcfg.GORISCV64 >= 23 => (SUB x (CZEROEQZ <t> y z)) |
| 38 | +// (z == 0) ? (x | y) : y |
| 39 | +(CondSelect <t> (OR x y) x (SEQZ z)) && buildcfg.GORISCV64 >= 23 => (OR x (CZERONEZ <t> y z)) |
| 40 | +// (z != 0) ? (x | y) : y |
| 41 | +(CondSelect <t> (OR x y) x (SNEZ z)) && buildcfg.GORISCV64 >= 23 => (OR x (CZEROEQZ <t> y z)) |
| 42 | +// (z == 0) ? (x ^ y) : y |
| 43 | +(CondSelect <t> (XOR x y) x (SEQZ z)) && buildcfg.GORISCV64 >= 23 => (XOR x (CZERONEZ <t> y z)) |
| 44 | +// (z != 0) ? (x ^ y) : y |
| 45 | +(CondSelect <t> (XOR x y) x (SNEZ z)) && buildcfg.GORISCV64 >= 23 => (XOR x (CZEROEQZ <t> y z)) |
| 46 | +// (z == 0) ? (x & y) : y |
| 47 | +(CondSelect <t> (AND x y) x (SEQZ z)) && buildcfg.GORISCV64 >= 23 => (OR (AND <t> x y) (CZEROEQZ <t> x z)) |
| 48 | +// (z != 0) ? (x & y) : y |
| 49 | +(CondSelect <t> (AND x y) x (SNEZ z)) && buildcfg.GORISCV64 >= 23 => (OR (AND <t> x y) (CZERONEZ <t> x z)) |
| 50 | +// (z == 0) ? x : y |
| 51 | +(CondSelect <t> x y (SEQZ z)) && buildcfg.GORISCV64 >= 23 => (OR (CZERONEZ <t> x z) (CZEROEQZ <t> y z)) |
| 52 | +// (z != 0) ? x : y |
| 53 | +(CondSelect <t> x y (SNEZ z)) && buildcfg.GORISCV64 >= 23 => (OR (CZEROEQZ <t> x z) (CZERONEZ <t> y z)) |
| 54 | +// Make sure we can rewrite all CondSelects. |
| 55 | +(CondSelect <t> x y cond) && buildcfg.GORISCV64 >= 23 => (OR (CZEROEQZ <t> x cond) (CZERONEZ <t> y cond)) |
0 commit comments