P4 to Git Change 1398097 by lmoriche@lmoriche_opencl_dev2 on 2017/04/13 13:01:56

SWDEV-102733 - [OCL-LC-ROCm] Cmake build Write CMakeLists.txt to enable building with and without the DK environment
	- Change the coding convention of the runtime files. Use Google's Style (https://google.github.io/styleguide/cppguide.html).

Affected files ...

... //depot/stg/opencl/drivers/opencl/.clang-format#1 add
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_agent_amd.h#2 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_command.cpp#13 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_context.cpp#53 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_counter.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d10.cpp#15 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d11.cpp#22 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_d3d9.cpp#32 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_debugger_amd.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_debugger_amd.h#7 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_device.cpp#61 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_event.cpp#10 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_execute.cpp#23 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_gl.cpp#53 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_icd.cpp#27 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_icd_amd.h#18 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_kernel.h#24 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_kernel_info_amd.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_kernel_info_amd.h#4 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_lqdflash_amd.cpp#17 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_lqdflash_amd.h#6 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_memobj.cpp#81 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_object.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_pipe.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_platform_amd.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_platform_amd.h#2 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_profile_amd.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_profile_amd.h#2 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_program.cpp#41 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_sampler.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_sdi_amd.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_sdi_amd.h#2 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_semaphore_amd.h#3 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_svm.cpp#20 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_thread_trace_amd.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_thread_trace_amd.h#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/appprofile.cpp#17 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/appprofile.hpp#12 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/blit.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/blit.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/blitcl.cpp#11 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpubinary.cpp#11 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpubinary.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpubuiltins.cpp#13 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpubuiltins.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpucommand.cpp#66 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpucommand.hpp#40 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpudevice.cpp#280 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpudevice.hpp#96 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpufeat.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpukernel.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpumapping.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpumapping.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuprogram.cpp#70 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuprogram.hpp#14 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpusettings.cpp#33 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpusettings.hpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cputables.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuvirtual.cpp#26 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuvirtual.hpp#13 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.cpp#209 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.hpp#284 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuappprofile.cpp#12 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuappprofile.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpubinary.cpp#58 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpubinary.hpp#27 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.cpp#126 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.hpp#41 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpucompiler.cpp#156 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuconstbuf.cpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuconstbuf.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpucounters.cpp#12 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpucounters.hpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudebugger.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudebugmanager.cpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudebugmanager.hpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudefs.hpp#147 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.cpp#567 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.hpp#163 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpukernel.cpp#318 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpukernel.hpp#126 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpumemory.cpp#131 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpumemory.hpp#50 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprintf.cpp#44 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprintf.hpp#15 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprogram.cpp#232 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuprogram.hpp#69 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuresource.cpp#238 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuresource.hpp#87 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpusched.hpp#19 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuschedcl.cpp#35 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuscsi.cpp#37 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpusettings.cpp#350 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpusettings.hpp#98 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gputhreadtrace.cpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gputhreadtrace.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gputimestamp.cpp#27 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gputimestamp.hpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gputrap.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#410 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.hpp#140 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuwavelimiter.cpp#13 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuwavelimiter.hpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hwdebug.cpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hwdebug.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palappprofile.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palappprofile.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palbinary.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palbinary.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palblit.cpp#13 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palblit.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palcompiler.cpp#15 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palconstbuf.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palconstbuf.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palcounters.cpp#11 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palcounters.hpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldebugger.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldebugmanager.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldebugmanager.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldefs.hpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.cpp#45 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.hpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldeviced3d10.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldeviced3d11.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldeviced3d9.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevicegl.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.cpp#34 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palkernel.hpp#11 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palmemory.cpp#13 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palmemory.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprintf.cpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprintf.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.cpp#39 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.hpp#17 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.cpp#28 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.hpp#12 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palsched.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palschedcl.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palsettings.cpp#24 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palsettings.hpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palthreadtrace.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palthreadtrace.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paltimestamp.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paltimestamp.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paltrap.hpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palvirtual.cpp#48 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palvirtual.hpp#21 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palwavelimiter.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palwavelimiter.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/mesa_glinterop.h#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocappprofile.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocappprofile.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocbinary.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocblit.cpp#17 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocblit.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/roccompiler.cpp#32 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/roccompilerlib.cpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/roccompilerlib.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocdefs.hpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocdevice.cpp#48 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocdevice.hpp#20 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocglinterop.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocglinterop.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#22 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.hpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmemory.cpp#15 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmemory.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprintf.cpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprintf.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#64 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.hpp#23 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocregisters.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocsettings.cpp#17 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocsettings.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#34 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.hpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/os/alloc.cpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/os/alloc.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/os/os.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/os/os.hpp#30 edit
... //depot/stg/opencl/drivers/opencl/runtime/os/os_posix.cpp#42 edit
... //depot/stg/opencl/drivers/opencl/runtime/os/os_win32.cpp#47 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/agent.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/agent.hpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/command.cpp#78 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/command.hpp#83 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/commandqueue.cpp#23 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/commandqueue.hpp#18 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/context.cpp#42 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/context.hpp#26 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/counter.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/interop.hpp#12 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/kernel.cpp#23 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/kernel.hpp#18 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/memory.cpp#127 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/memory.hpp#100 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/ndrange.cpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/ndrange.hpp#9 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/object.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/object.hpp#17 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/perfctr.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/program.cpp#86 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/program.hpp#41 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/runtime.cpp#35 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/runtime.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/sampler.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/threadtrace.hpp#6 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/atomic.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/monitor.cpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/monitor.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/semaphore.cpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/semaphore.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/thread.cpp#14 edit
... //depot/stg/opencl/drivers/opencl/runtime/thread/thread.hpp#15 edit
... //depot/stg/opencl/drivers/opencl/runtime/top.hpp#26 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/concurrent.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/debug.cpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/debug.hpp#7 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/flags.cpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/flags.hpp#271 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/macros.hpp#8 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/util.hpp#12 edit
... //depot/stg/opencl/drivers/opencl/runtime/utils/versions.hpp#2150 edit
This commit is contained in:
foreman
2017-04-13 13:56:38 -04:00
parent a615e4fbb6
commit 465c1c0287
188 changed files with 68133 additions and 78048 deletions
+46 -64
View File
@@ -10,78 +10,60 @@
namespace amd {
void*
AlignedMemory::allocate(size_t size, size_t alignment)
{
return Os::alignedMalloc(size, alignment);
}
void*
GuardedMemory::allocate(size_t size, size_t alignment, size_t guardSize)
{
size_t sizeToAllocate = guardSize + alignment;
sizeToAllocate += size + guardSize + Os::pageSize();
sizeToAllocate = amd::alignUp(sizeToAllocate, Os::pageSize());
address userHostMemGuarded = Os::reserveMemory(NULL, sizeToAllocate);
if (!userHostMemGuarded || !Os::commitMemory(
userHostMemGuarded, sizeToAllocate, Os::MEM_PROT_RW)) {
return NULL;
}
address userHostMem = userHostMemGuarded + sizeToAllocate;
userHostMem = amd::alignDown(userHostMem - guardSize, Os::pageSize());
// Protect the guard pages after the end of the users's buffer.
if (!Os::protectMemory(userHostMem, guardSize, Os::MEM_PROT_NONE)) {
fatal("Protect memory (up) failed");
}
userHostMem = userHostMem - size;
userHostMem = amd::alignDown(userHostMem, alignment);
// Write the actual size allocated including all the guard pages,
// alignment, page file size... as well as the size of guarded byte
// count before the beginning of the user's buffer.
size_t* temp = reinterpret_cast<size_t*>(userHostMem);
*--temp = sizeToAllocate;
*--temp = userHostMem - userHostMemGuarded;
// Protect the guard pages before the beginning of the user's buffer.
if (!Os::protectMemory(userHostMemGuarded, guardSize, Os::MEM_PROT_NONE)) {
fatal("Protect memory (down) failed");
}
return userHostMem;
void* AlignedMemory::allocate(size_t size, size_t alignment) {
return Os::alignedMalloc(size, alignment);
}
void
AlignedMemory::deallocate(void* ptr)
{
Os::alignedFree(ptr);
void* GuardedMemory::allocate(size_t size, size_t alignment, size_t guardSize) {
size_t sizeToAllocate = guardSize + alignment;
sizeToAllocate += size + guardSize + Os::pageSize();
sizeToAllocate = amd::alignUp(sizeToAllocate, Os::pageSize());
address userHostMemGuarded = Os::reserveMemory(NULL, sizeToAllocate);
if (!userHostMemGuarded ||
!Os::commitMemory(userHostMemGuarded, sizeToAllocate, Os::MEM_PROT_RW)) {
return NULL;
}
address userHostMem = userHostMemGuarded + sizeToAllocate;
userHostMem = amd::alignDown(userHostMem - guardSize, Os::pageSize());
// Protect the guard pages after the end of the users's buffer.
if (!Os::protectMemory(userHostMem, guardSize, Os::MEM_PROT_NONE)) {
fatal("Protect memory (up) failed");
}
userHostMem = userHostMem - size;
userHostMem = amd::alignDown(userHostMem, alignment);
// Write the actual size allocated including all the guard pages,
// alignment, page file size... as well as the size of guarded byte
// count before the beginning of the user's buffer.
size_t* temp = reinterpret_cast<size_t*>(userHostMem);
*--temp = sizeToAllocate;
*--temp = userHostMem - userHostMemGuarded;
// Protect the guard pages before the beginning of the user's buffer.
if (!Os::protectMemory(userHostMemGuarded, guardSize, Os::MEM_PROT_NONE)) {
fatal("Protect memory (down) failed");
}
return userHostMem;
}
void
GuardedMemory::deallocate(void* ptr)
{
size_t* userHostMem = static_cast<size_t*>(ptr);
void AlignedMemory::deallocate(void* ptr) { Os::alignedFree(ptr); }
size_t size = *--userHostMem;
size_t offset = *--userHostMem;
void GuardedMemory::deallocate(void* ptr) {
size_t* userHostMem = static_cast<size_t*>(ptr);
Os::releaseMemory(static_cast<address>(ptr) - offset, size);
size_t size = *--userHostMem;
size_t offset = *--userHostMem;
Os::releaseMemory(static_cast<address>(ptr) - offset, size);
}
void*
HeapObject::operator new(size_t size)
{
return malloc(size);
}
void* HeapObject::operator new(size_t size) { return malloc(size); }
void
HeapObject::operator delete(void* obj)
{
free(obj);
}
void HeapObject::operator delete(void* obj) { free(obj); }
} // namespace amd
} // namespace amd
+9 -11
View File
@@ -9,22 +9,20 @@
namespace amd {
class AlignedMemory : public AllStatic
{
public:
static void* allocate(size_t size, size_t alignment);
class AlignedMemory : public AllStatic {
public:
static void* allocate(size_t size, size_t alignment);
static void deallocate(void* ptr);
static void deallocate(void* ptr);
};
class GuardedMemory : public AllStatic
{
public:
static void* allocate(size_t size, size_t alignment, size_t guardSize);
class GuardedMemory : public AllStatic {
public:
static void* allocate(size_t size, size_t alignment, size_t guardSize);
static void deallocate(void* ptr);
static void deallocate(void* ptr);
};
} // namespace amd
} // namespace amd
#endif /*ALLOC_HPP_*/
+107 -123
View File
@@ -9,167 +9,151 @@
#include <cstring>
#if defined(_WIN32) || defined(__CYGWIN__)
# include <windows.h>
#else // !_WIN32
# include <time.h>
# include <unistd.h>
#endif // !_WIN32
#include <windows.h>
#else // !_WIN32
#include <time.h>
#include <unistd.h>
#endif // !_WIN32
#if defined(ATI_ARCH_X86)
#include <xmmintrin.h> // for _mm_pause
#endif // ATI_ARCH_X86
#include <xmmintrin.h> // for _mm_pause
#endif // ATI_ARCH_X86
namespace amd {
void*
Os::loadLibrary(const char* libraryname)
{
void* handle;
void* Os::loadLibrary(const char* libraryname) {
void* handle;
// Try with the system library prefix and extension instead.
std::string str = libraryname;
// Try with the system library prefix and extension instead.
std::string str = libraryname;
size_t namestart = str.rfind(fileSeparator());
namestart = (namestart != std::string::npos) ? namestart + 1 : 0;
size_t namestart = str.rfind(fileSeparator());
namestart = (namestart != std::string::npos) ? namestart + 1 : 0;
if (namestart == 0) {
if (namestart == 0) {
#if defined(ATI_OS_WIN)
// Try with the path of the current loaded dll(OCL runtime) first
HMODULE hm = NULL;
if (!GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
| GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(LPCSTR)&loadLibrary, &hm)) return NULL;
// Try with the path of the current loaded dll(OCL runtime) first
HMODULE hm = NULL;
if (!GetModuleHandleExA(
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(LPCSTR)&loadLibrary, &hm))
return NULL;
char cszDllPath[1024] = { 0 };
if (!GetModuleFileNameA(hm, cszDllPath, sizeof(cszDllPath)))
return NULL;
char cszDllPath[1024] = {0};
if (!GetModuleFileNameA(hm, cszDllPath, sizeof(cszDllPath))) return NULL;
LPSTR cszFileName;
char buffer[1024] = { 0 };
if (!GetFullPathNameA(cszDllPath, sizeof(buffer), buffer, &cszFileName))
return NULL;
LPSTR cszFileName;
char buffer[1024] = {0};
if (!GetFullPathNameA(cszDllPath, sizeof(buffer), buffer, &cszFileName)) return NULL;
std::string newPath;
newPath = cszDllPath;
newPath.replace(newPath.find(cszFileName), strlen(libraryname), libraryname);
std::string newPath;
newPath = cszDllPath;
newPath.replace(newPath.find(cszFileName), strlen(libraryname), libraryname);
handle = Os::loadLibrary_(newPath.c_str());
if (handle != NULL) {
return handle;
}
#endif
}
handle = Os::loadLibrary_(libraryname);
handle = Os::loadLibrary_(newPath.c_str());
if (handle != NULL) {
return handle;
return handle;
}
#endif
}
const char* prefix = Os::libraryPrefix();
if (prefix != NULL
&& str.compare(namestart, strlen(prefix), prefix) == 0) {
// It is alread present, not need to prepend it.
prefix = NULL;
}
size_t dot = str.rfind('.');
if (dot != std::string::npos) {
// check that the dot was on the filename not a dir name.
if (namestart < dot) {
// strip the previous extension.
str.resize(dot);
}
}
if (prefix != NULL && prefix[0] != '\0') {
str.insert(namestart, prefix);
}
str.append(Os::libraryExtension());
handle = Os::loadLibrary_(libraryname);
if (handle != NULL) {
return handle;
}
handle = Os::loadLibrary_(str.c_str());
if (handle != NULL || str.find(fileSeparator()) != std::string::npos) {
return handle;
const char* prefix = Os::libraryPrefix();
if (prefix != NULL && str.compare(namestart, strlen(prefix), prefix) == 0) {
// It is alread present, not need to prepend it.
prefix = NULL;
}
size_t dot = str.rfind('.');
if (dot != std::string::npos) {
// check that the dot was on the filename not a dir name.
if (namestart < dot) {
// strip the previous extension.
str.resize(dot);
}
}
if (prefix != NULL && prefix[0] != '\0') {
str.insert(namestart, prefix);
}
str.append(Os::libraryExtension());
// Try to find the lib in the current directory.
return Os::loadLibrary((std::string(".") + fileSeparator()
+ std::string(libraryname)).c_str());
handle = Os::loadLibrary_(str.c_str());
if (handle != NULL || str.find(fileSeparator()) != std::string::npos) {
return handle;
}
// Try to find the lib in the current directory.
return Os::loadLibrary((std::string(".") + fileSeparator() + std::string(libraryname)).c_str());
}
size_t Os::pageSize_ = 0;
int Os::processorCount_ = 0;
void
Os::spinPause()
{
void Os::spinPause() {
#if defined(ATI_ARCH_X86)
_mm_pause();
_mm_pause();
#elif defined(__ARM_ARCH_7A__)
__asm__ __volatile__("yield");
__asm__ __volatile__("yield");
#endif
}
void
Os::sleep(long n)
{
// FIXME_lmoriche: Should be nano-seconds not seconds.
void Os::sleep(long n) {
// FIXME_lmoriche: Should be nano-seconds not seconds.
#ifdef _WIN32
::Sleep(n);
#else // !_WIN32
time_t seconds = (time_t) n / 1000;
long nanoseconds = ((long) n - seconds * 1000) * 1000000;
timespec ts = { seconds, nanoseconds };
::nanosleep(&ts, NULL);
#endif // !_WIN32
::Sleep(n);
#else // !_WIN32
time_t seconds = (time_t)n / 1000;
long nanoseconds = ((long)n - seconds * 1000) * 1000000;
timespec ts = {seconds, nanoseconds};
::nanosleep(&ts, NULL);
#endif // !_WIN32
}
void
Os::touchStackPages(address bottom, address top)
{
top = alignDown(top, pageSize_) - pageSize_;
while (top >= bottom) {
*top = 0;
top -= pageSize_;
}
void Os::touchStackPages(address bottom, address top) {
top = alignDown(top, pageSize_) - pageSize_;
while (top >= bottom) {
*top = 0;
top -= pageSize_;
}
}
bool
Os::skipIDIV(address& pc)
{
address insn = pc;
if (insn[0] == 0x66) { // LCP prefix
insn += 1;
}
if ((insn[0] & 0xf0) == 0x40) { // REX prefix
insn += 1;
}
if (insn[0] == 0xf6 || insn[0] == 0xf7) { // IDIV
// This is a DivisionError: skip the insn and resume execution
char mod = insn[1] >> 6;
char rm = insn[1] & 0x7;
insn += 2; // skip opcode and mod/rm
bool Os::skipIDIV(address& pc) {
address insn = pc;
if (insn[0] == 0x66) { // LCP prefix
insn += 1;
}
if ((insn[0] & 0xf0) == 0x40) { // REX prefix
insn += 1;
}
if (insn[0] == 0xf6 || insn[0] == 0xf7) { // IDIV
// This is a DivisionError: skip the insn and resume execution
char mod = insn[1] >> 6;
char rm = insn[1] & 0x7;
insn += 2; // skip opcode and mod/rm
if (rm == 0x4 && mod != 0x3) {
insn += 1; // sib follows mod/rm
}
if ((mod == 0x0 && rm == 0x5) || mod == 0x2) {
insn += 4; // disp32
}
else if (mod == 0x1) {
insn += 1; // disp8
}
pc = insn;
return true;
if (rm == 0x4 && mod != 0x3) {
insn += 1; // sib follows mod/rm
}
return false;
if ((mod == 0x0 && rm == 0x5) || mod == 0x2) {
insn += 4; // disp32
} else if (mod == 0x1) {
insn += 1; // disp8
}
pc = insn;
return true;
}
return false;
}
void
Os::setThreadAffinity(const void* handle, unsigned int cpu)
{
ThreadAffinityMask mask;
mask.set(cpu);
setThreadAffinity(handle, mask);
void Os::setThreadAffinity(const void* handle, unsigned int cpu) {
ThreadAffinityMask mask;
mask.set(cpu);
setThreadAffinity(handle, mask);
}
} // namespace amd
} // namespace amd
+321 -395
View File
@@ -12,16 +12,16 @@
#include <string>
#if defined(__linux__)
# include <sched.h>
#include <sched.h>
#endif
#ifdef _WIN32
# include <Basetsd.h> // For KAFFINITY
#endif // _WIN32
#include <Basetsd.h> // For KAFFINITY
#endif // _WIN32
// Smallest supported VM page size.
#define MIN_PAGE_SHIFT 12
#define MIN_PAGE_SIZE (1UL << MIN_PAGE_SHIFT)
#define MIN_PAGE_SIZE (1UL << MIN_PAGE_SHIFT)
namespace amd {
@@ -32,494 +32,420 @@ namespace amd {
* @{
*/
class Thread; // For Os::createOsThread()
class Thread; // For Os::createOsThread()
class Os : AllStatic
{
public:
enum MemProt
{
MEM_PROT_NONE = 0,
MEM_PROT_READ,
MEM_PROT_RW,
MEM_PROT_RWX
};
class Os : AllStatic {
public:
enum MemProt { MEM_PROT_NONE = 0, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX };
class ThreadAffinityMask
{
class ThreadAffinityMask {
friend class Os;
private:
private:
#if defined(__linux__)
cpu_set_t mask_;
#else // _WIN32
#if !defined(_WIN32)
typedef uint KAFFINITY;
#endif
KAFFINITY mask_[512 / sizeof(KAFFINITY)];
cpu_set_t mask_;
#else // _WIN32
#if !defined(_WIN32)
typedef uint KAFFINITY;
#endif
KAFFINITY mask_[512 / sizeof(KAFFINITY)];
#endif
public:
ThreadAffinityMask() { init(); }
public:
ThreadAffinityMask() { init(); }
inline void init();
inline void set(uint cpu);
inline void clear(uint cpu);
inline bool isSet(uint cpu) const;
inline bool isEmpty() const;
inline uint countSet() const;
inline void init();
inline void set(uint cpu);
inline void clear(uint cpu);
inline bool isSet(uint cpu) const;
inline bool isEmpty() const;
inline uint countSet() const;
inline uint getFirstSet() const;
inline uint getNextSet(uint cpu) const;
inline uint getFirstSet() const;
inline uint getNextSet(uint cpu) const;
#if defined(__linux__)
inline void set(const cpu_set_t& mask);
inline void clear(const cpu_set_t& mask);
inline void adjust(cpu_set_t& mask) const;
inline cpu_set_t& getNative() { return mask_; }
inline void set(const cpu_set_t& mask);
inline void clear(const cpu_set_t& mask);
inline void adjust(cpu_set_t& mask) const;
inline cpu_set_t& getNative() { return mask_; }
#else
inline void set(size_t group, KAFFINITY affinity);
inline void adjust(size_t group, KAFFINITY& affinity) const;
inline void set(size_t group, KAFFINITY affinity);
inline void adjust(size_t group, KAFFINITY& affinity) const;
#endif
};
};
private:
static const size_t FILE_PATH_MAX_LENGTH = 1024;
private:
static const size_t FILE_PATH_MAX_LENGTH = 1024;
static size_t pageSize_; //!< The default os page size.
static int processorCount_; //!< The number of active processors.
static size_t pageSize_; //!< The default os page size.
static int processorCount_; //!< The number of active processors.
private:
//! Load the shared library named by \a filename
static void* loadLibrary_(const char* filename);
private:
//! Load the shared library named by \a filename
static void* loadLibrary_(const char* filename);
public:
//! Initialize the Os package.
static bool init();
//! Tear down the Os package.
static void tearDown();
public:
//! Initialize the Os package.
static bool init();
//! Tear down the Os package.
static void tearDown();
// Topology helper routines:
//
// Topology helper routines:
//
//! Return the number of active processors in the system.
inline static int processorCount();
//! Return the number of active processors in the system.
inline static int processorCount();
#if defined(ATI_ARCH_X86)
//! Query the processor information about supported features and CPU type.
static void cpuid(int regs[4], int info);
//! Get value of extended control register
static uint64_t xgetbv(uint32_t which);
#endif // ATI_ARCH_X86
//! Query the processor information about supported features and CPU type.
static void cpuid(int regs[4], int info);
//! Get value of extended control register
static uint64_t xgetbv(uint32_t which);
#endif // ATI_ARCH_X86
// Stack helper routines:
//
// Stack helper routines:
//
//! Return the current stack base and size information.
static void currentStackInfo(address* base, size_t *size);
//! Return the current stack base and size information.
static void currentStackInfo(address* base, size_t* size);
//! Return the value of the current stack pointer.
static NOT_WIN64(inline) address currentStackPtr();
//! Set the value of the current stack pointer.
static WIN64_ONLY(inline) void WINDOWS_ONLY(__stdcall/*callee cleanup*/)
setCurrentStackPtr(address sp);
//! Touches all stack pages between [bottom,top[
static void touchStackPages(address bottom, address top);
//! Return the value of the current stack pointer.
static NOT_WIN64(inline) address currentStackPtr();
//! Set the value of the current stack pointer.
static WIN64_ONLY(inline) void WINDOWS_ONLY(__stdcall /*callee cleanup*/)
setCurrentStackPtr(address sp);
//! Touches all stack pages between [bottom,top[
static void touchStackPages(address bottom, address top);
// Thread routines:
//
// Thread routines:
//
//! Create a native thread and link it to the given OsThread.
static const void* createOsThread(Thread* osThread);
//! Set the thread's affinity to the given cpu ordinal.
static void setThreadAffinity(const void* handle, unsigned int cpu);
//! Set the thread's affinity to the given cpu mask.
static void setThreadAffinity(const void* handle, const ThreadAffinityMask& mask);
//! Set the currently running thread's name.
static void setCurrentThreadName(const char* name);
//! Check if the thread is alive
static bool isThreadAlive(const Thread& osThread);
//! Create a native thread and link it to the given OsThread.
static const void* createOsThread(Thread* osThread);
//! Set the thread's affinity to the given cpu ordinal.
static void setThreadAffinity(const void* handle, unsigned int cpu);
//! Set the thread's affinity to the given cpu mask.
static void setThreadAffinity(const void* handle, const ThreadAffinityMask& mask);
//! Set the currently running thread's name.
static void setCurrentThreadName(const char* name);
//! Check if the thread is alive
static bool isThreadAlive(const Thread& osThread);
//! Sleep for n milli-seconds.
static void sleep(long n);
//! Yield to threads of the same or lower priority
static void yield();
//! Execute a pause instruction (for spin loops).
static void spinPause();
//! Sleep for n milli-seconds.
static void sleep(long n);
//! Yield to threads of the same or lower priority
static void yield();
//! Execute a pause instruction (for spin loops).
static void spinPause();
// Memory routines:
//
// Memory routines:
//
//! Return the default os page size.
inline static size_t pageSize();
//! Return the amount of host total physical memory in bytes.
static uint64_t hostTotalPhysicalMemory();
//! Return the default os page size.
inline static size_t pageSize();
//! Return the amount of host total physical memory in bytes.
static uint64_t hostTotalPhysicalMemory();
//! Reserve a chunk of memory (priv | anon | noreserve).
static address reserveMemory(address start, size_t size, size_t alignment = 0, MemProt prot = MEM_PROT_NONE);
//! Release a chunk of memory reserved with reserveMemory.
static bool releaseMemory(void* addr, size_t size);
//! Commit a chunk of memory previously reserved with reserveMemory.
static bool commitMemory(void* addr, size_t size, MemProt prot = MEM_PROT_NONE);
//! Uncommit a chunk of memory previously committed with commitMemory.
static bool uncommitMemory(void* addr, size_t size);
//! Set the page protections for the given memory region.
static bool protectMemory(void* addr, size_t size, MemProt prot);
//! Reserve a chunk of memory (priv | anon | noreserve).
static address reserveMemory(address start, size_t size, size_t alignment = 0,
MemProt prot = MEM_PROT_NONE);
//! Release a chunk of memory reserved with reserveMemory.
static bool releaseMemory(void* addr, size_t size);
//! Commit a chunk of memory previously reserved with reserveMemory.
static bool commitMemory(void* addr, size_t size, MemProt prot = MEM_PROT_NONE);
//! Uncommit a chunk of memory previously committed with commitMemory.
static bool uncommitMemory(void* addr, size_t size);
//! Set the page protections for the given memory region.
static bool protectMemory(void* addr, size_t size, MemProt prot);
//! Allocate an aligned chunk of memory.
static void* alignedMalloc(size_t size, size_t alignment);
//! Deallocate an aligned chunk of memory.
static void alignedFree(void* mem);
//! Allocate an aligned chunk of memory.
static void* alignedMalloc(size_t size, size_t alignment);
//! Deallocate an aligned chunk of memory.
static void alignedFree(void* mem);
//! Platform-specific optimized memcpy()
static void* fastMemcpy(void *dest, const void *src, size_t n);
//! Platform-specific optimized memcpy()
static void* fastMemcpy(void* dest, const void* src, size_t n);
// File/Path helper routines:
//
// File/Path helper routines:
//
//! Return the shared library extension string.
static const char* libraryExtension();
//! Return the shared library prefix string.
static const char* libraryPrefix();
//! Return the object extension string.
static const char* objectExtension();
//! Return the file separator char.
static char fileSeparator();
//! Return the path separator char.
static char pathSeparator();
//! Return whether the path exists
static bool pathExists(const std::string& path);
//! Create the path if it does not exist
static bool createPath(const std::string& path);
//! Remove the path if it is empty
static bool removePath(const std::string& path);
//! Printf re-implementation (due to MS CRT problem)
static int printf(const char*fmt,...);
/*! \brief Invokes the command processor for the command execution
*
* \result Returns the operation result
*/
static int systemCall(
const std::string& command); //!< command for execution
//! Return the shared library extension string.
static const char* libraryExtension();
//! Return the shared library prefix string.
static const char* libraryPrefix();
//! Return the object extension string.
static const char* objectExtension();
//! Return the file separator char.
static char fileSeparator();
//! Return the path separator char.
static char pathSeparator();
//! Return whether the path exists
static bool pathExists(const std::string& path);
//! Create the path if it does not exist
static bool createPath(const std::string& path);
//! Remove the path if it is empty
static bool removePath(const std::string& path);
//! Printf re-implementation (due to MS CRT problem)
static int printf(const char* fmt, ...);
/*! \brief Invokes the command processor for the command execution
*
* \result Returns the operation result
*/
static int systemCall(const std::string& command); //!< command for execution
/*! \brief Retrieves a string containing the value
* of the environment variable
*
* \result Returns the environment variable value
*/
static std::string getEnvironment(
const std::string& name); //!< the environment variable's name
/*! \brief Retrieves a string containing the value
* of the environment variable
*
* \result Returns the environment variable value
*/
static std::string getEnvironment(const std::string& name); //!< the environment variable's name
/*! \brief Retrieves the path of the directory designated for temporary
* files
*
* \result Returns the temporary path
*/
static std::string getTempPath();
/*! \brief Retrieves the path of the directory designated for temporary
* files
*
* \result Returns the temporary path
*/
static std::string getTempPath();
/*! \brief Creates a name for a temporary file
*
* \result Returns the name of temporary file
*/
static std::string getTempFileName();
/*! \brief Creates a name for a temporary file
*
* \result Returns the name of temporary file
*/
static std::string getTempFileName();
//! Deletes file
static int unlink(const std::string& path);
//! Deletes file
static int unlink(const std::string& path);
// Library routines:
//
typedef bool (*SymbolCallback)(std::string, const void*, void*);
// Library routines:
//
typedef bool (*SymbolCallback)(std::string, const void*, void*);
//! Load the shared library named by \a filename
static void* loadLibrary(const char* filename);
//! Unload the shared library.
static void unloadLibrary(void* handle);
//! Return the address of the function identified by \a name.
static void* getSymbol(void* handle, const char* name);
//! Get all the __kernel functions in the given shared library.
static bool iterateSymbols(void* handle, SymbolCallback func, void* data);
//! Load the shared library named by \a filename
static void* loadLibrary(const char* filename);
//! Unload the shared library.
static void unloadLibrary(void* handle);
//! Return the address of the function identified by \a name.
static void* getSymbol(void* handle, const char* name);
//! Get all the __kernel functions in the given shared library.
static bool iterateSymbols(void* handle, SymbolCallback func, void* data);
// Time routines:
//
// Time routines:
//
//! Return the current system time counter in nanoseconds.
static uint64_t timeNanos();
//! Return the system timer's resolution in nanoseconds.
static uint64_t timerResolutionNanos();
//! Return the timeNanos starting point offset to Epoch.
static uint64_t offsetToEpochNanos();
//! Return the current system time counter in nanoseconds.
static uint64_t timeNanos();
//! Return the system timer's resolution in nanoseconds.
static uint64_t timerResolutionNanos();
//! Return the timeNanos starting point offset to Epoch.
static uint64_t offsetToEpochNanos();
// X86 Instructions helpers:
//
// X86 Instructions helpers:
//
//! Skip an IDIV (F6/F7) instruction and return a pointer to the next insn.
static bool skipIDIV(address& insn);
//! Skip an IDIV (F6/F7) instruction and return a pointer to the next insn.
static bool skipIDIV(address& insn);
// return gloabal memory size to be assigned to device info
static size_t getPhysicalMemSize();
// return gloabal memory size to be assigned to device info
static size_t getPhysicalMemSize();
//! get Application file name
static std::string getAppFileName();
//! get Application file name
static std::string getAppFileName();
//! Install SIGFPE handler for CPU device
static bool installSigfpeHandler();
//! Install SIGFPE handler for CPU device
static bool installSigfpeHandler();
//! Uninstall SIGFPE handler for CPU device
static void uninstallSigfpeHandler();
//! Uninstall SIGFPE handler for CPU device
static void uninstallSigfpeHandler();
};
/*@}*/
inline size_t
Os::pageSize()
{
assert(pageSize_ != 0 && "runtime is not initialized");
return pageSize_;
inline size_t Os::pageSize() {
assert(pageSize_ != 0 && "runtime is not initialized");
return pageSize_;
}
inline int
Os::processorCount()
{
return processorCount_;
}
inline int Os::processorCount() { return processorCount_; }
#if defined(_WIN64)
extern "C" void _Os_setCurrentStackPtr(address sp);
ALWAYSINLINE void
Os::setCurrentStackPtr(address sp)
{
_Os_setCurrentStackPtr(sp);
}
ALWAYSINLINE void Os::setCurrentStackPtr(address sp) { _Os_setCurrentStackPtr(sp); }
#else // !_WIN64
#else // !_WIN64
ALWAYSINLINE address
Os::currentStackPtr()
{
intptr_t value;
ALWAYSINLINE address Os::currentStackPtr() {
intptr_t value;
#if defined(__GNUC__)
__asm__ __volatile__ (
# if defined(ATI_ARCH_X86)
LP64_SWITCH("movl %%esp", "movq %%rsp") ",%0" : "=r"(value)
# elif defined(ATI_ARCH_ARM)
"mov %0,sp" : "=r"(value)
# endif
);
#else // !__GNUC__
__asm mov value, esp;
#endif // !__GNUC__
__asm__ __volatile__(
#if defined(ATI_ARCH_X86)
LP64_SWITCH("movl %%esp", "movq %%rsp") ",%0"
: "=r"(value)
#elif defined(ATI_ARCH_ARM)
"mov %0,sp"
: "=r"(value)
#endif
);
#else // !__GNUC__
__asm mov value, esp;
#endif // !__GNUC__
return (address)value;
return (address)value;
}
#endif // !_WIN64
#endif // !_WIN64
#if defined(__linux__)
inline void
Os::ThreadAffinityMask::init()
{
CPU_ZERO(&mask_);
inline void Os::ThreadAffinityMask::init() { CPU_ZERO(&mask_); }
inline void Os::ThreadAffinityMask::set(uint cpu) { CPU_SET(cpu, &mask_); }
inline void Os::ThreadAffinityMask::clear(uint cpu) { CPU_CLR(cpu, &mask_); }
inline bool Os::ThreadAffinityMask::isSet(uint cpu) const { return CPU_ISSET(cpu, &mask_); }
inline bool Os::ThreadAffinityMask::isEmpty() const {
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
if (bits[i] != 0) {
return false;
}
}
return true;
}
inline void
Os::ThreadAffinityMask::set(uint cpu)
{
CPU_SET(cpu, &mask_);
inline void Os::ThreadAffinityMask::set(const cpu_set_t& mask) { mask_ = mask; }
inline void Os::ThreadAffinityMask::clear(const cpu_set_t& mask) {
const uint32_t* bitsClear = (const uint32_t*)mask.__bits;
uint32_t* bits = (uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
bits[i] &= ~bitsClear[i];
}
}
inline void
Os::ThreadAffinityMask::clear(uint cpu)
{
CPU_CLR(cpu, &mask_);
inline void Os::ThreadAffinityMask::adjust(cpu_set_t& mask) const {
uint32_t* bitsOut = (uint32_t*)mask.__bits;
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
bitsOut[i] &= bits[i];
}
}
inline bool
Os::ThreadAffinityMask::isSet(uint cpu) const
{
return CPU_ISSET(cpu, &mask_);
inline uint Os::ThreadAffinityMask::countSet() const {
uint count = 0;
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
count += countBitsSet(bits[i]);
}
return count;
}
inline bool
Os::ThreadAffinityMask::isEmpty() const
{
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
if (bits[i] != 0) {
return false;
inline uint Os::ThreadAffinityMask::getFirstSet() const {
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
if (bits[i] != 0) {
return leastBitSet(bits[i]) + (i * (8 * sizeof(uint32_t)));
}
}
return (uint)-1;
}
inline uint Os::ThreadAffinityMask::getNextSet(uint cpu) const {
const uint32_t* bits = (const uint32_t*)mask_.__bits;
++cpu;
uint j = cpu % (8 * sizeof(uint32_t));
for (uint i = cpu / (8 * sizeof(uint32_t)); i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
if (bits[i] != 0) {
for (; j < (8 * sizeof(uint32_t)); ++j) {
if (0 != (bits[i] & ((uint32_t)1 << j))) {
return i * (8 * sizeof(uint32_t)) + j;
}
}
}
return true;
}
inline void
Os::ThreadAffinityMask::set(const cpu_set_t& mask)
{
mask_ = mask;
}
inline void
Os::ThreadAffinityMask::clear(const cpu_set_t& mask)
{
const uint32_t* bitsClear = (const uint32_t*)mask.__bits;
uint32_t* bits = (uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
bits[i] &= ~bitsClear[i];
}
}
inline void
Os::ThreadAffinityMask::adjust(cpu_set_t& mask) const
{
uint32_t* bitsOut = (uint32_t*)mask.__bits;
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
bitsOut[i] &= bits[i];
}
}
inline uint
Os::ThreadAffinityMask::countSet() const
{
uint count = 0;
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
count += countBitsSet(bits[i]);
}
return count;
}
inline uint
Os::ThreadAffinityMask::getFirstSet() const
{
const uint32_t* bits = (const uint32_t*)mask_.__bits;
for (uint i = 0; i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
if (bits[i] != 0) {
return leastBitSet(bits[i]) + (i * (8*sizeof(uint32_t)));
}
}
return (uint)-1;
}
inline uint
Os::ThreadAffinityMask::getNextSet(uint cpu) const
{
const uint32_t* bits = (const uint32_t*)mask_.__bits;
++cpu;
uint j = cpu % (8*sizeof(uint32_t));
for (uint i = cpu / (8*sizeof(uint32_t));
i < sizeof(mask_.__bits) / sizeof(uint32_t); ++i) {
if (bits[i] != 0) {
for (; j < (8*sizeof(uint32_t)); ++j) {
if (0 != (bits[i] & ((uint32_t)1 << j))) {
return i * (8*sizeof(uint32_t)) + j;
}
}
}
j = 0;
}
return (uint)-1;
j = 0;
}
return (uint)-1;
}
#else
inline void
Os::ThreadAffinityMask::init()
{
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
mask_[i] = (KAFFINITY)0;
inline void Os::ThreadAffinityMask::init() {
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
mask_[i] = (KAFFINITY)0;
}
}
inline void Os::ThreadAffinityMask::set(uint cpu) {
mask_[cpu / (8 * sizeof(KAFFINITY))] |= (KAFFINITY)1 << (cpu % (8 * sizeof(KAFFINITY)));
}
inline void Os::ThreadAffinityMask::clear(uint cpu) {
mask_[cpu / (8 * sizeof(KAFFINITY))] &= ~((KAFFINITY)1 << (cpu % (8 * sizeof(KAFFINITY))));
}
inline bool Os::ThreadAffinityMask::isSet(uint cpu) const {
return (KAFFINITY)0 !=
(mask_[cpu / (8 * sizeof(KAFFINITY))] & ((KAFFINITY)1 << (cpu % (8 * sizeof(KAFFINITY)))));
}
inline bool Os::ThreadAffinityMask::isEmpty() const {
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
if (mask_[i] != (KAFFINITY)0) {
return false;
}
}
return true;
}
inline void
Os::ThreadAffinityMask::set(uint cpu)
{
mask_[cpu / (8*sizeof(KAFFINITY))] |=
(KAFFINITY)1 << (cpu % (8*sizeof(KAFFINITY)));
inline void Os::ThreadAffinityMask::set(size_t group, KAFFINITY affinity) {
mask_[group] |= affinity;
}
inline void
Os::ThreadAffinityMask::clear(uint cpu)
{
mask_[cpu / (8*sizeof(KAFFINITY))] &=
~( (KAFFINITY)1 << (cpu % (8*sizeof(KAFFINITY))) );
inline void Os::ThreadAffinityMask::adjust(size_t group, KAFFINITY& affinity) const {
affinity &= mask_[group];
}
inline bool
Os::ThreadAffinityMask::isSet(uint cpu) const
{
return (KAFFINITY)0 != (mask_[cpu / (8*sizeof(KAFFINITY))] &
((KAFFINITY)1 << (cpu % (8*sizeof(KAFFINITY)))));
inline uint Os::ThreadAffinityMask::countSet() const {
uint count = 0;
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
count += countBitsSet(mask_[i]);
}
return count;
}
inline bool
Os::ThreadAffinityMask::isEmpty() const
{
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
if (mask_[i] != (KAFFINITY)0) {
return false;
inline uint Os::ThreadAffinityMask::getFirstSet() const {
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
if (mask_[i] != 0) {
return leastBitSet(mask_[i]) + (i * (8 * sizeof(KAFFINITY)));
}
}
return (uint)-1;
}
inline uint Os::ThreadAffinityMask::getNextSet(uint cpu) const {
++cpu;
uint j = cpu % (8 * sizeof(KAFFINITY));
for (uint i = cpu / (8 * sizeof(KAFFINITY)); i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
if (mask_[i] != 0) {
for (; j < (8 * sizeof(KAFFINITY)); ++j) {
if (0 != (mask_[i] & ((KAFFINITY)1 << j))) {
return i * (8 * sizeof(KAFFINITY)) + j;
}
}
}
return true;
}
inline void
Os::ThreadAffinityMask::set(size_t group, KAFFINITY affinity)
{
mask_[group] |= affinity;
}
inline void
Os::ThreadAffinityMask::adjust(size_t group, KAFFINITY& affinity) const
{
affinity &= mask_[group];
}
inline uint
Os::ThreadAffinityMask::countSet() const
{
uint count = 0;
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
count += countBitsSet(mask_[i]);
}
return count;
}
inline uint
Os::ThreadAffinityMask::getFirstSet() const
{
for (uint i = 0; i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
if (mask_[i] != 0) {
return leastBitSet(mask_[i]) + (i * (8*sizeof(KAFFINITY)));
}
}
return (uint)-1;
}
inline uint
Os::ThreadAffinityMask::getNextSet(uint cpu) const
{
++cpu;
uint j = cpu % (8*sizeof(KAFFINITY));
for (uint i = cpu / (8*sizeof(KAFFINITY));
i < sizeof(mask_) / sizeof(KAFFINITY); ++i) {
if (mask_[i] != 0) {
for (; j < (8*sizeof(KAFFINITY)); ++j) {
if (0 != (mask_[i] & ((KAFFINITY)1 << j))) {
return i * (8*sizeof(KAFFINITY)) + j;
}
}
}
j = 0;
}
return (uint)-1;
j = 0;
}
return (uint)-1;
}
#endif
} // namespace amd
} // namespace amd
#endif /*OS_HPP_*/
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff