mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
i965: Define virtual instruction to calculate the high 32 bits of a multiply.
This instruction will translate to the MUL/MACH sequence that computes the high 32-bits of the result of a 64-bit multiply. Before Gen8 integer operations that used the accumulator were limited to 8-wide, but the SIMD lowering pass can easily be hooked up to sidestep this limitation, we just need a virtual opcode to represent the MUL/MACH sequence in the IR. Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
f7ac4ef4ee
commit
8f5d0988ea
6 changed files with 13 additions and 0 deletions
|
|
@ -1214,6 +1214,11 @@ enum opcode {
|
|||
* GLSL barrier()
|
||||
*/
|
||||
SHADER_OPCODE_BARRIER,
|
||||
|
||||
/**
|
||||
* Calculate the high 32-bits of a 32x32 multiply.
|
||||
*/
|
||||
SHADER_OPCODE_MULH,
|
||||
};
|
||||
|
||||
enum brw_urb_write_flags {
|
||||
|
|
|
|||
|
|
@ -534,6 +534,7 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
|
|||
|
||||
case BRW_OPCODE_MACH:
|
||||
case BRW_OPCODE_MUL:
|
||||
case SHADER_OPCODE_MULH:
|
||||
case BRW_OPCODE_ADD:
|
||||
case BRW_OPCODE_OR:
|
||||
case BRW_OPCODE_AND:
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ is_expression(const fs_visitor *v, const fs_inst *const inst)
|
|||
case BRW_OPCODE_CMPN:
|
||||
case BRW_OPCODE_ADD:
|
||||
case BRW_OPCODE_MUL:
|
||||
case SHADER_OPCODE_MULH:
|
||||
case BRW_OPCODE_FRC:
|
||||
case BRW_OPCODE_RNDU:
|
||||
case BRW_OPCODE_RNDD:
|
||||
|
|
|
|||
|
|
@ -778,6 +778,8 @@ brw_instruction_name(enum opcode op)
|
|||
return "cs_terminate";
|
||||
case SHADER_OPCODE_BARRIER:
|
||||
return "barrier";
|
||||
case SHADER_OPCODE_MULH:
|
||||
return "mulh";
|
||||
}
|
||||
|
||||
unreachable("not reached");
|
||||
|
|
@ -996,6 +998,7 @@ backend_instruction::is_commutative() const
|
|||
case BRW_OPCODE_XOR:
|
||||
case BRW_OPCODE_ADD:
|
||||
case BRW_OPCODE_MUL:
|
||||
case SHADER_OPCODE_MULH:
|
||||
return true;
|
||||
case BRW_OPCODE_SEL:
|
||||
/* MIN and MAX are commutative. */
|
||||
|
|
@ -1103,6 +1106,7 @@ backend_instruction::can_do_saturate() const
|
|||
case BRW_OPCODE_MATH:
|
||||
case BRW_OPCODE_MOV:
|
||||
case BRW_OPCODE_MUL:
|
||||
case SHADER_OPCODE_MULH:
|
||||
case BRW_OPCODE_PLN:
|
||||
case BRW_OPCODE_RNDD:
|
||||
case BRW_OPCODE_RNDE:
|
||||
|
|
|
|||
|
|
@ -179,6 +179,7 @@ try_constant_propagate(const struct brw_device_info *devinfo,
|
|||
|
||||
case BRW_OPCODE_MACH:
|
||||
case BRW_OPCODE_MUL:
|
||||
case SHADER_OPCODE_MULH:
|
||||
case BRW_OPCODE_ADD:
|
||||
case BRW_OPCODE_OR:
|
||||
case BRW_OPCODE_AND:
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ is_expression(const vec4_instruction *const inst)
|
|||
case BRW_OPCODE_CMPN:
|
||||
case BRW_OPCODE_ADD:
|
||||
case BRW_OPCODE_MUL:
|
||||
case SHADER_OPCODE_MULH:
|
||||
case BRW_OPCODE_FRC:
|
||||
case BRW_OPCODE_RNDU:
|
||||
case BRW_OPCODE_RNDD:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue