From a5fcff6628c641d01954d0af4aee0e723a570cad Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Wed, 30 Dec 2015 14:48:22 -0500 Subject: glsl: Fix undefined shifts. Shifting into the sign bit is undefined, as is shifting by 32. Reviewed-by: Jordan Justen Reviewed-by: Ian Romanick --- src/glsl/nir/nir_opcodes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/glsl/nir') diff --git a/src/glsl/nir/nir_opcodes.py b/src/glsl/nir/nir_opcodes.py index 855095f..d7ba0b6 100644 --- a/src/glsl/nir/nir_opcodes.py +++ b/src/glsl/nir/nir_opcodes.py @@ -516,7 +516,7 @@ int bits = src0, offset = src1; if (offset < 0 || bits < 0 || offset + bits > 32) dst = 0; /* undefined per the spec */ else - dst = ((1 << bits)- 1) << offset; + dst = ((1ull << bits) - 1) << offset; """) opcode("ldexp", 0, tfloat, [0, 0], [tfloat, tint], "", """ @@ -578,7 +578,7 @@ if (bits == 0) { } else if (bits < 0 || offset < 0 || offset + bits > 32) { dst = 0; /* undefined per the spec */ } else { - dst = (base >> offset) & ((1 << bits) - 1); + dst = (base >> offset) & ((1ull << bits) - 1); } """) opcode("ibitfield_extract", 0, tint, @@ -618,7 +618,7 @@ if (bits == 0) { } else if (offset < 0 || bits < 0 || bits + offset > 32) { dst = 0; } else { - unsigned mask = ((1 << bits) - 1) << offset; + unsigned mask = ((1ull << bits) - 1) << offset; dst = (base & ~mask) | ((insert << bits) & mask); } """) -- cgit v1.1