From: Ruiling Song Date: Wed, 11 Jun 2014 03:14:52 +0000 (+0800) Subject: GBE: output compact flag when output asm. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d565c55b5cb65e4a8eb8883c7c01039d5a411c68;p=contrib%2Fbeignet.git GBE: output compact flag when output asm. Signed-off-by: Ruiling Song Reviewed-by: Zhigang Gong --- 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__ */