i965/vec4: Simplify visit(ir_expression *)'s result_src/dst setup.
Using dst_reg(this, ir->type) automatically sets the writemask to the proper size for the type; src_reg(dst_reg) preserves that. This should be equivalent, but less code. Note that src_reg(dst_reg) either uses SWIZZLE_XXXX or SWIZZLE_XYZW, so the old code did need the manual writemask adjustment, since it constructed the registers the other way around. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
cb36e79f96
commit
f5c3f095b9
|
@ -1259,8 +1259,6 @@ vec4_visitor::visit(ir_expression *ir)
|
||||||
{
|
{
|
||||||
unsigned int operand;
|
unsigned int operand;
|
||||||
src_reg op[Elements(ir->operands)];
|
src_reg op[Elements(ir->operands)];
|
||||||
src_reg result_src;
|
|
||||||
dst_reg result_dst;
|
|
||||||
vec4_instruction *inst;
|
vec4_instruction *inst;
|
||||||
|
|
||||||
if (ir->operation == ir_binop_add) {
|
if (ir->operation == ir_binop_add) {
|
||||||
|
@ -1273,6 +1271,12 @@ vec4_visitor::visit(ir_expression *ir)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Storage for our result. Ideally for an assignment we'd be using
|
||||||
|
* the actual storage for the result here, instead.
|
||||||
|
*/
|
||||||
|
dst_reg result_dst(this, ir->type);
|
||||||
|
src_reg result_src(result_dst);
|
||||||
|
|
||||||
for (operand = 0; operand < ir->get_num_operands(); operand++) {
|
for (operand = 0; operand < ir->get_num_operands(); operand++) {
|
||||||
this->result.file = BAD_FILE;
|
this->result.file = BAD_FILE;
|
||||||
ir->operands[operand]->accept(this);
|
ir->operands[operand]->accept(this);
|
||||||
|
@ -1289,19 +1293,8 @@ vec4_visitor::visit(ir_expression *ir)
|
||||||
assert(!ir->operands[operand]->type->is_matrix());
|
assert(!ir->operands[operand]->type->is_matrix());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Storage for our result. Ideally for an assignment we'd be using
|
|
||||||
* the actual storage for the result here, instead.
|
|
||||||
*/
|
|
||||||
result_src = src_reg(this, ir->type);
|
|
||||||
/* convenience for the emit functions below. */
|
|
||||||
result_dst = dst_reg(result_src);
|
|
||||||
/* If nothing special happens, this is the result. */
|
/* If nothing special happens, this is the result. */
|
||||||
this->result = result_src;
|
this->result = result_src;
|
||||||
/* Limit writes to the channels that will be used by result_src later.
|
|
||||||
* This does limit this temp's use as a temporary for multi-instruction
|
|
||||||
* sequences.
|
|
||||||
*/
|
|
||||||
result_dst.writemask = (1 << ir->type->vector_elements) - 1;
|
|
||||||
|
|
||||||
switch (ir->operation) {
|
switch (ir->operation) {
|
||||||
case ir_unop_logic_not:
|
case ir_unop_logic_not:
|
||||||
|
|
Loading…
Reference in New Issue