[Avida-cvs] [avida-svn] r936 - in development: Avida.xcodeproj source/cpu
brysonda at myxo.css.msu.edu
brysonda at myxo.css.msu.edu
Sat Sep 9 14:53:49 PDT 2006
Author: brysonda
Date: 2006-09-09 17:53:48 -0400 (Sat, 09 Sep 2006)
New Revision: 936
Removed:
development/source/cpu/cHardwareCPU_Thread.cc
development/source/cpu/cHardwareCPU_Thread.h
development/source/cpu/nHardwareCPU.h
Modified:
development/Avida.xcodeproj/project.pbxproj
development/source/cpu/CMakeLists.txt
development/source/cpu/SConscript
development/source/cpu/cCodeLabel.cc
development/source/cpu/cHardwareCPU.cc
development/source/cpu/cHardwareCPU.h
Log:
Internalize cHardwareCPU implementation details.
Modified: development/Avida.xcodeproj/project.pbxproj
===================================================================
--- development/Avida.xcodeproj/project.pbxproj 2006-09-09 21:32:09 UTC (rev 935)
+++ development/Avida.xcodeproj/project.pbxproj 2006-09-09 21:53:48 UTC (rev 936)
@@ -208,10 +208,8 @@
70C1EF7208C3968700F50912 /* cCPUTestInfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EF7108C3968700F50912 /* cCPUTestInfo.cc */; };
70C1EF7308C3968700F50912 /* cCPUTestInfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EF7108C3968700F50912 /* cCPUTestInfo.cc */; };
70C1EFA808C39F2100F50912 /* cHardwareBase.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA308C39F2100F50912 /* cHardwareBase.cc */; };
- 70C1EFA908C39F2100F50912 /* cHardwareCPU_Thread.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA408C39F2100F50912 /* cHardwareCPU_Thread.cc */; };
70C1EFAA08C39F2100F50912 /* cHardwareCPU.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA508C39F2100F50912 /* cHardwareCPU.cc */; };
70C1EFAD08C39F2100F50912 /* cHardwareBase.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA308C39F2100F50912 /* cHardwareBase.cc */; };
- 70C1EFAE08C39F2100F50912 /* cHardwareCPU_Thread.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA408C39F2100F50912 /* cHardwareCPU_Thread.cc */; };
70C1EFAF08C39F2100F50912 /* cHardwareCPU.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA508C39F2100F50912 /* cHardwareCPU.cc */; };
70C1F02B08C3C71300F50912 /* cHardwareSMT.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1F02308C3C71300F50912 /* cHardwareSMT.cc */; };
70C1F02C08C3C71300F50912 /* cHardwareStatusPrinter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1F02408C3C71300F50912 /* cHardwareStatusPrinter.cc */; };
@@ -267,7 +265,6 @@
70DCACA6097AF7CC002F8733 /* cCPUStack.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EF6108C3954700F50912 /* cCPUStack.cc */; };
70DCACA7097AF7CC002F8733 /* cCPUTestInfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EF7108C3968700F50912 /* cCPUTestInfo.cc */; };
70DCACAA097AF7CC002F8733 /* cHardwareBase.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA308C39F2100F50912 /* cHardwareBase.cc */; };
- 70DCACAB097AF7CC002F8733 /* cHardwareCPU_Thread.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA408C39F2100F50912 /* cHardwareCPU_Thread.cc */; };
70DCACAC097AF7CC002F8733 /* cHardwareCPU.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1EFA508C39F2100F50912 /* cHardwareCPU.cc */; };
70DCACAE097AF7CC002F8733 /* cHardwareSMT.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1F02308C3C71300F50912 /* cHardwareSMT.cc */; };
70DCACAF097AF7CC002F8733 /* cHardwareStatusPrinter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70C1F02408C3C71300F50912 /* cHardwareStatusPrinter.cc */; };
@@ -779,10 +776,8 @@
70C1EF6E08C3967700F50912 /* cCPUTestInfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cCPUTestInfo.h; sourceTree = "<group>"; };
70C1EF7108C3968700F50912 /* cCPUTestInfo.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cCPUTestInfo.cc; sourceTree = "<group>"; };
70C1EF9E08C39F0E00F50912 /* cHardwareBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cHardwareBase.h; sourceTree = "<group>"; };
- 70C1EF9F08C39F0E00F50912 /* cHardwareCPU_Thread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cHardwareCPU_Thread.h; sourceTree = "<group>"; };
70C1EFA008C39F0E00F50912 /* cHardwareCPU.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cHardwareCPU.h; sourceTree = "<group>"; };
70C1EFA308C39F2100F50912 /* cHardwareBase.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cHardwareBase.cc; sourceTree = "<group>"; };
- 70C1EFA408C39F2100F50912 /* cHardwareCPU_Thread.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cHardwareCPU_Thread.cc; sourceTree = "<group>"; };
70C1EFA508C39F2100F50912 /* cHardwareCPU.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cHardwareCPU.cc; sourceTree = "<group>"; };
70C1F01408C3C6FC00F50912 /* cHardwareSMT.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cHardwareSMT.h; sourceTree = "<group>"; };
70C1F01508C3C6FC00F50912 /* cHardwareStatusPrinter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cHardwareStatusPrinter.h; sourceTree = "<group>"; };
@@ -797,7 +792,6 @@
70C1F02808C3C71300F50912 /* cTestCPU.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cTestCPU.cc; sourceTree = "<group>"; };
70C1F02908C3C71300F50912 /* cTestUtil.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cTestUtil.cc; sourceTree = "<group>"; };
70C1F0A808C3FF1800F50912 /* nHardware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nHardware.h; sourceTree = "<group>"; };
- 70C1F0FC08C40B1B00F50912 /* nHardwareCPU.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = nHardwareCPU.h; sourceTree = "<group>"; };
70C1F18608C6A0FA00F50912 /* cEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cEvent.h; sourceTree = "<group>"; };
70C1F18808C6A0FA00F50912 /* cEventList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cEventList.h; sourceTree = "<group>"; };
70C1F18908C6A0FA00F50912 /* cEventListEntry.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cEventListEntry.h; sourceTree = "<group>"; };
@@ -1373,8 +1367,6 @@
70C1EF9E08C39F0E00F50912 /* cHardwareBase.h */,
70C1EFA508C39F2100F50912 /* cHardwareCPU.cc */,
70C1EFA008C39F0E00F50912 /* cHardwareCPU.h */,
- 70C1EFA408C39F2100F50912 /* cHardwareCPU_Thread.cc */,
- 70C1EF9F08C39F0E00F50912 /* cHardwareCPU_Thread.h */,
70C5BD690905CE5F0028A785 /* cHardwareManager.cc */,
70C5BD6A0905CE5F0028A785 /* cHardwareManager.h */,
70C1F02308C3C71300F50912 /* cHardwareSMT.cc */,
@@ -1392,7 +1384,6 @@
70C1F02908C3C71300F50912 /* cTestUtil.cc */,
70C1F02008C3C6FC00F50912 /* cTestUtil.h */,
70C1F0A808C3FF1800F50912 /* nHardware.h */,
- 70C1F0FC08C40B1B00F50912 /* nHardwareCPU.h */,
70C1EF6708C395D300F50912 /* sCPUStats.h */,
706D30CC0852328F00D7DC8F /* tInstLib.h */,
DCC30FA90762539D008F7A48 /* CMakeLists.txt */,
@@ -1904,7 +1895,6 @@
70C1EF6308C3954700F50912 /* cCPUStack.cc in Sources */,
70C1EF7308C3968700F50912 /* cCPUTestInfo.cc in Sources */,
70C1EFAD08C39F2100F50912 /* cHardwareBase.cc in Sources */,
- 70C1EFAE08C39F2100F50912 /* cHardwareCPU_Thread.cc in Sources */,
70C1EFAF08C39F2100F50912 /* cHardwareCPU.cc in Sources */,
70C1F03308C3C71300F50912 /* cHardwareSMT.cc in Sources */,
70C1F03408C3C71300F50912 /* cHardwareStatusPrinter.cc in Sources */,
@@ -2043,7 +2033,6 @@
70DCACA6097AF7CC002F8733 /* cCPUStack.cc in Sources */,
70DCACA7097AF7CC002F8733 /* cCPUTestInfo.cc in Sources */,
70DCACAA097AF7CC002F8733 /* cHardwareBase.cc in Sources */,
- 70DCACAB097AF7CC002F8733 /* cHardwareCPU_Thread.cc in Sources */,
70DCACAC097AF7CC002F8733 /* cHardwareCPU.cc in Sources */,
70DCACAE097AF7CC002F8733 /* cHardwareSMT.cc in Sources */,
70DCACAF097AF7CC002F8733 /* cHardwareStatusPrinter.cc in Sources */,
@@ -2161,7 +2150,6 @@
70C1EF6208C3954700F50912 /* cCPUStack.cc in Sources */,
70C1EF7208C3968700F50912 /* cCPUTestInfo.cc in Sources */,
70C1EFA808C39F2100F50912 /* cHardwareBase.cc in Sources */,
- 70C1EFA908C39F2100F50912 /* cHardwareCPU_Thread.cc in Sources */,
70C1EFAA08C39F2100F50912 /* cHardwareCPU.cc in Sources */,
70C1F02B08C3C71300F50912 /* cHardwareSMT.cc in Sources */,
70C1F02C08C3C71300F50912 /* cHardwareStatusPrinter.cc in Sources */,
Modified: development/source/cpu/CMakeLists.txt
===================================================================
--- development/source/cpu/CMakeLists.txt 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/CMakeLists.txt 2006-09-09 21:53:48 UTC (rev 936)
@@ -5,7 +5,6 @@
cCPUTestInfo.cc
cHardwareBase.cc
cHardwareCPU.cc
- cHardwareCPU_Thread.cc
cHardwareManager.cc
cHardwareSMT.cc
cHardwareStatusPrinter.cc
Modified: development/source/cpu/SConscript
===================================================================
--- development/source/cpu/SConscript 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/SConscript 2006-09-09 21:53:48 UTC (rev 936)
@@ -10,7 +10,6 @@
'cCPUTestInfo.h',
'cHardwareBase.h',
'cHardwareCPU.h',
- 'cHardwareCPU_Thread.h',
'cHardwareManager.h',
'cHardwareSMT.h',
'cHardwareStatusPrinter.h',
@@ -22,7 +21,6 @@
'cTestCPUInterface.h',
'cTestUtil.h',
'nHardware.h',
- 'nHardwareCPU.h',
'sCPUStats.h',
'tInstLib.h',
]
@@ -34,7 +32,6 @@
'cCPUTestInfo.cc',
'cHardwareBase.cc',
'cHardwareCPU.cc',
- 'cHardwareCPU_Thread.cc',
'cHardwareManager.cc',
'cHardwareSMT.cc',
'cHardwareStatusPrinter.cc',
Modified: development/source/cpu/cCodeLabel.cc
===================================================================
--- development/source/cpu/cCodeLabel.cc 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/cCodeLabel.cc 2006-09-09 21:53:48 UTC (rev 936)
@@ -11,7 +11,6 @@
#include "cCodeLabel.h"
#include "cTools.h"
-#include "nHardwareCPU.h"
#include <cmath>
#include <vector>
@@ -112,8 +111,7 @@
if(oddCount % 2 == 0) {
value += m_nops[i];
} else {
- // @DMB - this should not be relying on hardware specific NUM_NOPS
- value += (nHardwareCPU::NUM_NOPS - 1) - m_nops[i];
+ value += (base - 1) - m_nops[i];
}
if(m_nops[i] % 2 == 1) {
Modified: development/source/cpu/cHardwareCPU.cc
===================================================================
--- development/source/cpu/cHardwareCPU.cc 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/cHardwareCPU.cc 2006-09-09 21:53:48 UTC (rev 936)
@@ -50,12 +50,12 @@
: name(name), nop_mod(nop_mod) {}
};
static const cNOPEntryCPU s_n_array[] = {
- cNOPEntryCPU("nop-A", nHardwareCPU::REG_AX),
- cNOPEntryCPU("nop-B", nHardwareCPU::REG_BX),
- cNOPEntryCPU("nop-C", nHardwareCPU::REG_CX),
- cNOPEntryCPU("nop-D", nHardwareCPU::REG_DX),
- cNOPEntryCPU("nop-E", nHardwareCPU::REG_EX),
- cNOPEntryCPU("nop-F", nHardwareCPU::REG_FX)
+ cNOPEntryCPU("nop-A", REG_AX),
+ cNOPEntryCPU("nop-B", REG_BX),
+ cNOPEntryCPU("nop-C", REG_CX),
+ cNOPEntryCPU("nop-D", REG_DX),
+ cNOPEntryCPU("nop-E", REG_EX),
+ cNOPEntryCPU("nop-F", REG_FX)
};
struct cInstEntryCPU {
@@ -349,7 +349,7 @@
static cString n_names[n_size];
static int nop_mods[n_size];
- for (int i = 0; i < n_size && i < nHardwareCPU::NUM_REGISTERS; i++) {
+ for (int i = 0; i < n_size && i < NUM_REGISTERS; i++) {
n_names[i] = s_n_array[i].name;
nop_mods[i] = s_n_array[i].nop_mod;
}
@@ -430,7 +430,30 @@
}
+void cHardwareCPU::cLocalThread::operator=(const cLocalThread& in_thread)
+{
+ m_id = in_thread.m_id;
+ for (int i = 0; i < NUM_REGISTERS; i++) reg[i] = in_thread.reg[i];
+ for (int i = 0; i < nHardware::NUM_HEADS; i++) heads[i] = in_thread.heads[i];
+ stack = in_thread.stack;
+}
+void cHardwareCPU::cLocalThread::Reset(cHardwareBase* in_hardware, int in_id)
+{
+ m_id = in_id;
+
+ for (int i = 0; i < NUM_REGISTERS; i++) reg[i] = 0;
+ for (int i = 0; i < nHardware::NUM_HEADS; i++) heads[i].Reset(in_hardware);
+
+ stack.Clear();
+ cur_stack = 0;
+ cur_head = nHardware::HEAD_IP;
+ read_label.Clear();
+ next_label.Clear();
+}
+
+
+
// This function processes the very next command in the genome, and is made
// to be as optimized as possible. This is the heart of avida.
@@ -595,14 +618,14 @@
fp << organism->GetPhenotype().GetTimeUsed() << " "
<< "IP:" << IP().GetPosition() << " "
- << "AX:" << GetRegister(nHardwareCPU::REG_AX) << " "
- << setbase(16) << "[0x" << GetRegister(nHardwareCPU::REG_AX) << "] " << setbase(10)
+ << "AX:" << GetRegister(REG_AX) << " "
+ << setbase(16) << "[0x" << GetRegister(REG_AX) << "] " << setbase(10)
- << "BX:" << GetRegister(nHardwareCPU::REG_BX) << " "
- << setbase(16) << "[0x" << GetRegister(nHardwareCPU::REG_BX) << "] " << setbase(10)
+ << "BX:" << GetRegister(REG_BX) << " "
+ << setbase(16) << "[0x" << GetRegister(REG_BX) << "] " << setbase(10)
- << "CX:" << GetRegister(nHardwareCPU::REG_CX) << " "
- << setbase(16) << "[0x" << GetRegister(nHardwareCPU::REG_CX) << "]" << setbase(10)
+ << "CX:" << GetRegister(REG_CX) << " "
+ << setbase(16) << "[0x" << GetRegister(REG_CX) << "]" << setbase(10)
<< endl;
@@ -1010,7 +1033,7 @@
inline int cHardwareCPU::FindModifiedRegister(int default_register)
{
- assert(default_register < nHardwareCPU::NUM_REGISTERS); // Reg ID too high.
+ assert(default_register < NUM_REGISTERS); // Reg ID too high.
if (m_inst_set->IsNop(IP().GetNextInst())) {
IP().Advance();
@@ -1037,7 +1060,7 @@
inline int cHardwareCPU::FindComplementRegister(int base_reg)
{
const int comp_reg = base_reg + 1;
- return (comp_reg == nHardwareCPU::NUM_REGISTERS) ? 0 : comp_reg;
+ return (comp_reg == NUM_REGISTERS) ? 0 : comp_reg;
}
@@ -1275,21 +1298,21 @@
bool cHardwareCPU::Inst_If0(cAvidaContext& ctx) // Execute next if ?bx? ==0.
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if (GetRegister(reg_used) != 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfNot0(cAvidaContext& ctx) // Execute next if ?bx? != 0.
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if (GetRegister(reg_used) == 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfEqu(cAvidaContext& ctx) // Execute next if bx == ?cx?
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int reg_used2 = FindComplementRegister(reg_used);
if (GetRegister(reg_used) != GetRegister(reg_used2)) IP().Advance();
return true;
@@ -1297,7 +1320,7 @@
bool cHardwareCPU::Inst_IfNEqu(cAvidaContext& ctx) // Execute next if bx != ?cx?
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int reg_used2 = FindComplementRegister(reg_used);
if (GetRegister(reg_used) == GetRegister(reg_used2)) IP().Advance();
return true;
@@ -1305,14 +1328,14 @@
bool cHardwareCPU::Inst_IfGr0(cAvidaContext& ctx) // Execute next if ?bx? ! < 0.
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if (GetRegister(reg_used) <= 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfGr(cAvidaContext& ctx) // Execute next if bx > ?cx?
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int reg_used2 = FindComplementRegister(reg_used);
if (GetRegister(reg_used) <= GetRegister(reg_used2)) IP().Advance();
return true;
@@ -1320,14 +1343,14 @@
bool cHardwareCPU::Inst_IfGrEqu0(cAvidaContext& ctx) // Execute next if ?bx? != 0.
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if (GetRegister(reg_used) < 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfGrEqu(cAvidaContext& ctx) // Execute next if bx > ?cx?
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int reg_used2 = FindComplementRegister(reg_used);
if (GetRegister(reg_used) < GetRegister(reg_used2)) IP().Advance();
return true;
@@ -1335,14 +1358,14 @@
bool cHardwareCPU::Inst_IfLess0(cAvidaContext& ctx) // Execute next if ?bx? != 0.
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if (GetRegister(reg_used) >= 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfLess(cAvidaContext& ctx) // Execute next if ?bx? < ?cx?
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int reg_used2 = FindComplementRegister(reg_used);
if (GetRegister(reg_used) >= GetRegister(reg_used2)) IP().Advance();
return true;
@@ -1350,14 +1373,14 @@
bool cHardwareCPU::Inst_IfLsEqu0(cAvidaContext& ctx) // Execute next if ?bx? != 0.
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if (GetRegister(reg_used) > 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfLsEqu(cAvidaContext& ctx) // Execute next if bx > ?cx?
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int reg_used2 = FindComplementRegister(reg_used);
if (GetRegister(reg_used) > GetRegister(reg_used2)) IP().Advance();
return true;
@@ -1365,37 +1388,37 @@
bool cHardwareCPU::Inst_IfBit1(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
if ((GetRegister(reg_used) & 1) == 0) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfANotEqB(cAvidaContext& ctx) // Execute next if AX != BX
{
- if (GetRegister(nHardwareCPU::REG_AX) == GetRegister(nHardwareCPU::REG_BX) ) IP().Advance();
+ if (GetRegister(REG_AX) == GetRegister(REG_BX) ) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfBNotEqC(cAvidaContext& ctx) // Execute next if BX != CX
{
- if (GetRegister(nHardwareCPU::REG_BX) == GetRegister(nHardwareCPU::REG_CX) ) IP().Advance();
+ if (GetRegister(REG_BX) == GetRegister(REG_CX) ) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_IfANotEqC(cAvidaContext& ctx) // Execute next if AX != BX
{
- if (GetRegister(nHardwareCPU::REG_AX) == GetRegister(nHardwareCPU::REG_CX) ) IP().Advance();
+ if (GetRegister(REG_AX) == GetRegister(REG_CX) ) IP().Advance();
return true;
}
bool cHardwareCPU::Inst_JumpF(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
// If there is no label, jump BX steps.
if (GetLabel().GetSize() == 0) {
- GetActiveHead().Jump(GetRegister(nHardwareCPU::REG_BX));
+ GetActiveHead().Jump(GetRegister(REG_BX));
return true;
}
@@ -1416,11 +1439,11 @@
bool cHardwareCPU::Inst_JumpB(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
// If there is no label, jump BX steps.
if (GetLabel().GetSize() == 0) {
- GetActiveHead().Jump(GetRegister(nHardwareCPU::REG_BX));
+ GetActiveHead().Jump(GetRegister(REG_BX));
return true;
}
@@ -1458,11 +1481,11 @@
// cHardwareCPU & other_hardware = (cHardwareCPU &) other_organism->GetHardware();
//
// ReadLabel();
-// GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+// GetLabel().Rotate(1, NUM_NOPS);
//
// // If there is no label, jump to line BX in creature.
// if (GetLabel().GetSize() == 0) {
-// const int new_pos = GetRegister(nHardwareCPU::REG_BX);
+// const int new_pos = GetRegister(REG_BX);
// IP().Set(new_pos);
// organism->GetPhenotype().IsParasite() = true;
// return true;
@@ -1489,11 +1512,11 @@
//bool cHardwareCPU::Inst_JumpSelf(cAvidaContext& ctx)
//{
// ReadLabel();
-// GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+// GetLabel().Rotate(1, NUM_NOPS);
//
// // If there is no label, jump to line BX in creature.
// if (GetLabel().GetSize() == 0) {
-// IP().Set(GetRegister(nHardwareCPU::REG_BX));
+// IP().Set(GetRegister(REG_BX));
// return true;
// }
//
@@ -1518,10 +1541,10 @@
// Jump to the compliment label (or by the ammount in the bx register)
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
if (GetLabel().GetSize() == 0) {
- IP().Jump(GetRegister(nHardwareCPU::REG_BX));
+ IP().Jump(GetRegister(REG_BX));
return true;
}
@@ -1545,14 +1568,14 @@
bool cHardwareCPU::Inst_Pop(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = StackPop();
return true;
}
bool cHardwareCPU::Inst_Push(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
StackPush(GetRegister(reg_used));
return true;
}
@@ -1576,20 +1599,20 @@
}
-bool cHardwareCPU::Inst_PopA(cAvidaContext& ctx) { GetRegister(nHardwareCPU::REG_AX) = StackPop(); return true;}
-bool cHardwareCPU::Inst_PopB(cAvidaContext& ctx) { GetRegister(nHardwareCPU::REG_BX) = StackPop(); return true;}
-bool cHardwareCPU::Inst_PopC(cAvidaContext& ctx) { GetRegister(nHardwareCPU::REG_CX) = StackPop(); return true;}
+bool cHardwareCPU::Inst_PopA(cAvidaContext& ctx) { GetRegister(REG_AX) = StackPop(); return true;}
+bool cHardwareCPU::Inst_PopB(cAvidaContext& ctx) { GetRegister(REG_BX) = StackPop(); return true;}
+bool cHardwareCPU::Inst_PopC(cAvidaContext& ctx) { GetRegister(REG_CX) = StackPop(); return true;}
-bool cHardwareCPU::Inst_PushA(cAvidaContext& ctx) { StackPush(GetRegister(nHardwareCPU::REG_AX)); return true;}
-bool cHardwareCPU::Inst_PushB(cAvidaContext& ctx) { StackPush(GetRegister(nHardwareCPU::REG_BX)); return true;}
-bool cHardwareCPU::Inst_PushC(cAvidaContext& ctx) { StackPush(GetRegister(nHardwareCPU::REG_CX)); return true;}
+bool cHardwareCPU::Inst_PushA(cAvidaContext& ctx) { StackPush(GetRegister(REG_AX)); return true;}
+bool cHardwareCPU::Inst_PushB(cAvidaContext& ctx) { StackPush(GetRegister(REG_BX)); return true;}
+bool cHardwareCPU::Inst_PushC(cAvidaContext& ctx) { StackPush(GetRegister(REG_CX)); return true;}
bool cHardwareCPU::Inst_SwitchStack(cAvidaContext& ctx) { SwitchStack(); return true;}
bool cHardwareCPU::Inst_FlipStack(cAvidaContext& ctx) { StackFlip(); return true;}
bool cHardwareCPU::Inst_Swap(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int other_reg = FindComplementRegister(reg_used);
nFunctions::Swap(GetRegister(reg_used), GetRegister(other_reg));
return true;
@@ -1597,20 +1620,20 @@
bool cHardwareCPU::Inst_SwapAB(cAvidaContext& ctx)\
{
- nFunctions::Swap(GetRegister(nHardwareCPU::REG_AX), GetRegister(nHardwareCPU::REG_BX)); return true;
+ nFunctions::Swap(GetRegister(REG_AX), GetRegister(REG_BX)); return true;
}
bool cHardwareCPU::Inst_SwapBC(cAvidaContext& ctx)
{
- nFunctions::Swap(GetRegister(nHardwareCPU::REG_BX), GetRegister(nHardwareCPU::REG_CX)); return true;
+ nFunctions::Swap(GetRegister(REG_BX), GetRegister(REG_CX)); return true;
}
bool cHardwareCPU::Inst_SwapAC(cAvidaContext& ctx)
{
- nFunctions::Swap(GetRegister(nHardwareCPU::REG_AX), GetRegister(nHardwareCPU::REG_CX)); return true;
+ nFunctions::Swap(GetRegister(REG_AX), GetRegister(REG_CX)); return true;
}
bool cHardwareCPU::Inst_CopyReg(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int other_reg = FindComplementRegister(reg_used);
GetRegister(other_reg) = GetRegister(reg_used);
return true;
@@ -1618,55 +1641,55 @@
bool cHardwareCPU::Inst_CopyRegAB(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_AX) = GetRegister(nHardwareCPU::REG_BX); return true;
+ GetRegister(REG_AX) = GetRegister(REG_BX); return true;
}
bool cHardwareCPU::Inst_CopyRegAC(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_AX) = GetRegister(nHardwareCPU::REG_CX); return true;
+ GetRegister(REG_AX) = GetRegister(REG_CX); return true;
}
bool cHardwareCPU::Inst_CopyRegBA(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_BX) = GetRegister(nHardwareCPU::REG_AX); return true;
+ GetRegister(REG_BX) = GetRegister(REG_AX); return true;
}
bool cHardwareCPU::Inst_CopyRegBC(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_BX) = GetRegister(nHardwareCPU::REG_CX); return true;
+ GetRegister(REG_BX) = GetRegister(REG_CX); return true;
}
bool cHardwareCPU::Inst_CopyRegCA(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_CX) = GetRegister(nHardwareCPU::REG_AX); return true;
+ GetRegister(REG_CX) = GetRegister(REG_AX); return true;
}
bool cHardwareCPU::Inst_CopyRegCB(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_CX) = GetRegister(nHardwareCPU::REG_BX); return true;
+ GetRegister(REG_CX) = GetRegister(REG_BX); return true;
}
bool cHardwareCPU::Inst_Reset(cAvidaContext& ctx)
{
- GetRegister(nHardwareCPU::REG_AX) = 0;
- GetRegister(nHardwareCPU::REG_BX) = 0;
- GetRegister(nHardwareCPU::REG_CX) = 0;
+ GetRegister(REG_AX) = 0;
+ GetRegister(REG_BX) = 0;
+ GetRegister(REG_CX) = 0;
StackClear();
return true;
}
bool cHardwareCPU::Inst_ShiftR(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) >>= 1;
return true;
}
bool cHardwareCPU::Inst_ShiftL(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) <<= 1;
return true;
}
bool cHardwareCPU::Inst_Bit1(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) |= 1;
return true;
}
@@ -1674,78 +1697,78 @@
bool cHardwareCPU::Inst_SetNum(cAvidaContext& ctx)
{
ReadLabel();
- GetRegister(nHardwareCPU::REG_BX) = GetLabel().AsInt(nHardwareCPU::NUM_NOPS);
+ GetRegister(REG_BX) = GetLabel().AsInt(NUM_NOPS);
return true;
}
bool cHardwareCPU::Inst_ValGrey(cAvidaContext& ctx) {
ReadLabel();
- GetRegister(nHardwareCPU::REG_BX) = GetLabel().AsIntGreyCode(nHardwareCPU::NUM_NOPS);
+ GetRegister(REG_BX) = GetLabel().AsIntGreyCode(NUM_NOPS);
return true;
}
bool cHardwareCPU::Inst_ValDir(cAvidaContext& ctx) {
ReadLabel();
- GetRegister(nHardwareCPU::REG_BX) = GetLabel().AsIntDirect(nHardwareCPU::NUM_NOPS);
+ GetRegister(REG_BX) = GetLabel().AsIntDirect(NUM_NOPS);
return true;
}
bool cHardwareCPU::Inst_ValAddP(cAvidaContext& ctx) {
ReadLabel();
- GetRegister(nHardwareCPU::REG_BX) = GetLabel().AsIntAdditivePolynomial(nHardwareCPU::NUM_NOPS);
+ GetRegister(REG_BX) = GetLabel().AsIntAdditivePolynomial(NUM_NOPS);
return true;
}
bool cHardwareCPU::Inst_ValFib(cAvidaContext& ctx) {
ReadLabel();
- GetRegister(nHardwareCPU::REG_BX) = GetLabel().AsIntFib(nHardwareCPU::NUM_NOPS);
+ GetRegister(REG_BX) = GetLabel().AsIntFib(NUM_NOPS);
return true;
}
bool cHardwareCPU::Inst_ValPolyC(cAvidaContext& ctx) {
ReadLabel();
- GetRegister(nHardwareCPU::REG_BX) = GetLabel().AsIntPolynomialCoefficent(nHardwareCPU::NUM_NOPS);
+ GetRegister(REG_BX) = GetLabel().AsIntPolynomialCoefficent(NUM_NOPS);
return true;
}
bool cHardwareCPU::Inst_Inc(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) += 1;
return true;
}
bool cHardwareCPU::Inst_Dec(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) -= 1;
return true;
}
bool cHardwareCPU::Inst_Zero(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = 0;
return true;
}
bool cHardwareCPU::Inst_Neg(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = 0 - GetRegister(reg_used);
return true;
}
bool cHardwareCPU::Inst_Square(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = GetRegister(reg_used) * GetRegister(reg_used);
return true;
}
bool cHardwareCPU::Inst_Sqrt(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int value = GetRegister(reg_used);
if (value > 1) GetRegister(reg_used) = (int) sqrt((double) value);
else if (value < 0) {
@@ -1757,7 +1780,7 @@
bool cHardwareCPU::Inst_Log(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int value = GetRegister(reg_used);
if (value >= 1) GetRegister(reg_used) = (int) log((double) value);
else if (value < 0) {
@@ -1769,7 +1792,7 @@
bool cHardwareCPU::Inst_Log10(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int value = GetRegister(reg_used);
if (value >= 1) GetRegister(reg_used) = (int) log10((double) value);
else if (value < 0) {
@@ -1781,40 +1804,40 @@
bool cHardwareCPU::Inst_Minus17(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) -= 17;
return true;
}
bool cHardwareCPU::Inst_Add(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = GetRegister(nHardwareCPU::REG_BX) + GetRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = GetRegister(REG_BX) + GetRegister(REG_CX);
return true;
}
bool cHardwareCPU::Inst_Sub(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = GetRegister(nHardwareCPU::REG_BX) - GetRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = GetRegister(REG_BX) - GetRegister(REG_CX);
return true;
}
bool cHardwareCPU::Inst_Mult(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = GetRegister(nHardwareCPU::REG_BX) * GetRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = GetRegister(REG_BX) * GetRegister(REG_CX);
return true;
}
bool cHardwareCPU::Inst_Div(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- if (GetRegister(nHardwareCPU::REG_CX) != 0) {
- if (0-INT_MAX > GetRegister(nHardwareCPU::REG_BX) && GetRegister(nHardwareCPU::REG_CX) == -1)
+ const int reg_used = FindModifiedRegister(REG_BX);
+ if (GetRegister(REG_CX) != 0) {
+ if (0-INT_MAX > GetRegister(REG_BX) && GetRegister(REG_CX) == -1)
organism->Fault(FAULT_LOC_MATH, FAULT_TYPE_ERROR, "div: Float exception");
else
- GetRegister(reg_used) = GetRegister(nHardwareCPU::REG_BX) / GetRegister(nHardwareCPU::REG_CX);
+ GetRegister(reg_used) = GetRegister(REG_BX) / GetRegister(REG_CX);
} else {
organism->Fault(FAULT_LOC_MATH, FAULT_TYPE_ERROR, "div: dividing by 0");
return false;
@@ -1824,9 +1847,9 @@
bool cHardwareCPU::Inst_Mod(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- if (GetRegister(nHardwareCPU::REG_CX) != 0) {
- GetRegister(reg_used) = GetRegister(nHardwareCPU::REG_BX) % GetRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_BX);
+ if (GetRegister(REG_CX) != 0) {
+ GetRegister(reg_used) = GetRegister(REG_BX) % GetRegister(REG_CX);
} else {
organism->Fault(FAULT_LOC_MATH, FAULT_TYPE_ERROR, "mod: modding by 0");
return false;
@@ -1837,51 +1860,51 @@
bool cHardwareCPU::Inst_Nand(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = ~(GetRegister(nHardwareCPU::REG_BX) & GetRegister(nHardwareCPU::REG_CX));
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = ~(GetRegister(REG_BX) & GetRegister(REG_CX));
return true;
}
bool cHardwareCPU::Inst_Nor(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = ~(GetRegister(nHardwareCPU::REG_BX) | GetRegister(nHardwareCPU::REG_CX));
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = ~(GetRegister(REG_BX) | GetRegister(REG_CX));
return true;
}
bool cHardwareCPU::Inst_And(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = (GetRegister(nHardwareCPU::REG_BX) & GetRegister(nHardwareCPU::REG_CX));
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = (GetRegister(REG_BX) & GetRegister(REG_CX));
return true;
}
bool cHardwareCPU::Inst_Not(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = ~(GetRegister(reg_used));
return true;
}
bool cHardwareCPU::Inst_Order(cAvidaContext& ctx)
{
- if (GetRegister(nHardwareCPU::REG_BX) > GetRegister(nHardwareCPU::REG_CX)) {
- nFunctions::Swap(GetRegister(nHardwareCPU::REG_BX), GetRegister(nHardwareCPU::REG_CX));
+ if (GetRegister(REG_BX) > GetRegister(REG_CX)) {
+ nFunctions::Swap(GetRegister(REG_BX), GetRegister(REG_CX));
}
return true;
}
bool cHardwareCPU::Inst_Xor(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- GetRegister(reg_used) = GetRegister(nHardwareCPU::REG_BX) ^ GetRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_BX);
+ GetRegister(reg_used) = GetRegister(REG_BX) ^ GetRegister(REG_CX);
return true;
}
bool cHardwareCPU::Inst_Copy(cAvidaContext& ctx)
{
- const cHeadCPU from(this, GetRegister(nHardwareCPU::REG_BX));
- cHeadCPU to(this, GetRegister(nHardwareCPU::REG_AX) + GetRegister(nHardwareCPU::REG_BX));
+ const cHeadCPU from(this, GetRegister(REG_BX));
+ cHeadCPU to(this, GetRegister(REG_AX) + GetRegister(REG_BX));
sCPUStats & cpu_stats = organism->CPUStats();
if (organism->TestCopyMut(ctx)) {
@@ -1903,8 +1926,8 @@
bool cHardwareCPU::Inst_ReadInst(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_CX);
- const cHeadCPU from(this,GetRegister(nHardwareCPU::REG_BX));
+ const int reg_used = FindModifiedRegister(REG_CX);
+ const cHeadCPU from(this,GetRegister(REG_BX));
// Dis-allowing mutations on read, for the moment (write only...)
// @CAO This allows perfect error-correction...
@@ -1914,8 +1937,8 @@
bool cHardwareCPU::Inst_WriteInst(cAvidaContext& ctx)
{
- cHeadCPU to(this, GetRegister(nHardwareCPU::REG_AX) + GetRegister(nHardwareCPU::REG_BX));
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_CX);
+ cHeadCPU to(this, GetRegister(REG_AX) + GetRegister(REG_BX));
+ const int reg_used = FindModifiedRegister(REG_CX);
const int value = Mod(GetRegister(reg_used), m_inst_set->GetSize());
sCPUStats & cpu_stats = organism->CPUStats();
@@ -1939,7 +1962,7 @@
bool cHardwareCPU::Inst_StackReadInst(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_CX);
cHeadCPU from(this, GetRegister(reg_used));
StackPush(from.GetInst().GetOp());
return true;
@@ -1947,8 +1970,8 @@
bool cHardwareCPU::Inst_StackWriteInst(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
- cHeadCPU to(this, GetRegister(nHardwareCPU::REG_AX) + GetRegister(reg_used));
+ const int reg_used = FindModifiedRegister(REG_BX);
+ cHeadCPU to(this, GetRegister(REG_AX) + GetRegister(reg_used));
const int value = Mod(StackPop(), m_inst_set->GetSize());
sCPUStats & cpu_stats = organism->CPUStats();
@@ -1972,9 +1995,9 @@
bool cHardwareCPU::Inst_Compare(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_CX);
- cHeadCPU from(this, GetRegister(nHardwareCPU::REG_BX));
- cHeadCPU to(this, GetRegister(nHardwareCPU::REG_AX) + GetRegister(nHardwareCPU::REG_BX));
+ const int reg_used = FindModifiedRegister(REG_CX);
+ cHeadCPU from(this, GetRegister(REG_BX));
+ cHeadCPU to(this, GetRegister(REG_AX) + GetRegister(REG_BX));
// Compare is dangerous -- it can cause mutations!
if (organism->TestCopyMut(ctx)) {
@@ -1991,8 +2014,8 @@
bool cHardwareCPU::Inst_IfNCpy(cAvidaContext& ctx)
{
- const cHeadCPU from(this, GetRegister(nHardwareCPU::REG_BX));
- const cHeadCPU to(this, GetRegister(nHardwareCPU::REG_AX) + GetRegister(nHardwareCPU::REG_BX));
+ const cHeadCPU from(this, GetRegister(REG_BX));
+ const cHeadCPU to(this, GetRegister(REG_AX) + GetRegister(REG_BX));
// Allow for errors in this test...
if (organism->TestCopyMut(ctx)) {
@@ -2006,15 +2029,15 @@
bool cHardwareCPU::Inst_Allocate(cAvidaContext& ctx) // Allocate bx more space...
{
const int size = GetMemory().GetSize();
- if( Allocate_Main(ctx, GetRegister(nHardwareCPU::REG_BX)) ) {
- GetRegister(nHardwareCPU::REG_AX) = size;
+ if( Allocate_Main(ctx, GetRegister(REG_BX)) ) {
+ GetRegister(REG_AX) = size;
return true;
} else return false;
}
bool cHardwareCPU::Inst_Divide(cAvidaContext& ctx)
{
- return Divide_Main(ctx, GetRegister(nHardwareCPU::REG_AX));
+ return Divide_Main(ctx, GetRegister(REG_AX));
}
/*
@@ -2027,7 +2050,7 @@
bool cHardwareCPU::Inst_DivideRS(cAvidaContext& ctx)
{
- return Divide_MainRS(ctx, GetRegister(nHardwareCPU::REG_AX));
+ return Divide_MainRS(ctx, GetRegister(REG_AX));
}
@@ -2047,7 +2070,7 @@
const int alloc_size = Min((int) (m_world->GetConfig().CHILD_SIZE_RANGE.Get() * cur_size),
MAX_CREATURE_SIZE - cur_size);
if( Allocate_Main(ctx, alloc_size) ) {
- GetRegister(nHardwareCPU::REG_AX) = cur_size;
+ GetRegister(REG_AX) = cur_size;
return true;
} else return false;
}
@@ -2099,7 +2122,7 @@
bool cHardwareCPU::Inst_Kazi(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_AX);
+ const int reg_used = FindModifiedRegister(REG_AX);
double percentProb = ((double) (GetRegister(reg_used) % 100)) / 100.0;
if ( ctx.GetRandom().P(percentProb) ) organism->Kaboom(0);
return true;
@@ -2107,7 +2130,7 @@
bool cHardwareCPU::Inst_Kazi5(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_AX);
+ const int reg_used = FindModifiedRegister(REG_AX);
double percentProb = ((double) (GetRegister(reg_used) % 100)) / 100.0;
if ( ctx.GetRandom().P(percentProb) ) organism->Kaboom(0);
return true;
@@ -2163,7 +2186,7 @@
}
// Search for the label in the host...
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
const bool inject_signal = host_organism->GetHardware().InjectHost(GetLabel(), inject_code);
if (inject_signal) {
@@ -2230,7 +2253,7 @@
}
// Search for the label in the host...
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
if (host_organism->GetHardware().InjectHost(GetLabel(), inject_code)) {
if (ForkThread()) organism->GetPhenotype().IsMultiThread() = true;
@@ -2244,7 +2267,7 @@
bool cHardwareCPU::Inst_TaskGet(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_CX);
const int value = organism->GetNextInput();
GetRegister(reg_used) = value;
organism->DoInput(value);
@@ -2268,7 +2291,7 @@
bool cHardwareCPU::Inst_TaskPut(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int value = GetRegister(reg_used);
GetRegister(reg_used) = 0;
organism->DoOutput(ctx, value);
@@ -2277,7 +2300,7 @@
bool cHardwareCPU::Inst_TaskIO(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
// Do the "put" component
const int value_out = GetRegister(reg_used);
@@ -2301,7 +2324,7 @@
bool cHardwareCPU::Inst_Send(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
organism->SendValue(GetRegister(reg_used));
GetRegister(reg_used) = 0;
return true;
@@ -2309,7 +2332,7 @@
bool cHardwareCPU::Inst_Receive(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = organism->ReceiveValue();
return true;
}
@@ -2317,7 +2340,7 @@
bool cHardwareCPU::Inst_Sense(cAvidaContext& ctx)
{
const tArray<double> & res_count = organism->GetOrgInterface().GetResources();
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
// If there are no resources to measure, this instruction fails.
if (res_count.GetSize() == 0) return false;
@@ -2485,26 +2508,26 @@
bool cHardwareCPU::Inst_SearchF(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
const int search_size = FindLabel(1).GetPosition() - IP().GetPosition();
- GetRegister(nHardwareCPU::REG_BX) = search_size;
- GetRegister(nHardwareCPU::REG_CX) = GetLabel().GetSize();
+ GetRegister(REG_BX) = search_size;
+ GetRegister(REG_CX) = GetLabel().GetSize();
return true;
}
bool cHardwareCPU::Inst_SearchB(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
const int search_size = IP().GetPosition() - FindLabel(-1).GetPosition();
- GetRegister(nHardwareCPU::REG_BX) = search_size;
- GetRegister(nHardwareCPU::REG_CX) = GetLabel().GetSize();
+ GetRegister(REG_BX) = search_size;
+ GetRegister(REG_CX) = GetLabel().GetSize();
return true;
}
bool cHardwareCPU::Inst_MemSize(cAvidaContext& ctx)
{
- GetRegister(FindModifiedRegister(nHardwareCPU::REG_BX)) = GetMemory().GetSize();
+ GetRegister(FindModifiedRegister(REG_BX)) = GetMemory().GetSize();
return true;
}
@@ -2525,7 +2548,7 @@
if (!GetLabel().GetSize()) return true;
// Rotate until a complement label is found (or all have been checked).
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
for (int i = 1; i < num_neighbors; i++) {
cOrganism* neighbor = organism->GetNeighbor();
@@ -2553,7 +2576,7 @@
if (!GetLabel().GetSize()) return true;
// Rotate until a complement label is found (or all have been checked).
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
for (int i = 1; i < num_neighbors; i++) {
cOrganism* neighbor = organism->GetNeighbor();
@@ -2567,7 +2590,7 @@
bool cHardwareCPU::Inst_SetCopyMut(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const int new_mut_rate = Max(GetRegister(reg_used), 1 );
organism->SetCopyMutProb(((double) new_mut_rate) / 10000.0);
return true;
@@ -2575,7 +2598,7 @@
bool cHardwareCPU::Inst_ModCopyMut(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
const double new_mut_rate = organism->GetCopyMutProb() +
((double)GetRegister(reg_used)) / 10000.0;
if (new_mut_rate > 0.0) organism->SetCopyMutProb(new_mut_rate);
@@ -2601,7 +2624,7 @@
bool cHardwareCPU::Inst_ThreadID(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_BX);
+ const int reg_used = FindModifiedRegister(REG_BX);
GetRegister(reg_used) = GetCurThreadID();
return true;
}
@@ -2634,21 +2657,21 @@
bool cHardwareCPU::Inst_JumpHead(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
- GetHead(head_used).Jump(GetRegister(nHardwareCPU::REG_CX) );
+ GetHead(head_used).Jump(GetRegister(REG_CX) );
return true;
}
bool cHardwareCPU::Inst_GetHead(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
- GetRegister(nHardwareCPU::REG_CX) = GetHead(head_used).GetPosition();
+ GetRegister(REG_CX) = GetHead(head_used).GetPosition();
return true;
}
bool cHardwareCPU::Inst_IfLabel(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
if (GetLabel() != GetReadLabel()) IP().Advance();
return true;
}
@@ -2658,7 +2681,7 @@
bool cHardwareCPU::Inst_IfLabel2(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
if (GetLabel() != GetReadLabel()) {
IP().Advance();
if (m_inst_set->IsNop( IP().GetNextInst() )) IP().Advance();
@@ -2728,7 +2751,7 @@
// Take the label that follows this divide and use it as the ID for which
// other organisms this one is willing to mate with.
ReadLabel();
- organism->GetPhenotype().SetMateSelectID( GetLabel().AsInt(nHardwareCPU::NUM_NOPS) );
+ organism->GetPhenotype().SetMateSelectID( GetLabel().AsInt(NUM_NOPS) );
// Proceed as normal with the rest of mate selection.
organism->GetPhenotype().SetDivideSex(true);
@@ -2775,7 +2798,7 @@
} else {
read_inst = GetHead(head_id).GetInst().GetOp();
}
- GetRegister(nHardwareCPU::REG_BX) = read_inst;
+ GetRegister(REG_BX) = read_inst;
ReadInst(read_inst);
cpu_stats.mut_stats.copies_exec++; // @CAO, this too..
@@ -2790,7 +2813,7 @@
active_head.Adjust();
- int value = GetRegister(nHardwareCPU::REG_BX);
+ int value = GetRegister(REG_BX);
if (value < 0 || value >= m_inst_set->GetSize()) value = 0;
active_head.SetInst(cInstruction(value));
@@ -2875,11 +2898,11 @@
bool cHardwareCPU::Inst_HeadSearch(cAvidaContext& ctx)
{
ReadLabel();
- GetLabel().Rotate(1, nHardwareCPU::NUM_NOPS);
+ GetLabel().Rotate(1, NUM_NOPS);
cHeadCPU found_pos = FindLabel(0);
const int search_size = found_pos.GetPosition() - IP().GetPosition();
- GetRegister(nHardwareCPU::REG_BX) = search_size;
- GetRegister(nHardwareCPU::REG_CX) = GetLabel().GetSize();
+ GetRegister(REG_BX) = search_size;
+ GetRegister(REG_CX) = GetLabel().GetSize();
GetHead(nHardware::HEAD_FLOW).Set(found_pos);
GetHead(nHardware::HEAD_FLOW).Advance();
return true;
@@ -2887,7 +2910,7 @@
bool cHardwareCPU::Inst_SetFlow(cAvidaContext& ctx)
{
- const int reg_used = FindModifiedRegister(nHardwareCPU::REG_CX);
+ const int reg_used = FindModifiedRegister(REG_CX);
GetHead(nHardware::HEAD_FLOW).Set(GetRegister(reg_used));
return true;
}
Modified: development/source/cpu/cHardwareCPU.h
===================================================================
--- development/source/cpu/cHardwareCPU.h 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/cHardwareCPU.h 2006-09-09 21:53:48 UTC (rev 936)
@@ -23,9 +23,6 @@
#ifndef nHardware_h
#include "nHardware.h"
#endif
-#ifndef nHardwareCPU_h
-#include "nHardwareCPU.h"
-#endif
#ifndef cHeadCPU_h
#include "cHeadCPU.h"
#endif
@@ -38,9 +35,6 @@
#ifndef cHardwareBase_h
#include "cHardwareBase.h"
#endif
-#ifndef cHardwareCPU_Thread_h
-#include "cHardwareCPU_Thread.h"
-#endif
#ifndef cString_h
#include "cString.h"
#endif
@@ -71,16 +65,52 @@
typedef bool (cHardwareCPU::*tHardwareCPUMethod)(cAvidaContext& ctx);
protected:
+ // -------- Structure Constants --------
+ static const int NUM_REGISTERS = 3;
+ enum tRegisters { REG_AX = 0, REG_BX, REG_CX, REG_DX, REG_EX, REG_FX };
+ static const int NUM_NOPS = 3;
+
+ // -------- Data Structures --------
+ struct cLocalThread
+ {
+ private:
+ int m_id;
+
+ public:
+ int reg[NUM_REGISTERS];
+ cHeadCPU heads[nHardware::NUM_HEADS];
+ cCPUStack stack;
+ unsigned char cur_stack; // 0 = local stack, 1 = global stack.
+ unsigned char cur_head;
+
+ cCodeLabel read_label;
+ cCodeLabel next_label;
+
+
+ cLocalThread(cHardwareBase* in_hardware = NULL, int in_id = -1) { Reset(in_hardware, in_id); }
+ ~cLocalThread() { ; }
+
+ void operator=(const cLocalThread& in_thread);
+
+ void Reset(cHardwareBase* in_hardware, int in_id);
+ int GetID() const { return m_id; }
+ void SetID(int in_id) { m_id = in_id; }
+ };
+
+
+ // -------- Static Variables --------
static cInstLibCPU* s_inst_slib;
static cInstLibCPU* initInstLib(void);
+
+ // -------- Member Variables --------
tHardwareCPUMethod* m_functions;
cCPUMemory memory; // Memory...
cCPUStack global_stack; // A stack that all threads share.
int thread_time_used;
- tArray<cHardwareCPU_Thread> threads;
+ tArray<cLocalThread> threads;
int thread_id_chart;
int cur_thread;
@@ -205,7 +235,7 @@
// -------- Register Manipulation --------
const int GetRegister(int reg_id) const { return threads[cur_thread].reg[reg_id]; }
int& GetRegister(int reg_id) { return threads[cur_thread].reg[reg_id]; }
- int GetNumRegisters() const { return nHardwareCPU::NUM_REGISTERS; }
+ int GetNumRegisters() const { return NUM_REGISTERS; }
// -------- Thread Manipulation --------
Deleted: development/source/cpu/cHardwareCPU_Thread.cc
===================================================================
--- development/source/cpu/cHardwareCPU_Thread.cc 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/cHardwareCPU_Thread.cc 2006-09-09 21:53:48 UTC (rev 936)
@@ -1,59 +0,0 @@
-/*
- * cHardwareCPU_Thread.cc
- * Avida
- *
- * Called "hardware_cpu_thread.cc" prior to 11/30/05.
- * Copyright 2005-2006 Michigan State University. All rights reserved.
- * Copyright 1999-2003 California Institute of Technology.
- *
- */
-
-#include "cHardwareCPU_Thread.h"
-
-using namespace std;
-
-cHardwareCPU_Thread::cHardwareCPU_Thread(cHardwareBase * in_hardware, int _id)
-{
- Reset(in_hardware, _id);
-}
-
-cHardwareCPU_Thread::cHardwareCPU_Thread(const cHardwareCPU_Thread & in_thread, int _id)
-{
- id = _id;
- if (id == -1) id = in_thread.id;
- for (int i = 0; i < nHardwareCPU::NUM_REGISTERS; i++) {
- reg[i] = in_thread.reg[i];
- }
- for (int i = 0; i < nHardware::NUM_HEADS; i++) {
- heads[i] = in_thread.heads[i];
- }
- stack = in_thread.stack;
-}
-
-cHardwareCPU_Thread::~cHardwareCPU_Thread() {}
-
-void cHardwareCPU_Thread::operator=(const cHardwareCPU_Thread & in_thread)
-{
- id = in_thread.id;
- for (int i = 0; i < nHardwareCPU::NUM_REGISTERS; i++) {
- reg[i] = in_thread.reg[i];
- }
- for (int i = 0; i < nHardware::NUM_HEADS; i++) {
- heads[i] = in_thread.heads[i];
- }
- stack = in_thread.stack;
-}
-
-void cHardwareCPU_Thread::Reset(cHardwareBase * in_hardware, int _id)
-{
- id = _id;
-
- for (int i = 0; i < nHardwareCPU::NUM_REGISTERS; i++) reg[i] = 0;
- for (int i = 0; i < nHardware::NUM_HEADS; i++) heads[i].Reset(in_hardware);
-
- stack.Clear();
- cur_stack = 0;
- cur_head = nHardware::HEAD_IP;
- read_label.Clear();
- next_label.Clear();
-}
Deleted: development/source/cpu/cHardwareCPU_Thread.h
===================================================================
--- development/source/cpu/cHardwareCPU_Thread.h 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/cHardwareCPU_Thread.h 2006-09-09 21:53:48 UTC (rev 936)
@@ -1,77 +0,0 @@
-/*
- * cHardwareCPU_Thread.h
- * Avida
- *
- * Called "hardware_cpu_thread.hh" prior to 11/30/05.
- * Copyright 2005-2006 Michigan State University. All rights reserved.
- * Copyright 1999-2003 California Institute of Technology.
- *
- */
-
-#ifndef cHardwareCPU_Thread_h
-#define cHardwareCPU_Thread_h
-
-#include <iostream>
-
-#ifndef cCodeLabel_h
-#include "cCodeLabel.h"
-#endif
-#ifndef nHardware_h
-#include "nHardware.h"
-#endif
-#ifndef nHardwareCPU_h
-#include "nHardwareCPU.h"
-#endif
-#ifndef cHeadCPU_h
-#include "cHeadCPU.h"
-#endif
-#ifndef cCPUStack_h
-#include "cCPUStack.h"
-#endif
-
-/**
- * This class is needed to run several threads on a single genome.
- *
- * @see cCPUStack, cHeadCPU, cHardwareCPU
- **/
-
-struct cHardwareCPU_Thread
-{
-private:
- int id;
-
-public:
- int reg[nHardwareCPU::NUM_REGISTERS];
- cHeadCPU heads[nHardware::NUM_HEADS];
- cCPUStack stack;
- unsigned char cur_stack; // 0 = local stack, 1 = global stack.
- unsigned char cur_head;
-
- cCodeLabel read_label;
- cCodeLabel next_label;
-
-
- cHardwareCPU_Thread(cHardwareBase* in_hardware = NULL, int _id = -1);
- cHardwareCPU_Thread(const cHardwareCPU_Thread& in_thread, int _id = -1);
- ~cHardwareCPU_Thread();
-
- void operator=(const cHardwareCPU_Thread& in_thread);
-
- void Reset(cHardwareBase* in_hardware, int _id);
- int GetID() const { return id; }
- void SetID(int _id) { id = _id; }
-};
-
-
-#ifdef ENABLE_UNIT_TESTS
-namespace nHardwareCPU_Thread {
- /**
- * Run unit tests
- *
- * @param full Run full test suite; if false, just the fast tests.
- **/
- void UnitTests(bool full = false);
-}
-#endif
-
-#endif
Deleted: development/source/cpu/nHardwareCPU.h
===================================================================
--- development/source/cpu/nHardwareCPU.h 2006-09-09 21:32:09 UTC (rev 935)
+++ development/source/cpu/nHardwareCPU.h 2006-09-09 21:53:48 UTC (rev 936)
@@ -1,26 +0,0 @@
-/*
- * nHardwareCPU.h
- * Avida
- *
- * Created by David on 11/30/05.
- * Copyright 2005-2006 Michigan State University. All rights reserved.
- * Copyright 1999-2003 California Institute of Technology.
- *
- */
-
-#ifndef nHardwareCPU_h
-#define nHardwareCPU_h
-
-// The following defines setup the structure of the CPU. Changing them
-// (especially the number of registers) could have effects in other parts
-// of the code!
-
-namespace nHardwareCPU {
- static const int NUM_REGISTERS = 3;
-
- enum tRegisters { REG_AX = 0, REG_BX, REG_CX, REG_DX, REG_EX, REG_FX };
-
- static const int NUM_NOPS = 3;
-}
-
-#endif
More information about the Avida-cvs
mailing list