diff options
author | Tom Stellard <tstellar@gmail.com> | 2011-01-01 21:17:20 -0800 |
---|---|---|
committer | Tom Stellard <tstellar@gmail.com> | 2011-01-01 21:17:20 -0800 |
commit | 0cb665c834ca089bca9d52d60a63ba5313bd41cc (patch) | |
tree | 96b398ba69414d5b6f6221bbb69794591ac8ed54 | |
parent | 08ff894d321967341cf56614fe259e85b7cd2ce4 (diff) |
emulator: Treat input registers like const registers
-rw-r--r-- | emulator.cpp | 35 | ||||
-rw-r--r-- | emulator.h | 4 |
2 files changed, 26 insertions, 13 deletions
diff --git a/emulator.cpp b/emulator.cpp index a40cb0b..0569386 100644 --- a/emulator.cpp +++ b/emulator.cpp @@ -80,21 +80,13 @@ emulator::get_value(register_address addr) } break; case REGISTER_TYPE_CONST: - { - if (index >= m_const_regs.size()) { - return NULL; - } - float_value * val = m_const_regs[index]; - - if (val->m_has_value) { - return new float_value(*val); - } else { - return new const_value(addr, val); - } - } + return get_const_value(m_const_regs, index, addr); + break; + case REGISTER_TYPE_IN: + return get_const_value(m_input_regs, index, addr); + break; case REGISTER_TYPE_OUT: return m_out_regs[index]->clone(); case REGISTER_TYPE_IMMEDIATE: return m_immediate_regs[index]->clone(); - case REGISTER_TYPE_IN: return m_input_regs[index]->clone(); case REGISTER_TYPE_PRIVATE: return m_private_regs[index]->clone(); case REGISTER_TYPE_NONE: return NULL; default: @@ -104,6 +96,23 @@ emulator::get_value(register_address addr) } } +value * +emulator::get_const_value( + std::vector<float_value *> & registers, + unsigned int index, + register_address addr) +{ + if (index >= registers.size()) { + return NULL; + } + float_value * val = registers[index]; + if (val->m_has_value) { + return new float_value(*val); + } else { + return new const_value(addr, val); + } +} + void emulator::set_value( register_address addr, @@ -35,6 +35,10 @@ private: value * m_val; }; + value * get_const_value( + std::vector<float_value *> & registers, + unsigned int index, + register_address addr); void set_value( register_address addr, value * val); |