aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler/nir/nir_builder.h
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-10-18 11:59:40 -0500
committerJason Ekstrand <[email protected]>2018-12-16 21:03:02 +0000
commit3191a823726053242696a7d96f37abd5475fadcc (patch)
tree0a0e4df0a26cdb134392f0453c2ab28ab8a76be3 /src/compiler/nir/nir_builder.h
parent2fe8708ffda532fe13aab96a19bc1fb9c3fec68f (diff)
nir: Add support for 1-bit data types
This commit adds support for 1-bit Booleans and integers. Booleans obviously take a value of true or false. Because we have to define the semantics of 1-bit signed and unsigned integers, we define uint1_t to take values of 0 and 1 and int1_t to take values of 0 and -1. 1-bit arithmetic is then well-defined in the usual way, just with fewer bits. The definition of int1_t and uint1_t doesn't usually matter but we do need something for purposes of constant folding. Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Tested-by: Bas Nieuwenhuizen <[email protected]>
Diffstat (limited to 'src/compiler/nir/nir_builder.h')
-rw-r--r--src/compiler/nir/nir_builder.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h
index e0cdcd4ba23..d8abb7fd027 100644
--- a/src/compiler/nir/nir_builder.h
+++ b/src/compiler/nir/nir_builder.h
@@ -332,7 +332,10 @@ nir_imm_intN_t(nir_builder *build, uint64_t x, unsigned bit_size)
memset(&v, 0, sizeof(v));
assert(bit_size <= 64);
- v.i64[0] = x & (~0ull >> (64 - bit_size));
+ if (bit_size == 1)
+ v.b[0] = x & 1;
+ else
+ v.i64[0] = x & (~0ull >> (64 - bit_size));
return nir_build_imm(build, 1, bit_size, v);
}
@@ -352,6 +355,13 @@ nir_imm_ivec4(nir_builder *build, int x, int y, int z, int w)
}
static inline nir_ssa_def *
+nir_imm_boolN_t(nir_builder *build, bool x, unsigned bit_size)
+{
+ /* We use a 0/-1 convention for all booleans regardless of size */
+ return nir_imm_intN_t(build, -(int)x, bit_size);
+}
+
+static inline nir_ssa_def *
nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3)
{