summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuiling Song <ruiling.song@intel.com>2014-06-11 11:14:52 +0800
committerZhigang Gong <zhigang.gong@intel.com>2014-06-11 11:05:19 +0800
commitd565c55b5cb65e4a8eb8883c7c01039d5a411c68 (patch)
tree96d2ddc060604425cd6d874ef8b90339c983ccc9
parentf5182996ead14f2bb7cdd3f3f082aa486f499114 (diff)
GBE: output compact flag when output asm.
Signed-off-by: Ruiling Song <ruiling.song@intel.com> Reviewed-by: Zhigang Gong <zhigang.gong@linux.intel.com>
-rw-r--r--backend/src/backend/gen/gen_mesa_disasm.c6
-rw-r--r--backend/src/backend/gen/gen_mesa_disasm.h2
-rw-r--r--backend/src/backend/gen_context.cpp5
-rw-r--r--backend/src/backend/gen_program.cpp16
-rw-r--r--backend/src/backend/gen_program.hpp4
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 b718b20..7b7dec3 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
///////////////////////////////////////////////////////////////////////////
@@ -1892,10 +1891,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__ */