glsl: Make is_16bit_constant from i965 an ir_constant method.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 7 Apr 2014 01:34:59 +0000 (18:34 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 8 Apr 2014 07:01:53 +0000 (00:01 -0700)
commit7540be22d16bce68163a6478fa2d7a5aa1d9844d
tree7fef4ad7c96b68bf1acd7451514151cf905f5f83
parentbd69f65f90ecfa45e43a72504d277cb39f00e1c1
glsl: Make is_16bit_constant from i965 an ir_constant method.

The i965 MUL instruction doesn't natively support 32-bit by 32-bit
integer multiplication; additional instructions (MACH/MOV) are required.
However, we can avoid those if we know one of the operands can be
represented in 16 bits or less.  The vector backend's is_16bit_constant
static helper function checks for this.

We want to be able to use it in the scalar backend as well, which means
moving the function to a more generally-usable location.  Since it isn't
i965 specific, I decided to make it an ir_constant method, in case it
ends up being useful to other people as well.

v2: Rename from is_16bit_integer_constant to is_uint16_constant, as
    suggested by Ilia Mirkin.  Update comments to clarify that it does
    apply to both int and uint types, as long as the value is
    non-negative and fits in 16-bits.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/glsl/ir.cpp
src/glsl/ir.h
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp