OSDN Git Service

Split off Routine into its own file.
authorNicolas Capens <capn@google.com>
Thu, 26 Jun 2014 15:31:08 +0000 (11:31 -0400)
committerNicolas Capens <nicolascapens@google.com>
Thu, 26 Jun 2014 18:01:54 +0000 (18:01 +0000)
BUG=15907357

Change-Id: I7a16ab35e8013d8457c482b06220b755a9f79745
Reviewed-on: https://swiftshader-review.googlesource.com/1144
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
src/GLES2/libGLESv2/libGLESv2.cbp
src/Reactor/Nucleus.cpp
src/Reactor/Nucleus.hpp
src/Reactor/Reactor.hpp
src/Reactor/Reactor.vcxproj
src/Reactor/Reactor.vcxproj.filters
src/Reactor/Routine.cpp [new file with mode: 0644]
src/Reactor/Routine.hpp [new file with mode: 0644]
src/Reactor/RoutineManager.cpp
src/Reactor/RoutineManager.hpp

index 0807fe0..65008ed 100644 (file)
                <Unit filename="./../../Main/serialcommon.h" />
                <Unit filename="./../../Main/serialvalid.cpp" />
                <Unit filename="./../../Main/serialvalid.h" />
+               <Unit filename="./../../Reactor/Routine.cpp" />
+               <Unit filename="./../../Reactor/Routine.hpp" />
                <Unit filename="./../../Reactor/RoutineManager.cpp" />
                <Unit filename="./../../Reactor/RoutineManager.hpp" />
                <Unit filename="./../../Reactor/Nucleus.cpp" />
index 47f637c..4a819cb 100644 (file)
@@ -26,6 +26,7 @@
 #include "llvm/Support/TargetSelect.h"
 #include "../lib/ExecutionEngine/JIT/JIT.h"
 
+#include "Routine.hpp"
 #include "RoutineManager.hpp"
 #include "x86.hpp"
 #include "CPUID.hpp"
@@ -70,83 +71,6 @@ namespace sw
        {
        };
 
-       Routine::Routine(int bufferSize) : bufferSize(bufferSize), dynamic(true)
-       {
-               void *memory = allocateExecutable(bufferSize);
-
-               buffer = memory;
-               entry = memory;
-               functionSize = bufferSize;   // Updated by RoutineManager::endFunctionBody
-
-               bindCount = 0;
-       }
-
-       Routine::Routine(void *memory, int bufferSize, int offset) : bufferSize(bufferSize), functionSize(bufferSize), dynamic(false)
-       {
-               buffer = (unsigned char*)memory - offset;
-               entry = memory;
-
-               bindCount = 0;
-       }
-
-       Routine::~Routine()
-       {
-               if(dynamic)
-               {
-                       deallocateExecutable(buffer, bufferSize);
-               }
-       }
-
-       void Routine::setFunctionSize(int functionSize)
-       {
-               this->functionSize = functionSize;
-       }
-
-       const void *Routine::getBuffer()
-       {
-               return buffer;
-       }
-
-       const void *Routine::getEntry()
-       {
-               return entry;
-       }
-
-       int Routine::getBufferSize()
-       {
-               return bufferSize;
-       }
-
-       int Routine::getFunctionSize()
-       {
-               return functionSize;
-       }
-
-       int Routine::getCodeSize()
-       {
-               return functionSize - ((uintptr_t)entry - (uintptr_t)buffer);
-       }
-
-       bool Routine::isDynamic()
-       {
-               return dynamic;
-       }
-
-       void Routine::bind()
-       {
-               atomicIncrement(&bindCount);
-       }
-
-       void Routine::unbind()
-       {
-               long count = atomicDecrement(&bindCount);
-
-               if(count == 0)
-               {
-                       delete this;
-               }
-       }
-
        Nucleus::Nucleus()
        {
                InitializeNativeTarget();
@@ -243,14 +167,11 @@ namespace sw
                }
 
                void *entry = executionEngine->getPointerToFunction(function);
-
-               Routine *routine = routineManager->acquireRoutine();
-               routine->entry = entry;
-               markExecutable(routine->buffer, routine->bufferSize);
+               Routine *routine = routineManager->acquireRoutine(entry);
 
                if(CodeAnalystLogJITCode)
                {
-                       CodeAnalystLogJITCode(routine->entry, routine->getCodeSize(), name);
+                       CodeAnalystLogJITCode(routine->getEntry(), routine->getCodeSize(), name);
                }
 
                return routine;
index b655d99..da2e0a3 100644 (file)
@@ -61,41 +61,9 @@ namespace sw
 \r
        extern Optimization optimization[10];\r
 \r
+       class Routine;\r
        class RoutineManager;\r
        class Builder;\r
-       class Nucleus;\r
-\r
-       class Routine\r
-       {\r
-               friend class Nucleus;\r
-\r
-       public:\r
-               Routine(int bufferSize);\r
-               Routine(void *memory, int bufferSize, int offset);\r
-\r
-               ~Routine();\r
-\r
-               void setFunctionSize(int functionSize);\r
-\r
-               const void *getBuffer();\r
-               const void *getEntry();\r
-               int getBufferSize();\r
-               int getFunctionSize();   // Includes constants before the entry point\r
-               int getCodeSize();       // Executable code only\r
-               bool isDynamic();\r
-\r
-               void bind();\r
-               void unbind();\r
-\r
-       private:\r
-               void *buffer;\r
-               const void *entry;\r
-               int bufferSize;\r
-               int functionSize;\r
-\r
-               volatile int bindCount;\r
-               const bool dynamic;   // Generated or precompiled\r
-       };\r
 \r
        class Nucleus\r
        {\r
index 8e37967..0e7538b 100644 (file)
@@ -10,6 +10,7 @@
 //\r
 \r
 #include "Nucleus.hpp"\r
+#include "Routine.hpp"\r
 \r
 namespace sw\r
 {\r
index 4312ba8..be56c44 100644 (file)
   <ItemGroup>\r
     <ClCompile Include="DLL.cpp" />\r
     <ClCompile Include="Nucleus.cpp" />\r
+    <ClCompile Include="Routine.cpp" />\r
     <ClCompile Include="RoutineManager.cpp" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="DLL.hpp" />\r
     <ClInclude Include="Nucleus.hpp" />\r
     <ClInclude Include="Reactor.hpp" />\r
+    <ClInclude Include="Routine.hpp" />\r
     <ClInclude Include="RoutineManager.hpp" />\r
     <ClInclude Include="x86.hpp" />\r
   </ItemGroup>\r
index d4629a8..e2d2f68 100644 (file)
@@ -24,6 +24,9 @@
     <ClCompile Include="RoutineManager.cpp">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="Routine.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="DLL.hpp">\r
@@ -41,5 +44,8 @@
     <ClInclude Include="RoutineManager.hpp">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="Routine.hpp">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
 </Project>
\ No newline at end of file
diff --git a/src/Reactor/Routine.cpp b/src/Reactor/Routine.cpp
new file mode 100644 (file)
index 0000000..1671abe
--- /dev/null
@@ -0,0 +1,85 @@
+#include "Routine.hpp"
+
+#include "../Common/Memory.hpp"
+#include "../Common/Thread.hpp"
+#include "../Common/Types.hpp"
+
+namespace sw
+{
+       Routine::Routine(int bufferSize) : bufferSize(bufferSize), dynamic(true)
+       {
+               void *memory = allocateExecutable(bufferSize);
+
+               buffer = memory;
+               entry = memory;
+               functionSize = bufferSize;   // Updated by RoutineManager::endFunctionBody
+
+               bindCount = 0;
+       }
+
+       Routine::Routine(void *memory, int bufferSize, int offset) : bufferSize(bufferSize), functionSize(bufferSize), dynamic(false)
+       {
+               buffer = (unsigned char*)memory - offset;
+               entry = memory;
+
+               bindCount = 0;
+       }
+
+       Routine::~Routine()
+       {
+               if(dynamic)
+               {
+                       deallocateExecutable(buffer, bufferSize);
+               }
+       }
+
+       void Routine::setFunctionSize(int functionSize)
+       {
+               this->functionSize = functionSize;
+       }
+
+       const void *Routine::getBuffer()
+       {
+               return buffer;
+       }
+
+       const void *Routine::getEntry()
+       {
+               return entry;
+       }
+
+       int Routine::getBufferSize()
+       {
+               return bufferSize;
+       }
+
+       int Routine::getFunctionSize()
+       {
+               return functionSize;
+       }
+
+       int Routine::getCodeSize()
+       {
+               return functionSize - ((uintptr_t)entry - (uintptr_t)buffer);
+       }
+
+       bool Routine::isDynamic()
+       {
+               return dynamic;
+       }
+
+       void Routine::bind()
+       {
+               atomicIncrement(&bindCount);
+       }
+
+       void Routine::unbind()
+       {
+               long count = atomicDecrement(&bindCount);
+
+               if(count == 0)
+               {
+                       delete this;
+               }
+       }
+}
diff --git a/src/Reactor/Routine.hpp b/src/Reactor/Routine.hpp
new file mode 100644 (file)
index 0000000..6cdc6bc
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef sw_Routine_hpp\r
+#define sw_Routine_hpp\r
+\r
+namespace sw\r
+{\r
+       class RoutineManager;\r
+\r
+       class Routine\r
+       {\r
+               friend class RoutineManager;\r
+\r
+       public:\r
+               Routine(int bufferSize);\r
+               Routine(void *memory, int bufferSize, int offset);\r
+\r
+               ~Routine();\r
+\r
+               void setFunctionSize(int functionSize);\r
+\r
+               const void *getBuffer();\r
+               const void *getEntry();\r
+               int getBufferSize();\r
+               int getFunctionSize();   // Includes constants before the entry point\r
+               int getCodeSize();       // Executable code only\r
+               bool isDynamic();\r
+\r
+               void bind();\r
+               void unbind();\r
+\r
+       private:\r
+               void *buffer;\r
+               const void *entry;\r
+               int bufferSize;\r
+               int functionSize;\r
+\r
+               volatile int bindCount;\r
+               const bool dynamic;   // Generated or precompiled\r
+       };\r
+}\r
+\r
+#endif   // sw_Routine_hpp\r
index b0d5703..441db8d 100644 (file)
@@ -11,7 +11,7 @@
 
 #include "RoutineManager.hpp"
 
-#include "Nucleus.hpp"
+#include "Routine.hpp"
 #include "llvm/Function.h"
 #include "../Common/Memory.hpp"
 #include "../Common/Thread.hpp"
@@ -117,16 +117,18 @@ namespace sw
 
        void RoutineManager::setMemoryExecutable()
        {
+               markExecutable(routine->buffer, routine->bufferSize);
        }
 
        void RoutineManager::setPoisonMemory(bool poison)
        {
        }
 
-       Routine *RoutineManager::acquireRoutine()
+       Routine *RoutineManager::acquireRoutine(void *entry)
        {
-               Routine *result = routine;
+               routine->entry = entry;
 
+               Routine *result = routine;
                routine = 0;
 
                return result;
index 342be7c..3c813b4 100644 (file)
@@ -42,7 +42,7 @@ namespace sw
                virtual void setMemoryExecutable();\r
                virtual void setPoisonMemory(bool poison);\r
 \r
-               Routine *acquireRoutine();\r
+               Routine *acquireRoutine(void *entry);\r
 \r
        private:\r
                Routine *routine;\r