From cf9086d6671c855c96846a01b18ad1173f754bbd Mon Sep 17 00:00:00 2001 From: Tom Haber Date: Fri, 22 Jan 2010 17:07:44 +0100 Subject: [PATCH] avr: Decoding table no longer static --- src/Decoder.cpp | 18 ++++++++++-------- src/Decoder.h | 3 ++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Decoder.cpp b/src/Decoder.cpp index b7d1636..8195f8d 100644 --- a/src/Decoder.cpp +++ b/src/Decoder.cpp @@ -22,18 +22,20 @@ namespace avr { - std::vector Decoder::lut; - Decoder::Decoder() { - if( lut.size() == 0 ) { - const unsigned int num_ops = 0x10000; - lut.resize( num_ops ); - for(unsigned int i = 0; i < num_ops; i++) { - lut[i] = lookupOpcode(i); - } + const size_t num_ops = 0x10000; + lut.resize( num_ops ); + for(size_t i = 0; i < num_ops; i++) { + lut[i] = lookupOpcode(i); } } + Decoder::~Decoder() { + for(size_t i = 0; i < lut.size(); i++) + delete lut[i]; + lut.clear(); + } + bool Decoder::is2WordInstruction( word opcode ) const { return lut[opcode]->is2Word(); } diff --git a/src/Decoder.h b/src/Decoder.h index 55a4ca1..a0a4cca 100644 --- a/src/Decoder.h +++ b/src/Decoder.h @@ -22,6 +22,7 @@ namespace avr { class Decoder { public: Decoder(); + ~Decoder(); public: Instruction & decode( word opcode ) const; @@ -31,7 +32,7 @@ namespace avr { Instruction *lookupOpcode( word opcode ); private: - static std::vector lut; + std::vector lut; }; inline Instruction & Decoder::decode( word opcode ) const { -- 2.11.4.GIT