Index: src/ia32/disasm-ia32.cc |
diff --git a/src/ia32/disasm-ia32.cc b/src/ia32/disasm-ia32.cc |
index 04edc5f42737529697e1ed33fa240b4d963d200f..8ece804c60f168587f875bfb1d3c10c790f48030 100644 |
--- a/src/ia32/disasm-ia32.cc |
+++ b/src/ia32/disasm-ia32.cc |
@@ -179,6 +179,10 @@ class InstructionTable { |
public: |
InstructionTable(); |
const InstructionDesc& Get(byte x) const { return instructions_[x]; } |
+ static InstructionTable* get_instance() { |
+ static InstructionTable table; |
+ return &table; |
+ } |
private: |
InstructionDesc instructions_[256]; |
@@ -259,15 +263,13 @@ void InstructionTable::AddJumpConditionalShort() { |
} |
-static InstructionTable instruction_table; |
- |
- |
// The IA32 disassembler implementation. |
class DisassemblerIA32 { |
public: |
DisassemblerIA32(const NameConverter& converter, |
bool abort_on_unimplemented = true) |
- : converter_(converter), |
+ : instruction_table_(InstructionTabel::get_instance()), |
+ converter_(converter), |
tmp_buffer_pos_(0), |
abort_on_unimplemented_(abort_on_unimplemented) { |
tmp_buffer_[0] = '\0'; |
@@ -281,11 +283,11 @@ class DisassemblerIA32 { |
private: |
const NameConverter& converter_; |
+ InstructionTable* instruction_table_; |
v8::internal::EmbeddedVector<char, 128> tmp_buffer_; |
unsigned int tmp_buffer_pos_; |
bool abort_on_unimplemented_; |
- |
enum { |
eax = 0, |
ecx = 1, |
@@ -884,7 +886,7 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, |
} |
bool processed = true; // Will be set to false if the current instruction |
// is not in 'instructions' table. |
- const InstructionDesc& idesc = instruction_table.Get(*data); |
+ const InstructionDesc& idesc = instruction_table_->Get(*data); |
switch (idesc.type) { |
case ZERO_OPERANDS_INSTR: |
AppendToBuffer(idesc.mnem); |