[Beignet] [PATCH] add atomic operators output for GEN_IR and gen disa.
Yang, Rong R
rong.r.yang at intel.com
Mon May 18 20:24:48 PDT 2015
LGTM, thanks.
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> xionghu.luo at intel.com
> Sent: Tuesday, April 21, 2015 09:46
> To: beignet at lists.freedesktop.org
> Cc: Luo, Xionghu
> Subject: [Beignet] [PATCH] add atomic operators output for GEN_IR and gen
> disa.
>
> From: Luo Xionghu <xionghu.luo at intel.com>
>
> the function types of atomic instruction are useful for analyzing the gen ir
> and disassembly.
>
> Signed-off-by: Luo Xionghu <xionghu.luo at intel.com>
> ---
> backend/src/backend/gen/gen_mesa_disasm.c | 40
> ++++++++++++++++++++++++++-----
> backend/src/ir/instruction.cpp | 27 ++++++++++++++++++++-
> 2 files changed, 60 insertions(+), 7 deletions(-)
>
> diff --git a/backend/src/backend/gen/gen_mesa_disasm.c
> b/backend/src/backend/gen/gen_mesa_disasm.c
> index 711b943..0b5591f 100644
> --- a/backend/src/backend/gen/gen_mesa_disasm.c
> +++ b/backend/src/backend/gen/gen_mesa_disasm.c
> @@ -449,6 +449,24 @@ static const char
> *data_port1_data_cache_msg_type[] = {
> [13] = "Typed Surface Write",
> };
>
> +static const char *atomic_opration_type[] = {
> + [1] = "and",
> + [2] = "or",
> + [3] = "xor",
> + [4] = "xchg",
> + [5] = "inc",
> + [6] = "dec",
> + [7] = "add",
> + [8] = "sub",
> + [9] = "rsub",
> + [10] = "imax",
> + [11] = "imin",
> + [12] = "umax",
> + [13] = "umin",
> + [14] = "cmpxchg",
> + [15] = "invalid"
> +};
> +
> static int column;
>
> static int gen_version;
> @@ -505,6 +523,7 @@ static int gen_version; #define
> UNTYPED_RW_SIMD_MODE(inst) GEN_BITS_FIELD(inst,
> bits3.gen7_untyped_rw.simd_mode) #define
> UNTYPED_RW_CATEGORY(inst) GEN_BITS_FIELD(inst,
> bits3.gen7_untyped_rw.category) #define UNTYPED_RW_MSG_TYPE(inst)
> GEN_BITS_FIELD(inst, bits3.gen7_untyped_rw.msg_type)
> +#define UNTYPED_RW_AOP_TYPE(inst) GEN_BITS_FIELD(inst,
> +bits3.gen7_atomic_op.aop_type)
> #define SCRATCH_RW_OFFSET(inst) GEN_BITS_FIELD(inst,
> bits3.gen7_scratch_rw.offset)
> #define SCRATCH_RW_BLOCK_SIZE(inst) GEN_BITS_FIELD(inst,
> bits3.gen7_scratch_rw.block_size) #define
> SCRATCH_RW_INVALIDATE_AFTER_READ(inst) GEN_BITS_FIELD(inst,
> bits3.gen7_scratch_rw.invalidate_after_read)
> @@ -1259,12 +1278,21 @@ int gen_disasm (FILE *file, const void *inst,
> uint32_t deviceID, uint32_t compac
> break;
> case GEN_SFID_DATAPORT_DATA:
> if(UNTYPED_RW_CATEGORY(inst) == 0) {
> - format(file, " (bti: %d, rgba: %d, %s, %s, %s)",
> - UNTYPED_RW_BTI(inst),
> - UNTYPED_RW_RGBA(inst),
> -
> data_port_data_cache_simd_mode[UNTYPED_RW_SIMD_MODE(inst)],
> - data_port_data_cache_category[UNTYPED_RW_CATEGORY(inst)],
> -
> data_port_data_cache_msg_type[UNTYPED_RW_MSG_TYPE(inst)]);
> + if(UNTYPED_RW_MSG_TYPE(inst) == 6)
> + format(file, " (bti: %d, rgba: %d, %s, %s, %s, %s)",
> + UNTYPED_RW_BTI(inst),
> + UNTYPED_RW_RGBA(inst),
> +
> data_port_data_cache_simd_mode[UNTYPED_RW_SIMD_MODE(inst)],
> + data_port_data_cache_category[UNTYPED_RW_CATEGORY(inst)],
> + data_port_data_cache_msg_type[UNTYPED_RW_MSG_TYPE(inst)],
> + atomic_opration_type[UNTYPED_RW_AOP_TYPE(inst)]);
> + else
> + format(file, " (bti: %d, rgba: %d, %s, %s, %s)",
> + UNTYPED_RW_BTI(inst),
> + UNTYPED_RW_RGBA(inst),
> +
> data_port_data_cache_simd_mode[UNTYPED_RW_SIMD_MODE(inst)],
> + data_port_data_cache_category[UNTYPED_RW_CATEGORY(inst)],
> +
> + data_port_data_cache_msg_type[UNTYPED_RW_MSG_TYPE(inst)]);
> } else {
> format(file, " (addr: %d, blocks: %s, %s, mode: %s, %s)",
> SCRATCH_RW_OFFSET(inst), diff --git
> a/backend/src/ir/instruction.cpp b/backend/src/ir/instruction.cpp index
> 797552f..1bfb996 100644
> --- a/backend/src/ir/instruction.cpp
> +++ b/backend/src/ir/instruction.cpp
> @@ -340,7 +340,7 @@ namespace ir {
> AddressSpace addrSpace; //!< Address space
> BTI bti; //!< bti
> uint8_t srcNum:2; //!<Source Number
> - AtomicOps atomicOp:6; //!<Source Number
> + AtomicOps atomicOp:6; //!<Source Operator
> };
>
> class ALIGNED_INSTRUCTION BranchInstruction :
> @@ -1153,6 +1153,31 @@ namespace ir {
> INLINE void AtomicInstruction::out(std::ostream &out, const Function &fn)
> const {
> this->outOpcode(out);
> out << "." << addrSpace;
> +
> +#define OUT_ATOMIC_OP(TYPE) \
> + case ATOMIC_OP_##TYPE: \
> + { out << "." << #TYPE; \
> + break; \
> + }
> + switch(atomicOp)
> + {
> + OUT_ATOMIC_OP(AND)
> + OUT_ATOMIC_OP(OR)
> + OUT_ATOMIC_OP(XOR)
> + OUT_ATOMIC_OP(XCHG)
> + OUT_ATOMIC_OP(INC)
> + OUT_ATOMIC_OP(DEC)
> + OUT_ATOMIC_OP(ADD)
> + OUT_ATOMIC_OP(SUB)
> + OUT_ATOMIC_OP(IMAX)
> + OUT_ATOMIC_OP(IMIN)
> + OUT_ATOMIC_OP(UMAX)
> + OUT_ATOMIC_OP(UMIN)
> + OUT_ATOMIC_OP(CMPXCHG)
> + default:
> + out << "." << "INVALID";
> + assert(0);
> + };
> out << " %" << this->getDst(fn, 0);
> out << " {" << "%" << this->getSrc(fn, 0) << "}";
> for (uint32_t i = 1; i < srcNum; ++i)
> --
> 1.9.1
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list