mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 10:40:11 +01:00
glsl: Use bitfieldInsert in ldexp() lowering.
Shaves a few instructions off of lowered ldexp(). Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
3ea64f9093
commit
57109d57f8
1 changed files with 10 additions and 4 deletions
|
|
@ -384,10 +384,10 @@ lower_instructions_visitor::ldexp_to_arith(ir_expression *ir)
|
|||
/* Constants */
|
||||
ir_constant *zeroi = ir_constant::zero(ir, ivec);
|
||||
|
||||
ir_constant *sign_mantissa_mask = new(ir) ir_constant(0x807fffffu, vec_elem);
|
||||
ir_constant *sign_mask = new(ir) ir_constant(0x80000000u, vec_elem);
|
||||
|
||||
ir_constant *exp_shift = new(ir) ir_constant(23u, vec_elem);
|
||||
ir_constant *exp_width = new(ir) ir_constant(8u, vec_elem);
|
||||
|
||||
/* Temporary variables */
|
||||
ir_variable *x = new(ir) ir_variable(ir->type, "x", ir_var_temporary);
|
||||
|
|
@ -449,11 +449,17 @@ lower_instructions_visitor::ldexp_to_arith(ir_expression *ir)
|
|||
*/
|
||||
|
||||
ir_constant *exp_shift_clone = exp_shift->clone(ir, NULL);
|
||||
ir->operation = ir_unop_bitcast_u2f;
|
||||
ir->operands[0] = bit_or(bit_and(bitcast_f2u(x), sign_mantissa_mask),
|
||||
lshift(i2u(resulting_biased_exp), exp_shift_clone));
|
||||
ir->operation = ir_unop_bitcast_i2f;
|
||||
ir->operands[0] = bitfield_insert(bitcast_f2i(x), resulting_biased_exp,
|
||||
exp_shift_clone, exp_width);
|
||||
ir->operands[1] = NULL;
|
||||
|
||||
/* Don't generate new IR that would need to be lowered in an additional
|
||||
* pass.
|
||||
*/
|
||||
if (lowering(BITFIELD_INSERT_TO_BFM_BFI))
|
||||
bitfield_insert_to_bfm_bfi(ir->operands[0]->as_expression());
|
||||
|
||||
this->progress = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue