#ifndef BRW_REG_TYPE_H
#define BRW_REG_TYPE_H
+#include <stdbool.h>
+
#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;
*/
enum PACKED brw_reg_type {
/** Floating-point types: @{ */
+ BRW_REGISTER_TYPE_NF,
BRW_REGISTER_TYPE_DF,
BRW_REGISTER_TYPE_F,
BRW_REGISTER_TYPE_HF,
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);
-const char *
-brw_reg_type_to_letters(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_hw_reg_type_to_letters(const struct gen_device_info *devinfo,
- enum brw_reg_file file, unsigned hw_type);
+brw_reg_type_to_letters(enum brw_reg_type type);
#ifdef __cplusplus
}