diff options
author | Tom Stellard <tstellar@gmail.com> | 2010-12-29 12:45:08 -0800 |
---|---|---|
committer | Tom Stellard <tstellar@gmail.com> | 2010-12-29 12:45:08 -0800 |
commit | 5bc2a1f3dd379dc2b642a094dbeb191901fccafa (patch) | |
tree | c5d45edcddca9df99ed2fccb94d7992e8b531be8 | |
parent | e70c6bfb0970de17d02528b44df6e11c159d552c (diff) |
add sub_instruction
-rw-r--r-- | evaluator.cpp | 15 | ||||
-rw-r--r-- | evaluator.h | 8 | ||||
-rw-r--r-- | instruction.cpp | 4 | ||||
-rw-r--r-- | instruction.h | 5 |
4 files changed, 32 insertions, 0 deletions
diff --git a/evaluator.cpp b/evaluator.cpp index c182bcd..2741d84 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -129,3 +129,18 @@ abs_evaluator::evaluate( } return new float_value(fabsf(l->m_value)); } + +sub_evaluator::sub_evaluator() : + evaluator("-") + { } + +value * +sub_evaluator::evaluate( + float_value * l, + float_value * r) +{ + if (!l || !r || !l->m_has_value || !r->m_has_value) { + return default_evaluate(l, r); + } + return new float_value(l->m_value - r->m_value); +} diff --git a/evaluator.h b/evaluator.h index 02c7ff6..2b3f682 100644 --- a/evaluator.h +++ b/evaluator.h @@ -56,4 +56,12 @@ public: float_value * l, float_value * r); }; + +class sub_evaluator : public evaluator { +public: + sub_evaluator(); + value * evaluate( + float_value * l, + float_value * r); +}; #endif //EVALUATOR_H_ diff --git a/instruction.cpp b/instruction.cpp index 1f6f81d..779b397 100644 --- a/instruction.cpp +++ b/instruction.cpp @@ -119,3 +119,7 @@ mad_instruction::execute(emulator & emulator) abs_instruction::abs_instruction(std::vector<register_address> dst) : instruction("ABS", new abs_evaluator(), dst, 1) { } + +sub_instruction::sub_instruction(std::vector<register_address> dst) : + instruction("SUB", new sub_evaluator(), dst, 2) + { } diff --git a/instruction.h b/instruction.h index d178644..13bf4de 100644 --- a/instruction.h +++ b/instruction.h @@ -68,4 +68,9 @@ public: abs_instruction(std::vector<register_address> dst); }; +class sub_instruction : public instruction { +public: + sub_instruction(std::vector<register_address> dst); +}; + #endif //INSTRUCTION_H_ |