i965: split EU defines to brw_eu_defines.h
[mesa.git] / src / mesa / drivers / dri / i965 / brw_inst.h
index f45e56400c9dd9e928e879230351ce1568481385..a0b8fb66dd6eae1aebdef3d571683ecb30a374fe 100644 (file)
 #ifndef BRW_INST_H
 #define BRW_INST_H
 
+#include <assert.h>
 #include <stdint.h>
 
-#include "brw_context.h"
+#include "brw_eu_defines.h"
+#include "common/gen_device_info.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -52,7 +54,7 @@ static inline void brw_inst_set_bits(brw_inst *inst,
 
 #define FC(name, high, low, assertions)                       \
 static inline void                                            \
-brw_inst_set_##name(const struct brw_device_info *devinfo,    \
+brw_inst_set_##name(const struct gen_device_info *devinfo,    \
                     brw_inst *inst, uint64_t v)               \
 {                                                             \
    assert(assertions);                                        \
@@ -60,7 +62,7 @@ brw_inst_set_##name(const struct brw_device_info *devinfo,    \
    brw_inst_set_bits(inst, high, low, v);                     \
 }                                                             \
 static inline uint64_t                                        \
-brw_inst_##name(const struct brw_device_info *devinfo,        \
+brw_inst_##name(const struct gen_device_info *devinfo,        \
                 const brw_inst *inst)                         \
 {                                                             \
    assert(assertions);                                        \
@@ -94,14 +96,14 @@ brw_inst_##name(const struct brw_device_info *devinfo,        \
  */
 #define FF(name, hi4, lo4, hi45, lo45, hi5, lo5, hi6, lo6, hi7, lo7, hi8, lo8)\
 static inline void                                                            \
-brw_inst_set_##name(const struct brw_device_info *devinfo,                    \
+brw_inst_set_##name(const struct gen_device_info *devinfo,                    \
                     brw_inst *inst, uint64_t value)                           \
 {                                                                             \
    BOUNDS(hi4, lo4, hi45, lo45, hi5, lo5, hi6, lo6, hi7, lo7, hi8, lo8)       \
    brw_inst_set_bits(inst, high, low, value);                                 \
 }                                                                             \
 static inline uint64_t                                                        \
-brw_inst_##name(const struct brw_device_info *devinfo, const brw_inst *inst)  \
+brw_inst_##name(const struct gen_device_info *devinfo, const brw_inst *inst)  \
 {                                                                             \
    BOUNDS(hi4, lo4, hi45, lo45, hi5, lo5, hi6, lo6, hi7, lo7, hi8, lo8)       \
    return brw_inst_bits(inst, high, low);                                     \
@@ -248,7 +250,7 @@ F(3src_opcode,           6,  0)
  *  @{
  */
 static inline void
-brw_inst_set_uip(const struct brw_device_info *devinfo,
+brw_inst_set_uip(const struct gen_device_info *devinfo,
                  brw_inst *inst, int32_t value)
 {
    assert(devinfo->gen >= 6);
@@ -263,7 +265,7 @@ brw_inst_set_uip(const struct brw_device_info *devinfo,
 }
 
 static inline int32_t
-brw_inst_uip(const struct brw_device_info *devinfo, const brw_inst *inst)
+brw_inst_uip(const struct gen_device_info *devinfo, const brw_inst *inst)
 {
    assert(devinfo->gen >= 6);
 
@@ -275,7 +277,7 @@ brw_inst_uip(const struct brw_device_info *devinfo, const brw_inst *inst)
 }
 
 static inline void
-brw_inst_set_jip(const struct brw_device_info *devinfo,
+brw_inst_set_jip(const struct gen_device_info *devinfo,
                  brw_inst *inst, int32_t value)
 {
    assert(devinfo->gen >= 6);
@@ -283,14 +285,14 @@ brw_inst_set_jip(const struct brw_device_info *devinfo,
    if (devinfo->gen >= 8) {
       brw_inst_set_bits(inst, 127, 96, (uint32_t)value);
    } else {
-      assert(value <= (1 << 16) - 1);
-      assert(value > -(1 << 16));
+      assert(value <= (1 << 15) - 1);
+      assert(value >= -(1 << 15));
       brw_inst_set_bits(inst, 111, 96, (uint16_t)value);
    }
 }
 
 static inline int32_t
-brw_inst_jip(const struct brw_device_info *devinfo, const brw_inst *inst)
+brw_inst_jip(const struct gen_device_info *devinfo, const brw_inst *inst)
 {
    assert(devinfo->gen >= 6);
 
@@ -304,14 +306,14 @@ brw_inst_jip(const struct brw_device_info *devinfo, const brw_inst *inst)
 /** Like FC, but using int16_t to handle negative jump targets. */
 #define FJ(name, high, low, assertions)                                       \
 static inline void                                                            \
-brw_inst_set_##name(const struct brw_device_info *devinfo, brw_inst *inst, int16_t v) \
+brw_inst_set_##name(const struct gen_device_info *devinfo, brw_inst *inst, int16_t v) \
 {                                                                             \
    assert(assertions);                                                        \
    (void) devinfo;                                                            \
    brw_inst_set_bits(inst, high, low, (uint16_t) v);                          \
 }                                                                             \
 static inline int16_t                                                         \
-brw_inst_##name(const struct brw_device_info *devinfo, const brw_inst *inst)  \
+brw_inst_##name(const struct gen_device_info *devinfo, const brw_inst *inst)  \
 {                                                                             \
    assert(assertions);                                                        \
    (void) devinfo;                                                            \
@@ -554,30 +556,33 @@ F(pi_message_data,   MD(7),   MD(0))
  *  @{
  */
 static inline int
-brw_inst_imm_d(const struct brw_device_info *devinfo, const brw_inst *insn)
+brw_inst_imm_d(const struct gen_device_info *devinfo, const brw_inst *insn)
 {
    (void) devinfo;
    return brw_inst_bits(insn, 127, 96);
 }
 
 static inline unsigned
-brw_inst_imm_ud(const struct brw_device_info *devinfo, const brw_inst *insn)
+brw_inst_imm_ud(const struct gen_device_info *devinfo, const brw_inst *insn)
 {
    (void) devinfo;
    return brw_inst_bits(insn, 127, 96);
 }
 
 static inline float
-brw_inst_imm_f(const struct brw_device_info *devinfo, const brw_inst *insn)
+brw_inst_imm_f(const struct gen_device_info *devinfo, const brw_inst *insn)
 {
-   fi_type ft;
+   union {
+      float f;
+      uint32_t u;
+   } ft;
    (void) devinfo;
    ft.u = brw_inst_bits(insn, 127, 96);
    return ft.f;
 }
 
 static inline double
-brw_inst_imm_df(const struct brw_device_info *devinfo, const brw_inst *insn)
+brw_inst_imm_df(const struct gen_device_info *devinfo, const brw_inst *insn)
 {
    union {
       double d;
@@ -589,7 +594,7 @@ brw_inst_imm_df(const struct brw_device_info *devinfo, const brw_inst *insn)
 }
 
 static inline void
-brw_inst_set_imm_d(const struct brw_device_info *devinfo,
+brw_inst_set_imm_d(const struct gen_device_info *devinfo,
                    brw_inst *insn, int value)
 {
    (void) devinfo;
@@ -597,7 +602,7 @@ brw_inst_set_imm_d(const struct brw_device_info *devinfo,
 }
 
 static inline void
-brw_inst_set_imm_ud(const struct brw_device_info *devinfo,
+brw_inst_set_imm_ud(const struct gen_device_info *devinfo,
                     brw_inst *insn, unsigned value)
 {
    (void) devinfo;
@@ -605,17 +610,20 @@ brw_inst_set_imm_ud(const struct brw_device_info *devinfo,
 }
 
 static inline void
-brw_inst_set_imm_f(const struct brw_device_info *devinfo,
+brw_inst_set_imm_f(const struct gen_device_info *devinfo,
                    brw_inst *insn, float value)
 {
-   fi_type ft;
+   union {
+      float f;
+      uint32_t u;
+   } ft;
    (void) devinfo;
    ft.f = value;
    brw_inst_set_bits(insn, 127, 96, ft.u);
 }
 
 static inline void
-brw_inst_set_imm_df(const struct brw_device_info *devinfo,
+brw_inst_set_imm_df(const struct gen_device_info *devinfo,
                     brw_inst *insn, double value)
 {
    union {
@@ -627,12 +635,20 @@ brw_inst_set_imm_df(const struct brw_device_info *devinfo,
    brw_inst_set_bits(insn, 127, 64, dt.u);
 }
 
+static inline void
+brw_inst_set_imm_uq(const struct gen_device_info *devinfo,
+                    brw_inst *insn, uint64_t value)
+{
+   (void) devinfo;
+   brw_inst_set_bits(insn, 127, 64, value);
+}
+
 /** @} */
 
 /* The AddrImm fields are split into two discontiguous sections on Gen8+ */
 #define BRW_IA1_ADDR_IMM(reg, g4_high, g4_low, g8_nine, g8_high, g8_low) \
 static inline void                                                       \
-brw_inst_set_##reg##_ia1_addr_imm(const struct brw_device_info *devinfo, \
+brw_inst_set_##reg##_ia1_addr_imm(const struct gen_device_info *devinfo, \
                                   brw_inst *inst,                        \
                                   unsigned value)                        \
 {                                                                        \
@@ -645,7 +661,7 @@ brw_inst_set_##reg##_ia1_addr_imm(const struct brw_device_info *devinfo, \
    }                                                                     \
 }                                                                        \
 static inline unsigned                                                   \
-brw_inst_##reg##_ia1_addr_imm(const struct brw_device_info *devinfo,     \
+brw_inst_##reg##_ia1_addr_imm(const struct gen_device_info *devinfo,     \
                               const brw_inst *inst)                      \
 {                                                                        \
    if (devinfo->gen >= 8) {                                              \
@@ -664,7 +680,7 @@ BRW_IA1_ADDR_IMM(dst,   57, 48,  47,  56, 48)
 
 #define BRW_IA16_ADDR_IMM(reg, g4_high, g4_low, g8_nine, g8_high, g8_low) \
 static inline void                                                        \
-brw_inst_set_##reg##_ia16_addr_imm(const struct brw_device_info *devinfo, \
+brw_inst_set_##reg##_ia16_addr_imm(const struct gen_device_info *devinfo, \
                                    brw_inst *inst, unsigned value)        \
 {                                                                         \
    assert((value & ~0x3ff) == 0);                                         \
@@ -676,7 +692,7 @@ brw_inst_set_##reg##_ia16_addr_imm(const struct brw_device_info *devinfo, \
    }                                                                      \
 }                                                                         \
 static inline unsigned                                                    \
-brw_inst_##reg##_ia16_addr_imm(const struct brw_device_info *devinfo,     \
+brw_inst_##reg##_ia16_addr_imm(const struct gen_device_info *devinfo,     \
                                const brw_inst *inst)                      \
 {                                                                         \
    if (devinfo->gen >= 8) {                                               \
@@ -782,7 +798,7 @@ brw_compact_inst_set_bits(brw_compact_inst *inst, unsigned high, unsigned low,
 
 #define FC(name, high, low, assertions)                            \
 static inline void                                                 \
-brw_compact_inst_set_##name(const struct brw_device_info *devinfo, \
+brw_compact_inst_set_##name(const struct gen_device_info *devinfo, \
                             brw_compact_inst *inst, unsigned v)    \
 {                                                                  \
    assert(assertions);                                             \
@@ -790,7 +806,7 @@ brw_compact_inst_set_##name(const struct brw_device_info *devinfo, \
    brw_compact_inst_set_bits(inst, high, low, v);                  \
 }                                                                  \
 static inline unsigned                                             \
-brw_compact_inst_##name(const struct brw_device_info *devinfo,     \
+brw_compact_inst_##name(const struct gen_device_info *devinfo,     \
                         const brw_compact_inst *inst)              \
 {                                                                  \
    assert(assertions);                                             \