[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