[Avida-SVN] r2831 - in development: Avida.xcodeproj source source/cpu source/main source/script source/targets/avida-s
brysonda at myxo.css.msu.edu
brysonda at myxo.css.msu.edu
Fri Oct 10 09:51:11 PDT 2008
Author: brysonda
Date: 2008-10-10 12:51:11 -0400 (Fri, 10 Oct 2008)
New Revision: 2831
Added:
development/source/script/ASAvidaLib.cc
development/source/script/ASAvidaLib.h
Modified:
development/Avida.xcodeproj/project.pbxproj
development/source/cpu/cHardwareSMT.cc
development/source/cpu/cHardwareTransSMT.cc
development/source/defs.h
development/source/main/avida.cc
development/source/script/AvidaScript.cc
development/source/script/AvidaScript.h
development/source/script/cASCPPParameter.h
development/source/script/cASNativeObject.h
development/source/script/cDirectInterpretASTVisitor.cc
development/source/targets/avida-s/main.cc
Log:
AS: More work on native object support
AS: Add version banner to executable output
SMT: Cleanup deprecated non-fully associative compilation variants
Modified: development/Avida.xcodeproj/project.pbxproj
===================================================================
--- development/Avida.xcodeproj/project.pbxproj 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/Avida.xcodeproj/project.pbxproj 2008-10-10 16:51:11 UTC (rev 2831)
@@ -200,6 +200,7 @@
70B1A75A0B7E431F00067486 /* experimental.org in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70B1A7590B7E431F00067486 /* experimental.org */; };
70B6514F0BEA6FCC002472ED /* main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 701EF27E0BEA5D2300DAE168 /* main.cc */; };
70B651B70BEA9AEC002472ED /* unit-tests in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70B6514C0BEA6FAD002472ED /* unit-tests */; };
+ 70BB2A2B0E9FA12F008269D2 /* ASAvidaLib.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70BB2A2A0E9FA12F008269D2 /* ASAvidaLib.cc */; };
70DCAC9C097AF7C0002F8733 /* primitive.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70DCAC9B097AF7C0002F8733 /* primitive.cc */; };
70EFD6600D975B6E00FAD32A /* cConstBurstSchedule.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70EFD65F0D975B5E00FAD32A /* cConstBurstSchedule.cc */; };
B4FA258A0C5EB65E0086D4B5 /* cPlasticPhenotype.cc in Sources */ = {isa = PBXBuildFile; fileRef = B4FA25810C5EB6510086D4B5 /* cPlasticPhenotype.cc */; };
@@ -736,6 +737,8 @@
70B1A7590B7E431F00067486 /* experimental.org */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = experimental.org; sourceTree = "<group>"; };
70B3984E0947B29D0018F09D /* tManagedPointerArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tManagedPointerArray.h; sourceTree = "<group>"; };
70B6514C0BEA6FAD002472ED /* unit-tests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "unit-tests"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 70BB2A290E9FA12F008269D2 /* ASAvidaLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASAvidaLib.h; sourceTree = "<group>"; };
+ 70BB2A2A0E9FA12F008269D2 /* ASAvidaLib.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASAvidaLib.cc; sourceTree = "<group>"; };
70BCB21B0AB7ADA6003FF331 /* cArgContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cArgContainer.h; sourceTree = "<group>"; };
70BCB21C0AB7ADA6003FF331 /* cArgContainer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cArgContainer.cc; sourceTree = "<group>"; };
70BCB2470AB7B634003FF331 /* cArgSchema.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cArgSchema.h; sourceTree = "<group>"; };
@@ -1247,6 +1250,8 @@
70A33CF50D8DCBB4008EF976 /* ASCoreLib.cc */,
70AE2D360E7DCAA100A520B5 /* cASNativeObject.h */,
70AE2D3B0E7DF6C500A520B5 /* cASCPPParameter.h */,
+ 70BB2A290E9FA12F008269D2 /* ASAvidaLib.h */,
+ 70BB2A2A0E9FA12F008269D2 /* ASAvidaLib.cc */,
);
path = script;
sourceTree = "<group>";
@@ -2061,6 +2066,7 @@
7050E69F0D74CFED008B3CA0 /* cDumpASTVisitor.cc in Sources */,
7050E7D70D7DC979008B3CA0 /* cDirectInterpretASTVisitor.cc in Sources */,
70A33CF60D8DCBB4008EF976 /* ASCoreLib.cc in Sources */,
+ 70BB2A2B0E9FA12F008269D2 /* ASAvidaLib.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2284,7 +2290,6 @@
buildSettings = {
DEBUG_INFORMATION_FORMAT = dwarf;
GCC_DEBUGGING_SYMBOLS = full;
- GCC_ENABLE_CPP_RTTI = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -2312,7 +2317,6 @@
GCC_ALTIVEC_EXTENSIONS = YES;
GCC_AUTO_VECTORIZATION = YES;
GCC_DYNAMIC_NO_PIC = YES;
- GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_SSE3_EXTENSIONS = YES;
GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
GCC_FAST_MATH = YES;
@@ -2420,7 +2424,6 @@
GCC_ALTIVEC_EXTENSIONS = YES;
GCC_AUTO_VECTORIZATION = YES;
GCC_DYNAMIC_NO_PIC = YES;
- GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_SSE3_EXTENSIONS = YES;
GCC_FAST_MATH = YES;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
@@ -2473,7 +2476,6 @@
GCC_AUTO_VECTORIZATION = YES;
GCC_DEBUGGING_SYMBOLS = full;
GCC_DYNAMIC_NO_PIC = YES;
- GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_SSE3_EXTENSIONS = YES;
GCC_FAST_MATH = YES;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
@@ -2610,7 +2612,6 @@
GCC_ALTIVEC_EXTENSIONS = YES;
GCC_AUTO_VECTORIZATION = YES;
GCC_DYNAMIC_NO_PIC = YES;
- GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_SSE3_EXTENSIONS = YES;
GCC_FAST_MATH = YES;
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
Modified: development/source/cpu/cHardwareSMT.cc
===================================================================
--- development/source/cpu/cHardwareSMT.cc 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/cpu/cHardwareSMT.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -990,13 +990,8 @@
bool cHardwareSMT::Inst_ValShift(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(dst);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = dst;
- const int op2 = FindNextStack(dst);
-#endif
int value = Stack(op1).Top();
int shift = Stack(op2).Top();
@@ -1015,13 +1010,8 @@
bool cHardwareSMT::Inst_ValNand(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(~(Stack(op1).Top() & Stack(op2).Top()));
return true;
}
@@ -1029,13 +1019,8 @@
bool cHardwareSMT::Inst_ValAdd(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(Stack(op1).Top() + Stack(op2).Top());
return true;
}
@@ -1043,11 +1028,7 @@
bool cHardwareSMT::Inst_ValNegate(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
-#else
- const int op1 = STACK_BX;
-#endif
Stack(dst).Push(-Stack(op1).Top());
return true;
}
@@ -1055,13 +1036,8 @@
bool cHardwareSMT::Inst_ValSub(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(Stack(op1).Top() - Stack(op2).Top());
return true;
}
@@ -1069,13 +1045,8 @@
bool cHardwareSMT::Inst_ValMult(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(Stack(op1).Top() * Stack(op2).Top());
return true;
}
@@ -1083,13 +1054,8 @@
bool cHardwareSMT::Inst_ValDiv(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
if (Stack(op2).Top() != 0) {
if (-INT_MAX > Stack(op1).Top() && Stack(op2).Top() == -1) {
organism->Fault(FAULT_LOC_MATH, FAULT_TYPE_ERROR, "div: overflow exception");
@@ -1107,13 +1073,8 @@
bool cHardwareSMT::Inst_ValMod(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
if (Stack(op2).Top() != 0) {
Stack(dst).Push(Stack(op1).Top() % Stack(op2).Top());
} else {
@@ -1126,11 +1087,7 @@
bool cHardwareSMT::Inst_ValInc(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
int value = Stack(src).Top();
Stack(dst).Push(++value);
return true;
@@ -1139,11 +1096,7 @@
bool cHardwareSMT::Inst_ValDec(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
int value = Stack(src).Top();
Stack(dst).Push(--value);
return true;
@@ -1152,11 +1105,7 @@
bool cHardwareSMT::Inst_ValCopy(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
Stack(dst).Push(Stack(src).Top());
return true;
}
@@ -1179,11 +1128,7 @@
bool cHardwareSMT::Inst_PushNext(cAvidaContext& ctx)
{
const int src = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedNextStack(src);
-#else
- const int dst = FindNextStack(src);
-#endif
Stack(dst).Push(Stack(src).Pop());
return true;
}
@@ -1191,11 +1136,7 @@
bool cHardwareSMT::Inst_PushPrev(cAvidaContext& ctx)
{
const int src = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedPreviousStack(src);
-#else
- const int dst = FindPreviousStack(src);
-#endif
Stack(dst).Push(Stack(src).Pop());
return true;
}
@@ -1203,11 +1144,7 @@
bool cHardwareSMT::Inst_PushComp(cAvidaContext& ctx)
{
int src = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedComplementStack(src);
-#else
- const int dst = FindComplementStack(src);
-#endif
Stack(dst).Push(Stack(src).Pop());
return true;
}
@@ -1262,11 +1199,7 @@
bool cHardwareSMT::Inst_InstRead(cAvidaContext& ctx)
{
const int head_id = FindModifiedHead(nHardware::HEAD_READ);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedStack(STACK_AX);
-#else
- const int dst = STACK_AX;
-#endif
GetHead(head_id).Adjust();
// sCPUStats& cpu_stats = organism->CPUStats();
@@ -1290,11 +1223,7 @@
bool cHardwareSMT::Inst_InstWrite(cAvidaContext& ctx)
{
const int head_id = FindModifiedHead(nHardware::HEAD_WRITE);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(STACK_AX);
-#else
- const int src = STACK_AX;
-#endif
cHeadCPU & active_head = GetHead(head_id);
int mem_space_used = active_head.GetMemSpace();
@@ -1333,11 +1262,7 @@
bool cHardwareSMT::Inst_IfEqual(cAvidaContext& ctx) // Execute next if op1 == op2
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() != Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1345,11 +1270,7 @@
bool cHardwareSMT::Inst_IfNotEqual(cAvidaContext& ctx) // Execute next if op1 != op2
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() == Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1357,11 +1278,7 @@
bool cHardwareSMT::Inst_IfLess(cAvidaContext& ctx) // Execute next if op1 < op2
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() >= Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1369,11 +1286,7 @@
bool cHardwareSMT::Inst_IfGreater(cAvidaContext& ctx) // Execute next if op1 > op2
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() <= Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1381,11 +1294,7 @@
bool cHardwareSMT::Inst_HeadPush(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedStack(STACK_BX);
-#else
- const int dst = STACK_BX;
-#endif
Stack(dst).Push(GetHead(head_used).GetFullLocation());
return true;
}
@@ -1393,11 +1302,7 @@
bool cHardwareSMT::Inst_HeadPop(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(STACK_BX);
-#else
- const int src = STACK_BX;
-#endif
GetHead(head_used).SetFullLocation(Stack(src).Pop());
return true;
}
@@ -1405,11 +1310,7 @@
bool cHardwareSMT::Inst_HeadMove(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
-#if SMT_FULLY_ASSOCIATIVE
const int target = FindModifiedHead(nHardware::HEAD_FLOW);
-#else
- const int target = nHardware::HEAD_FLOW;
-#endif
if (head_used != target) {
GetHead(head_used).Set(GetHead(target));
@@ -1493,11 +1394,7 @@
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
// Do the "put" component
const int value_out = Stack(src).Top();
Modified: development/source/cpu/cHardwareTransSMT.cc
===================================================================
--- development/source/cpu/cHardwareTransSMT.cc 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/cpu/cHardwareTransSMT.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -981,11 +981,7 @@
bool cHardwareTransSMT::Inst_ShiftR(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
int value = Stack(src).Pop();
value >>= 1;
Stack(dst).Push(value);
@@ -996,11 +992,7 @@
bool cHardwareTransSMT::Inst_ShiftL(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
int value = Stack(src).Pop();
value <<= 1;
Stack(dst).Push(value);
@@ -1011,13 +1003,8 @@
bool cHardwareTransSMT::Inst_Val_Nand(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(~(Stack(op1).Top() & Stack(op2).Top()));
return true;
}
@@ -1026,13 +1013,8 @@
bool cHardwareTransSMT::Inst_Val_Add(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(Stack(op1).Top() + Stack(op2).Top());
return true;
}
@@ -1041,13 +1023,8 @@
bool cHardwareTransSMT::Inst_Val_Sub(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(Stack(op1).Top() - Stack(op2).Top());
return true;
}
@@ -1056,13 +1033,8 @@
bool cHardwareTransSMT::Inst_Val_Mult(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
Stack(dst).Push(Stack(op1).Top() * Stack(op2).Top());
return true;
}
@@ -1071,13 +1043,8 @@
bool cHardwareTransSMT::Inst_Val_Div(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
if (Stack(op2).Top() != 0) {
if (0-INT_MAX > Stack(op1).Top() && Stack(op2).Top() == -1)
organism->Fault(FAULT_LOC_MATH, FAULT_TYPE_ERROR, "div: Float exception");
@@ -1094,13 +1061,8 @@
bool cHardwareTransSMT::Inst_Val_Mod(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int op1 = FindModifiedStack(STACK_BX);
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op1 = STACK_BX;
- const int op2 = STACK_CX;
-#endif
if (Stack(op2).Top() != 0) {
if(Stack(op2).Top() == -1)
Stack(dst).Push(0);
@@ -1117,11 +1079,7 @@
bool cHardwareTransSMT::Inst_Val_Inc(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
int value = Stack(src).Pop();
Stack(dst).Push(++value);
return true;
@@ -1131,11 +1089,7 @@
bool cHardwareTransSMT::Inst_Val_Dec(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
int value = Stack(src).Pop();
Stack(dst).Push(--value);
return true;
@@ -1167,11 +1121,7 @@
bool cHardwareTransSMT::Inst_HeadRead(cAvidaContext& ctx)
{
const int head_id = FindModifiedHead(nHardware::HEAD_READ);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedStack(STACK_AX);
-#else
- const int dst = STACK_AX;
-#endif
GetHead(head_id).Adjust();
// sCPUStats & cpu_stats = organism->CPUStats();
@@ -1196,11 +1146,7 @@
bool cHardwareTransSMT::Inst_HeadWrite(cAvidaContext& ctx)
{
const int head_id = FindModifiedHead(nHardware::HEAD_WRITE);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(STACK_AX);
-#else
- const int src = STACK_AX;
-#endif
cHeadCPU & active_head = GetHead(head_id);
int mem_space_used = active_head.GetMemSpace();
@@ -1228,11 +1174,7 @@
bool cHardwareTransSMT::Inst_IfEqual(cAvidaContext& ctx) // Execute next if bx == ?cx?
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() != Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1241,11 +1183,7 @@
bool cHardwareTransSMT::Inst_IfNotEqual(cAvidaContext& ctx) // Execute next if bx != ?cx?
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() == Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1254,11 +1192,7 @@
bool cHardwareTransSMT::Inst_IfLess(cAvidaContext& ctx) // Execute next if ?bx? < ?cx?
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() >= Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1267,11 +1201,7 @@
bool cHardwareTransSMT::Inst_IfGreater(cAvidaContext& ctx) // Execute next if bx > ?cx?
{
const int op1 = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int op2 = FindModifiedNextStack(op1);
-#else
- const int op2 = FindNextStack(op1);
-#endif
if (Stack(op1).Top() <= Stack(op2).Top()) IP().Advance();
return true;
}
@@ -1280,11 +1210,7 @@
bool cHardwareTransSMT::Inst_HeadPush(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedStack(STACK_BX);
-#else
- const int dst = STACK_BX;
-#endif
Stack(dst).Push(GetHead(head_used).GetPosition());
return true;
}
@@ -1293,11 +1219,7 @@
bool cHardwareTransSMT::Inst_HeadPop(cAvidaContext& ctx)
{
const int head_used = FindModifiedHead(nHardware::HEAD_IP);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(STACK_BX);
-#else
- const int src = STACK_BX;
-#endif
GetHead(head_used).Set(Stack(src).Pop(), GetHead(head_used).GetMemSpace());
return true;
}
@@ -1346,11 +1268,7 @@
bool cHardwareTransSMT::Inst_PushNext(cAvidaContext& ctx)
{
const int src = FindModifiedStack(STACK_AX);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedNextStack(src);
-#else
- const int dst = FindNextStack(src);
-#endif
Stack(dst).Push(Stack(src).Pop());
return true;
}
@@ -1359,11 +1277,7 @@
bool cHardwareTransSMT::Inst_PushPrevious(cAvidaContext& ctx)
{
const int src = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedPreviousStack(src);
-#else
- const int dst = FindPreviousStack(src);
-#endif
Stack(dst).Push(Stack(src).Pop());
return true;
}
@@ -1372,11 +1286,7 @@
bool cHardwareTransSMT::Inst_PushComplement(cAvidaContext& ctx)
{
int src = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int dst = FindModifiedComplementStack(src);
-#else
- const int dst = FindComplementStack(src);
-#endif
Stack(dst).Push(Stack(src).Pop());
return true;
}
@@ -1393,11 +1303,7 @@
bool cHardwareTransSMT::Inst_ValCopy(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
Stack(dst).Push(Stack(src).Top());
return true;
}
@@ -1406,11 +1312,7 @@
bool cHardwareTransSMT::Inst_IO(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int src = FindModifiedStack(dst);
-#else
- const int src = dst;
-#endif
// Do the "put" component
const int value_out = Stack(src).Top();
@@ -1487,11 +1389,7 @@
bool cHardwareTransSMT::Inst_NetGet(cAvidaContext& ctx)
{
const int dst = FindModifiedStack(STACK_BX);
-#if SMT_FULLY_ASSOCIATIVE
const int seq_dst = FindModifiedNextStack(dst);
-#else
- const int seq_dst = FindNextStack(dst);
-#endif
int val, seq;
organism->NetGet(ctx, val, seq);
Stack(dst).Push(val);
Modified: development/source/defs.h
===================================================================
--- development/source/defs.h 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/defs.h 2008-10-10 16:51:11 UTC (rev 2831)
@@ -40,9 +40,6 @@
#ifndef INSTRUCTION_COUNT
#define INSTRUCTION_COUNT 1
#endif
-#ifndef SMT_FULLY_ASSOCIATIVE
-#define SMT_FULLY_ASSOCIATIVE 1
-#endif
#ifndef FATAL_ERRORS
#define FATAL_ERRORS 0
#endif
Modified: development/source/main/avida.cc
===================================================================
--- development/source/main/avida.cc 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/main/avida.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -76,9 +76,6 @@
#if INSTRUCTION_COUNT
version += " inst_cnt";
#endif
-#if SMT_FULLY_ASSOCIATIVE
- version += " smt_fa";
-#endif
#ifdef ENABLE_UNIT_TESTS
version += " ut";
#endif
@@ -94,7 +91,7 @@
// output copyright message
cout << GetVersion() << endl << endl;
- cout << "----------------------------------------------------------------------" << endl;
+ cout << "--------------------------------------------------------------------------------" << endl;
cout << "by Charles Ofria" << endl << endl;
cout << "Lead Developers: David M. Bryson (Avida) and Kaben Nanlohy (Avida-ED)" << endl << endl;
@@ -116,8 +113,8 @@
cout << "This is free software, and you are welcome to redistribute it" << endl;
cout << "under certain conditions. See file COPYING for details." << endl << endl;
- cout << "For more information, see: http://devolab.cse.msu.edu/software/avida/" << endl;
- cout << "----------------------------------------------------------------------" << endl << endl;
+ cout << "For more information, see: http://avida.devosoft.org/" << endl;
+ cout << "--------------------------------------------------------------------------------" << endl << endl;
}
void ProcessArgs(cStringList &argv, cAvidaConfig* cfg)
Added: development/source/script/ASAvidaLib.cc
===================================================================
--- development/source/script/ASAvidaLib.cc (rev 0)
+++ development/source/script/ASAvidaLib.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -0,0 +1,90 @@
+/*
+ * ASAvidaLib.cc
+ * Avida
+ *
+ * Created by David on 10/10/08.
+ * Copyright 2008 Michigan State University. All rights reserved.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "ASAvidaLib.h"
+
+#include "cASNativeObject.h"
+#include "cASLibrary.h"
+
+#include "cAvidaConfig.h"
+
+template<class FunctionType> class tASNativeObjectInstantiate;
+
+template<class NativeClass>
+class tASNativeObjectInstantiate<NativeClass ()> : public cASFunction
+{
+private:
+ sASTypeInfo m_signature;
+
+public:
+ tASNativeObjectInstantiate(const cString& name) : cASFunction(name)
+ {
+ m_rtype = AvidaScript::TypeOf<cASNativeObject>();
+ m_rtype.info = name;
+ m_signature = AvidaScript::TypeOf<void>();
+ }
+
+ int GetArity() const { return 0; }
+ const sASTypeInfo& GetArgumentType(int arg) const { return m_signature; }
+
+ cASCPPParameter Call(cASCPPParameter args[]) const
+ {
+ cASCPPParameter rvalue;
+ rvalue.Set(new tASNativeObject<NativeClass>(new NativeClass()));
+ return rvalue;
+ }
+};
+
+
+template<class NativeClass, typename Arg1Type>
+class tASNativeObjectInstantiate<NativeClass (Arg1Type)> : public cASFunction
+{
+private:
+ sASTypeInfo m_signature;
+
+public:
+ tASNativeObjectInstantiate(const cString& name) : cASFunction(name)
+ {
+ m_rtype = AvidaScript::TypeOf<cASNativeObject>();
+ m_rtype.info = name;
+ m_signature = AvidaScript::TypeOf<Arg1Type>();
+ }
+
+ int GetArity() const { return 1; }
+ const sASTypeInfo& GetArgumentType(int arg) const { return m_signature; }
+
+ cASCPPParameter Call(cASCPPParameter args[]) const
+ {
+ cASCPPParameter rvalue;
+ rvalue.Set(new tASNativeObject<NativeClass>(new NativeClass(args[0].Get<Arg1Type>())));
+ return rvalue;
+ }
+};
+
+
+
+void RegisterASAvidaLib(cASLibrary* lib)
+{
+ lib->RegisterFunction(new tASNativeObjectInstantiate<cAvidaConfig ()>("Config"));
+}
Added: development/source/script/ASAvidaLib.h
===================================================================
--- development/source/script/ASAvidaLib.h (rev 0)
+++ development/source/script/ASAvidaLib.h 2008-10-10 16:51:11 UTC (rev 2831)
@@ -0,0 +1,33 @@
+/*
+ * ASAvidaLib.h
+ * Avida
+ *
+ * Created by David on 10/10/08.
+ * Copyright 2008 Michigan State University. All rights reserved.
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; version 2
+ * of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ASAvidaLib_h
+#define ASAvidaLib_h
+
+class cASLibrary;
+
+void RegisterASAvidaLib(cASLibrary* lib);
+
+#endif
+
Modified: development/source/script/AvidaScript.cc
===================================================================
--- development/source/script/AvidaScript.cc 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/script/AvidaScript.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -33,8 +33,22 @@
case AS_BUILTIN_CAST_INT: return "asint";
case AS_BUILTIN_CAST_FLOAT: return "asfloat";
case AS_BUILTIN_CAST_STRING: return "asstring";
+ case AS_BUILTIN_IS_ARRAY: return "is_array";
+ case AS_BUILTIN_IS_BOOL: return "is_bool";
+ case AS_BUILTIN_IS_CHAR: return "is_char";
+ case AS_BUILTIN_IS_DICT: return "is_dict";
+ case AS_BUILTIN_IS_INT: return "is_int";
+ case AS_BUILTIN_IS_FLOAT: return "is_float";
+ case AS_BUILTIN_IS_MATRIX: return "is_matrix";
+ case AS_BUILTIN_IS_STRING: return "is_string";
+ case AS_BUILTIN_CLEAR: return "clear";
+ case AS_BUILTIN_COPY: return "copy";
+ case AS_BUILTIN_HASKEY: return "haskey";
+ case AS_BUILTIN_KEYS: return "keys";
case AS_BUILTIN_LEN: return "len";
+ case AS_BUILTIN_REMOVE: return "remove";
case AS_BUILTIN_RESIZE: return "resize";
+ case AS_BUILTIN_VALUES: return "values";
default: return "?";
}
}
Modified: development/source/script/AvidaScript.h
===================================================================
--- development/source/script/AvidaScript.h 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/script/AvidaScript.h 2008-10-10 16:51:11 UTC (rev 2831)
@@ -248,6 +248,8 @@
};
+class cASNativeObject;
+
namespace AvidaScript {
const char* mapBuiltIn(ASBuiltIn_t builtin);
const char* mapToken(ASToken_t token);
@@ -260,6 +262,7 @@
template<> inline sASTypeInfo TypeOf<double>() { return sASTypeInfo(AS_TYPE_FLOAT); }
template<> inline sASTypeInfo TypeOf<const cString&>() { return sASTypeInfo(AS_TYPE_STRING); }
template<> inline sASTypeInfo TypeOf<void>() { return sASTypeInfo(AS_TYPE_VOID); }
+ template<> inline sASTypeInfo TypeOf<cASNativeObject>() { return sASTypeInfo(AS_TYPE_OBJECT_REF); }
};
#endif
Modified: development/source/script/cASCPPParameter.h
===================================================================
--- development/source/script/cASCPPParameter.h 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/script/cASCPPParameter.h 2008-10-10 16:51:11 UTC (rev 2831)
@@ -30,6 +30,7 @@
#include "cString.h"
+class cASNativeObject;
class cASCPPParameter
{
@@ -40,6 +41,7 @@
int m_int;
double m_float;
cString* m_string;
+ cASNativeObject* m_nobj;
};
public:
@@ -51,6 +53,7 @@
void Set(double val) { m_float = val; }
void Set(cString* val) { m_string = val; }
void Set(const cString& val) { m_string = new cString(val); }
+ void Set(cASNativeObject* val) { m_nobj = val; }
template<typename T> inline T Get() const { Avida::Exit(AS_EXIT_INTERNAL_ERROR); return m_int; }
};
@@ -62,5 +65,6 @@
template<> inline const cString& cASCPPParameter::Get<const cString&>() const { return *m_string; }
template<> inline const cString* cASCPPParameter::Get<const cString*>() const { return m_string; }
template<> inline cString* cASCPPParameter::Get<cString*>() const { return m_string; }
+template<> inline cASNativeObject* cASCPPParameter::Get<cASNativeObject*>() const { return m_nobj; }
#endif
Modified: development/source/script/cASNativeObject.h
===================================================================
--- development/source/script/cASNativeObject.h 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/script/cASNativeObject.h 2008-10-10 16:51:11 UTC (rev 2831)
@@ -29,6 +29,8 @@
#include "cASCPPParameter.h"
+#include <typeinfo>
+
class cString;
class cASNativeObject
@@ -53,7 +55,7 @@
};
-template<class NativeClass, const char* TypeName>
+template<class NativeClass>
class tASNativeObject : public cASNativeObject
{
private:
@@ -63,7 +65,7 @@
tASNativeObject(NativeClass* obj) : m_object(obj) { ; }
~tASNativeObject() { delete m_object; }
- const char* GetType() { return TypeName; }
+ const char* GetType() { return typeid(m_object).name(); }
bool CallMethod(int mid, int argc, cASCPPParameter args[]) { return false; } // @TODO;
};
Modified: development/source/script/cDirectInterpretASTVisitor.cc
===================================================================
--- development/source/script/cDirectInterpretASTVisitor.cc 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/script/cDirectInterpretASTVisitor.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -1154,21 +1154,23 @@
// Setup arguments
cASCPPParameter* args = new cASCPPParameter[func->GetArity()];
- tListIterator<cASTNode> cit = node.GetArguments()->Iterator();
- cASTNode* an = NULL;
- for (int i = 0; i < func->GetArity(); i++) {
- an = cit.Next();
- an->Accept(*this);
-
- switch (func->GetArgumentType(i).type) {
- case TYPE(BOOL): args[i].Set(asBool(m_rtype, m_rvalue, node)); break;
- case TYPE(CHAR): args[i].Set(asChar(m_rtype, m_rvalue, node)); break;
- case TYPE(FLOAT): args[i].Set(asFloat(m_rtype, m_rvalue, node)); break;
- case TYPE(INT): args[i].Set(asInt(m_rtype, m_rvalue, node)); break;
- case TYPE(STRING): args[i].Set(asString(m_rtype, m_rvalue, node)); break;
-
- default:
- INTERPRET_ERROR(INTERNAL);
+ if (func->GetArity()) {
+ tListIterator<cASTNode> cit = node.GetArguments()->Iterator();
+ cASTNode* an = NULL;
+ for (int i = 0; i < func->GetArity(); i++) {
+ an = cit.Next();
+ an->Accept(*this);
+
+ switch (func->GetArgumentType(i).type) {
+ case TYPE(BOOL): args[i].Set(asBool(m_rtype, m_rvalue, node)); break;
+ case TYPE(CHAR): args[i].Set(asChar(m_rtype, m_rvalue, node)); break;
+ case TYPE(FLOAT): args[i].Set(asFloat(m_rtype, m_rvalue, node)); break;
+ case TYPE(INT): args[i].Set(asInt(m_rtype, m_rvalue, node)); break;
+ case TYPE(STRING): args[i].Set(asString(m_rtype, m_rvalue, node)); break;
+
+ default:
+ INTERPRET_ERROR(INTERNAL);
+ }
}
}
@@ -1182,6 +1184,7 @@
case TYPE(FLOAT): m_rvalue.as_float = rvalue.Get<double>(); break;
case TYPE(INT): m_rvalue.as_int = rvalue.Get<int>(); break;
case TYPE(STRING): m_rvalue.as_string = rvalue.Get<cString*>(); break;
+ case TYPE(OBJECT_REF): m_rvalue.as_nobj = rvalue.Get<cASNativeObject*>(); break;
case TYPE(VOID): break;
default:
Modified: development/source/targets/avida-s/main.cc
===================================================================
--- development/source/targets/avida-s/main.cc 2008-10-10 15:06:36 UTC (rev 2830)
+++ development/source/targets/avida-s/main.cc 2008-10-10 16:51:11 UTC (rev 2831)
@@ -26,6 +26,7 @@
#include "PlatformExpert.h"
#include "ASCoreLib.h"
+#include "ASAvidaLib.h"
#include "cASLibrary.h"
#include "cDirectInterpretASTVisitor.h"
@@ -42,8 +43,11 @@
{
PlatformExpert::Initialize();
+ Avida::PrintVersionBanner();
+
cASLibrary* lib = new cASLibrary;
RegisterASCoreLib(lib);
+ RegisterASAvidaLib(lib);
cParser* parser = new cParser;
More information about the Avida-cvs
mailing list