<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 30, 2018 at 7:18 AM, Iago Toral Quiroga <span dir="ltr"><<a href="mailto:itoral@igalia.com" target="_blank">itoral@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Jose Maria Casanova Crespo <<a href="mailto:jmcasanova@igalia.com">jmcasanova@igalia.com</a>><br>
<br>
16-bit immediates need to replicate the 16-bit immediate value<br>
in both words of the 32-bit value. This needs to be careful<br>
to avoid sign-extension, which the previous implementation was<br>
not handling properly.<br>
<br>
For example, with the previous implementation, storing the value<br>
-3 would generate imm.d = 0xfffffffd due to signed integer sign<br>
extension, which is not correct. Instead, we should cast to<br>
unsigned, which gives us the correct result: imm.ud = 0xfffdfffd.<br>
<br>
We only had a couple of cases hitting this path in the driver<br>
until now, one with value -1, which would work since all bits are<br>
one in this case, and another with value -2 in brw_clip_tri(),<br>
which would hit the aforementioned issue (this case only affects<br>
gen4 although we are not aware of whether this was causing an<br>
actual bug somewhere).<br>
---<br>
 src/intel/compiler/brw_reg.h | 2 +-<br>
 1 file changed, 1 insertion(+), 1 deletion(-)<br>
<br>
diff --git a/src/intel/compiler/brw_reg.h b/src/intel/compiler/brw_reg.h<br>
index dff9b970b2..0084a78af6 100644<br>
--- a/src/intel/compiler/brw_reg.h<br>
+++ b/src/intel/compiler/brw_reg.h<br>
@@ -705,7 +705,7 @@ static inline struct brw_reg<br>
 brw_imm_w(int16_t w)<br>
 {<br>
    struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_<wbr>W);<br>
-   imm.d = w | (w << 16);<br>
+   imm.ud = (uint16_t)w | ((uint16_t)w << 16);<br></blockquote><div><br></div><div>Uh... Is this cast right?  Doing a << 16 on a 16-bit data type should yield undefined results.  I think you want a (uint32_t) cast.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    return imm;<br>
 }<br>
<span class="HOEnZb"><font color="#888888"> <br>
-- <br>
2.14.1<br>
<br>
</font></span></blockquote></div><br></div></div>