intel/compiler: implement is_zero, is_one, is_negative_one for 8-bit/16-bit
There are no 8-bit immediates, so assert in that case. 16-bit immediates are replicated in each word of a 32-bit immediate, so we only need to check the lower 16-bits. v2: - Fix is_zero with half-float to consider -0 as well (Jason). - Fix is_negative_one for word type. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
e64be391dd
commit
44e1affaec
|
@ -713,11 +713,20 @@ backend_reg::is_zero() const
|
|||
if (file != IMM)
|
||||
return false;
|
||||
|
||||
assert(type_sz(type) > 1);
|
||||
|
||||
switch (type) {
|
||||
case BRW_REGISTER_TYPE_HF:
|
||||
assert((d & 0xffff) == ((d >> 16) & 0xffff));
|
||||
return (d & 0xffff) == 0 || (d & 0xffff) == 0x8000;
|
||||
case BRW_REGISTER_TYPE_F:
|
||||
return f == 0;
|
||||
case BRW_REGISTER_TYPE_DF:
|
||||
return df == 0;
|
||||
case BRW_REGISTER_TYPE_W:
|
||||
case BRW_REGISTER_TYPE_UW:
|
||||
assert((d & 0xffff) == ((d >> 16) & 0xffff));
|
||||
return (d & 0xffff) == 0;
|
||||
case BRW_REGISTER_TYPE_D:
|
||||
case BRW_REGISTER_TYPE_UD:
|
||||
return d == 0;
|
||||
|
@ -735,11 +744,20 @@ backend_reg::is_one() const
|
|||
if (file != IMM)
|
||||
return false;
|
||||
|
||||
assert(type_sz(type) > 1);
|
||||
|
||||
switch (type) {
|
||||
case BRW_REGISTER_TYPE_HF:
|
||||
assert((d & 0xffff) == ((d >> 16) & 0xffff));
|
||||
return (d & 0xffff) == 0x3c00;
|
||||
case BRW_REGISTER_TYPE_F:
|
||||
return f == 1.0f;
|
||||
case BRW_REGISTER_TYPE_DF:
|
||||
return df == 1.0;
|
||||
case BRW_REGISTER_TYPE_W:
|
||||
case BRW_REGISTER_TYPE_UW:
|
||||
assert((d & 0xffff) == ((d >> 16) & 0xffff));
|
||||
return (d & 0xffff) == 1;
|
||||
case BRW_REGISTER_TYPE_D:
|
||||
case BRW_REGISTER_TYPE_UD:
|
||||
return d == 1;
|
||||
|
@ -757,11 +775,19 @@ backend_reg::is_negative_one() const
|
|||
if (file != IMM)
|
||||
return false;
|
||||
|
||||
assert(type_sz(type) > 1);
|
||||
|
||||
switch (type) {
|
||||
case BRW_REGISTER_TYPE_HF:
|
||||
assert((d & 0xffff) == ((d >> 16) & 0xffff));
|
||||
return (d & 0xffff) == 0xbc00;
|
||||
case BRW_REGISTER_TYPE_F:
|
||||
return f == -1.0;
|
||||
case BRW_REGISTER_TYPE_DF:
|
||||
return df == -1.0;
|
||||
case BRW_REGISTER_TYPE_W:
|
||||
assert((d & 0xffff) == ((d >> 16) & 0xffff));
|
||||
return (d & 0xffff) == 0xffff;
|
||||
case BRW_REGISTER_TYPE_D:
|
||||
return d == -1;
|
||||
case BRW_REGISTER_TYPE_Q:
|
||||
|
|
Loading…
Reference in New Issue