*
* uint64_t lshift(uint64_t x, int c)
* {
+ * c %= 64;
+ *
* if (c == 0) return x;
*
* uint32_t lo = LO(x), hi = HI(x);
*/
nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x);
nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x);
+ y = nir_iand_imm(b, y, 0x3f);
nir_ssa_def *reverse_count = nir_iabs(b, nir_iadd(b, y, nir_imm_int(b, -32)));
nir_ssa_def *lo_shifted = nir_ishl(b, x_lo, y);
*
* uint64_t arshift(uint64_t x, int c)
* {
+ * c %= 64;
+ *
* if (c == 0) return x;
*
* uint32_t lo = LO(x);
*/
nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x);
nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x);
+ y = nir_iand_imm(b, y, 0x3f);
nir_ssa_def *reverse_count = nir_iabs(b, nir_iadd(b, y, nir_imm_int(b, -32)));
nir_ssa_def *lo_shifted = nir_ushr(b, x_lo, y);
*
* uint64_t rshift(uint64_t x, int c)
* {
+ * c %= 64;
+ *
* if (c == 0) return x;
*
* uint32_t lo = LO(x), hi = HI(x);
nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x);
nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x);
+ y = nir_iand_imm(b, y, 0x3f);
nir_ssa_def *reverse_count = nir_iabs(b, nir_iadd(b, y, nir_imm_int(b, -32)));
nir_ssa_def *lo_shifted = nir_ushr(b, x_lo, y);