summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <tstellar@gmail.com>2011-01-01 21:17:20 -0800
committerTom Stellard <tstellar@gmail.com>2011-01-01 21:17:20 -0800
commit0cb665c834ca089bca9d52d60a63ba5313bd41cc (patch)
tree96b398ba69414d5b6f6221bbb69794591ac8ed54
parent08ff894d321967341cf56614fe259e85b7cd2ce4 (diff)
emulator: Treat input registers like const registers
-rw-r--r--emulator.cpp35
-rw-r--r--emulator.h4
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,
diff --git a/emulator.h b/emulator.h
index 6a99eff..47e5eed 100644
--- a/emulator.h
+++ b/emulator.h
@@ -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);