i965: Add functions for brw_reg_type <-> hw 3src type
Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
This commit is contained in:
parent
4c857d1f3b
commit
3f14150e9a
|
@ -79,6 +79,27 @@ static const struct {
|
||||||
[BRW_REGISTER_TYPE_UV] = { INVALID, BRW_HW_IMM_TYPE_UV },
|
[BRW_REGISTER_TYPE_UV] = { INVALID, BRW_HW_IMM_TYPE_UV },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* SNB adds 3-src instructions (MAD and LRP) that only operate on floats, so
|
||||||
|
* the types were implied. IVB adds BFE and BFI2 that operate on doublewords
|
||||||
|
* and unsigned doublewords, so a new field is also available in the da3src
|
||||||
|
* struct (part of struct brw_instruction.bits1 in brw_structs.h) to select
|
||||||
|
* dst and shared-src types.
|
||||||
|
*/
|
||||||
|
enum hw_3src_reg_type {
|
||||||
|
GEN7_3SRC_TYPE_F = 0,
|
||||||
|
GEN7_3SRC_TYPE_D = 1,
|
||||||
|
GEN7_3SRC_TYPE_UD = 2,
|
||||||
|
GEN7_3SRC_TYPE_DF = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const enum hw_3src_reg_type gen7_3src_type[] = {
|
||||||
|
[0 ... BRW_REGISTER_TYPE_LAST] = INVALID,
|
||||||
|
[BRW_REGISTER_TYPE_F] = GEN7_3SRC_TYPE_F,
|
||||||
|
[BRW_REGISTER_TYPE_D] = GEN7_3SRC_TYPE_D,
|
||||||
|
[BRW_REGISTER_TYPE_UD] = GEN7_3SRC_TYPE_UD,
|
||||||
|
[BRW_REGISTER_TYPE_DF] = GEN7_3SRC_TYPE_DF,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a brw_reg_type enumeration value into the hardware representation.
|
* Convert a brw_reg_type enumeration value into the hardware representation.
|
||||||
*
|
*
|
||||||
|
@ -125,6 +146,35 @@ brw_hw_type_to_reg_type(const struct gen_device_info *devinfo,
|
||||||
unreachable("not reached");
|
unreachable("not reached");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a brw_reg_type enumeration value into the hardware representation
|
||||||
|
* for a 3-src instruction
|
||||||
|
*/
|
||||||
|
unsigned
|
||||||
|
brw_reg_type_to_hw_3src_type(const struct gen_device_info *devinfo,
|
||||||
|
enum brw_reg_type type)
|
||||||
|
{
|
||||||
|
assert(type < ARRAY_SIZE(gen7_3src_type));
|
||||||
|
assert(gen7_3src_type[type] != -1);
|
||||||
|
return gen7_3src_type[type];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the hardware representation for a 3-src instruction into a
|
||||||
|
* brw_reg_type enumeration value.
|
||||||
|
*/
|
||||||
|
enum brw_reg_type
|
||||||
|
brw_hw_3src_type_to_reg_type(const struct gen_device_info *devinfo,
|
||||||
|
unsigned hw_type)
|
||||||
|
{
|
||||||
|
for (enum brw_reg_type i = 0; i <= BRW_REGISTER_TYPE_LAST; i++) {
|
||||||
|
if (gen7_3src_type[i] == hw_type) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unreachable("not reached");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the element size given a register type.
|
* Return the element size given a register type.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -88,6 +88,14 @@ enum brw_reg_type ATTRIBUTE_PURE
|
||||||
brw_hw_type_to_reg_type(const struct gen_device_info *devinfo,
|
brw_hw_type_to_reg_type(const struct gen_device_info *devinfo,
|
||||||
enum brw_reg_file file, unsigned hw_type);
|
enum brw_reg_file file, unsigned hw_type);
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
brw_reg_type_to_hw_3src_type(const struct gen_device_info *devinfo,
|
||||||
|
enum brw_reg_type type);
|
||||||
|
|
||||||
|
enum brw_reg_type
|
||||||
|
brw_hw_3src_type_to_reg_type(const struct gen_device_info *devinfo,
|
||||||
|
unsigned hw_type);
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
brw_reg_type_to_size(enum brw_reg_type type);
|
brw_reg_type_to_size(enum brw_reg_type type);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue