From 3c5d1526b95e1e5c5f36515e898c0bc15b83cff5 Mon Sep 17 00:00:00 2001 From: Anthony Pesch Date: Mon, 18 Jan 2016 02:04:09 -0800 Subject: [PATCH] group x64 blocks together under the same symbol for profiling --- src/jit/backend/x64/x64_backend.cc | 9 ++++++++- src/jit/backend/x64/x64_emitter.cc | 4 ++-- src/jit/backend/x64/x64_emitter.h | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/jit/backend/x64/x64_backend.cc b/src/jit/backend/x64/x64_backend.cc index 23cf65be..2df961e7 100644 --- a/src/jit/backend/x64/x64_backend.cc +++ b/src/jit/backend/x64/x64_backend.cc @@ -46,13 +46,20 @@ const Register x64_registers[] = { {"xmm10", ir::VALUE_FLOAT_MASK}, {"xmm11", ir::VALUE_FLOAT_MASK}}; const int x64_num_registers = sizeof(x64_registers) / sizeof(Register); + +// this will break down if running two instances of the x64 backend, but it's +// extremely useful when profiling to group JITd blocks of code with an actual +// symbol name +static const size_t x64_codegen_size = 1024 * 1024 * 8; +static uint8_t x64_codegen[x64_codegen_size]; + } } } } X64Backend::X64Backend(Memory &memory) - : Backend(memory), emitter_(1024 * 1024 * 8) {} + : Backend(memory), emitter_(x64_codegen, x64_codegen_size) {} X64Backend::~X64Backend() {} diff --git a/src/jit/backend/x64/x64_emitter.cc b/src/jit/backend/x64/x64_emitter.cc index 3813b95d..8cf4244d 100644 --- a/src/jit/backend/x64/x64_emitter.cc +++ b/src/jit/backend/x64/x64_emitter.cc @@ -116,8 +116,8 @@ static X64Emit x64_emitters[NUM_OPCODES]; } x64_##op##_init; \ void op(X64Emitter &e, const Instr *instr) -X64Emitter::X64Emitter(size_t max_size) - : CodeGenerator(max_size), +X64Emitter::X64Emitter(void *buffer, size_t buffer_size) + : CodeGenerator(buffer_size, buffer), arena_(1024), source_map_(nullptr), memory_(nullptr), diff --git a/src/jit/backend/x64/x64_emitter.h b/src/jit/backend/x64/x64_emitter.h index 28636fe9..8630d3b0 100644 --- a/src/jit/backend/x64/x64_emitter.h +++ b/src/jit/backend/x64/x64_emitter.h @@ -35,7 +35,7 @@ enum { class X64Emitter : public Xbyak::CodeGenerator { public: - X64Emitter(size_t max_size); + X64Emitter(void *buffer, size_t buffer_size); ~X64Emitter(); Xbyak::Label &epilog_label() { return *epilog_label_; }