X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fintel%2Fcompiler%2Fbrw_reg_type.h;h=a17c93ee90ed1eb6d41274c4001b3c6834201c70;hb=5f78524d9b5c579d492470ebd635178339a551a6;hp=e7e8b1987e75eb26ca152f6393c88a48e1a28121;hpb=6a2471b5014f5ecc6b96a1a9c228f9ee3d0fdb98;p=mesa.git diff --git a/src/intel/compiler/brw_reg_type.h b/src/intel/compiler/brw_reg_type.h index e7e8b1987e7..a17c93ee90e 100644 --- a/src/intel/compiler/brw_reg_type.h +++ b/src/intel/compiler/brw_reg_type.h @@ -24,10 +24,18 @@ #ifndef BRW_REG_TYPE_H #define BRW_REG_TYPE_H +#include + #ifdef __cplusplus extern "C" { #endif +#ifdef HAVE_FUNC_ATTRIBUTE_PURE +#define ATTRIBUTE_PURE __attribute__((__pure__)) +#else +#define ATTRIBUTE_PURE +#endif + enum brw_reg_file; struct gen_device_info; @@ -37,6 +45,7 @@ struct gen_device_info; */ enum PACKED brw_reg_type { /** Floating-point types: @{ */ + BRW_REGISTER_TYPE_NF, BRW_REGISTER_TYPE_DF, BRW_REGISTER_TYPE_F, BRW_REGISTER_TYPE_HF, @@ -59,21 +68,67 @@ enum PACKED brw_reg_type { BRW_REGISTER_TYPE_LAST = BRW_REGISTER_TYPE_UV }; +static inline bool +brw_reg_type_is_floating_point(enum brw_reg_type type) +{ + switch (type) { + case BRW_REGISTER_TYPE_NF: + case BRW_REGISTER_TYPE_DF: + case BRW_REGISTER_TYPE_F: + case BRW_REGISTER_TYPE_HF: + return true; + default: + return false; + } +} + +static inline bool +brw_reg_type_is_integer(enum brw_reg_type type) +{ + switch (type) { + case BRW_REGISTER_TYPE_Q: + case BRW_REGISTER_TYPE_UQ: + case BRW_REGISTER_TYPE_D: + case BRW_REGISTER_TYPE_UD: + case BRW_REGISTER_TYPE_W: + case BRW_REGISTER_TYPE_UW: + case BRW_REGISTER_TYPE_B: + case BRW_REGISTER_TYPE_UB: + return true; + default: + return false; + } +} + +#define INVALID_REG_TYPE ((enum brw_reg_type)-1) +#define INVALID_HW_REG_TYPE ((unsigned)-1) + unsigned brw_reg_type_to_hw_type(const struct gen_device_info *devinfo, enum brw_reg_file file, enum brw_reg_type type); -enum brw_reg_type +enum brw_reg_type ATTRIBUTE_PURE brw_hw_type_to_reg_type(const struct gen_device_info *devinfo, enum brw_reg_file file, unsigned hw_type); -#define brw_element_size(devinfo, inst, operand) \ - brw_hw_reg_type_to_size(devinfo, \ - brw_inst_ ## operand ## _reg_file(devinfo, inst), \ - brw_inst_ ## operand ## _reg_hw_type(devinfo, inst)) unsigned -brw_hw_reg_type_to_size(const struct gen_device_info *devinfo, - enum brw_reg_file file, unsigned hw_type); +brw_reg_type_to_a16_hw_3src_type(const struct gen_device_info *devinfo, + enum brw_reg_type type); + +unsigned +brw_reg_type_to_a1_hw_3src_type(const struct gen_device_info *devinfo, + enum brw_reg_type type); + +enum brw_reg_type +brw_a16_hw_3src_type_to_reg_type(const struct gen_device_info *devinfo, + unsigned hw_type); + +enum brw_reg_type +brw_a1_hw_3src_type_to_reg_type(const struct gen_device_info *devinfo, + unsigned hw_type, unsigned exec_type); + +unsigned +brw_reg_type_to_size(enum brw_reg_type type); const char * brw_reg_type_to_letters(enum brw_reg_type type);