[Beignet] [PATCH] GBE: output compact flag when output asm.
Ruiling Song
ruiling.song at intel.com
Tue Jun 10 20:14:52 PDT 2014
Signed-off-by: Ruiling Song <ruiling.song at intel.com>
---
backend/src/backend/gen/gen_mesa_disasm.c | 6 +++++-
backend/src/backend/gen/gen_mesa_disasm.h | 2 +-
backend/src/backend/gen_context.cpp | 5 ++---
backend/src/backend/gen_program.cpp | 16 +++++++++++++---
backend/src/backend/gen_program.hpp | 4 +++-
5 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/backend/src/backend/gen/gen_mesa_disasm.c b/backend/src/backend/gen/gen_mesa_disasm.c
index 53dc361..c120b60 100644
--- a/backend/src/backend/gen/gen_mesa_disasm.c
+++ b/backend/src/backend/gen/gen_mesa_disasm.c
@@ -1090,7 +1090,7 @@ static int qtr_ctrl(FILE *file, const union GenNativeInstruction *inst)
return 0;
}
-int gen_disasm (FILE *file, const void *opaque_insn, uint32_t deviceID)
+int gen_disasm (FILE *file, const void *opaque_insn, uint32_t deviceID, uint32_t compacted)
{
const union GenNativeInstruction *inst = (const union GenNativeInstruction *) opaque_insn;
int err = 0;
@@ -1287,6 +1287,10 @@ int gen_disasm (FILE *file, const void *opaque_insn, uint32_t deviceID)
inst->header.opcode == GEN_OPCODE_SENDC)
err |= control (file, "end of thread", end_of_thread,
inst->bits3.generic_gen5.end_of_thread, &space);
+
+ if(compacted) {
+ string(file, " Compacted");
+ }
if (space)
string (file, " ");
string (file, "}");
diff --git a/backend/src/backend/gen/gen_mesa_disasm.h b/backend/src/backend/gen/gen_mesa_disasm.h
index ca2ba2d..ae007a4 100644
--- a/backend/src/backend/gen/gen_mesa_disasm.h
+++ b/backend/src/backend/gen/gen_mesa_disasm.h
@@ -34,7 +34,7 @@
extern "C" {
#endif /* __cplusplus */
-extern int gen_disasm(FILE *file, const void *opaque_insn, uint32_t deviceID);
+extern int gen_disasm(FILE *file, const void *opaque_insn, uint32_t deviceID, uint32_t compacted);
#ifdef __cplusplus
}
diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp
index 7133261..edb7414 100644
--- a/backend/src/backend/gen_context.cpp
+++ b/backend/src/backend/gen_context.cpp
@@ -39,7 +39,6 @@
namespace gbe
{
- extern void decompactInstruction(union GenCompactInstruction *p, union GenNativeInstruction *pOut);
///////////////////////////////////////////////////////////////////////////
// GenContext implementation
///////////////////////////////////////////////////////////////////////////
@@ -1890,10 +1889,10 @@ namespace gbe
pCom = (GenCompactInstruction*)&p->store[insnID];
if(pCom->bits1.cmpt_control == 1) {
decompactInstruction(pCom, &insn);
- gen_disasm(stdout, &insn, deviceID);
+ gen_disasm(stdout, &insn, deviceID, 1);
insnID++;
} else {
- gen_disasm(stdout, &p->store[insnID], deviceID);
+ gen_disasm(stdout, &p->store[insnID], deviceID, 0);
insnID = insnID + 2;
}
}
diff --git a/backend/src/backend/gen_program.cpp b/backend/src/backend/gen_program.cpp
index 9fca8fa..baea83f 100644
--- a/backend/src/backend/gen_program.cpp
+++ b/backend/src/backend/gen_program.cpp
@@ -72,9 +72,19 @@ namespace gbe {
FILE *f = fopen("/dev/null", "w");
char *buf = new char[4096];
setbuffer(f, buf, 4096);
-
- for (uint32_t i = 0; i < insnNum; i++) {
- gen_disasm(f, insns+i, deviceID);
+ GenCompactInstruction * pCom = NULL;
+ GenNativeInstruction nativeInsn;
+
+ for (uint32_t i = 0; i < insnNum;) {
+ pCom = (GenCompactInstruction*)(insns+i);
+ if(pCom->bits1.cmpt_control == 1) {
+ decompactInstruction(pCom, &nativeInsn);
+ gen_disasm(f, &nativeInsn, deviceID, 1);
+ i++;
+ } else {
+ gen_disasm(f, insns+i, deviceID, 0);
+ i = i + 2;
+ }
outs << buf;
fflush(f);
setbuffer(f, NULL, 0);
diff --git a/backend/src/backend/gen_program.hpp b/backend/src/backend/gen_program.hpp
index d308212..d5c9079 100644
--- a/backend/src/backend/gen_program.hpp
+++ b/backend/src/backend/gen_program.hpp
@@ -27,6 +27,7 @@
#include "backend/program.h"
#include "backend/program.hpp"
+#include "backend/gen_defs.hpp"
// Gen ISA instruction
struct GenInstruction;
@@ -75,7 +76,8 @@ namespace gbe
/*! Use custom allocators */
GBE_CLASS(GenProgram);
};
-
+ /*! decompact GEN ASM if it is in compacted format */
+ extern void decompactInstruction(union GenCompactInstruction *p, union GenNativeInstruction *pOut);
} /* namespace gbe */
#endif /* __GBE_GEN_PROGRAM_HPP__ */
--
1.7.10.4
More information about the Beignet
mailing list