• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "LLVMRoutine.hpp"
16 
17 #include "ExecutableMemory.hpp"
18 #include "Thread.hpp"
19 
20 namespace rr
21 {
22 #if REACTOR_LLVM_VERSION < 7
LLVMRoutine(int bufferSize)23 	LLVMRoutine::LLVMRoutine(int bufferSize) : bufferSize(bufferSize)
24 	{
25 		void *memory = allocateExecutable(bufferSize);
26 
27 		buffer = memory;
28 		entry = memory;
29 		functionSize = bufferSize;   // Updated by LLVMRoutineManager::endFunctionBody
30 	}
31 
~LLVMRoutine()32 	LLVMRoutine::~LLVMRoutine()
33 	{
34 		deallocateExecutable(buffer, bufferSize);
35 	}
36 
getEntry()37 	const void *LLVMRoutine::getEntry()
38 	{
39 		return entry;
40 	}
41 
getCodeSize()42 	int LLVMRoutine::getCodeSize()
43 	{
44 		return functionSize - static_cast<int>((uintptr_t)entry - (uintptr_t)buffer);
45 	}
46 #else
47 	LLVMRoutine::~LLVMRoutine()
48 	{
49 		dtor(reactorJIT, moduleKey);
50 	}
51 #endif
52 }
53