Files
rocm-systems/rocclr/compiler/lib/promotions/oclutils/top.hpp
T
foreman 7248349dd5 P4 to Git Change 1128505 by smekhano@stas-solstice-HSA on 2015/03/08 14:17:51
ECR #333753 - Part of the changes to allow use of llvm 3.6
	These changes required with llvm 3.6 but do not break compilation with llvm 3.2.

	Testing: precheckin, smoke
	Reviewed by Brian Sumner

Affected files ...

... //depot/stg/opencl/drivers/opencl/compiler/lib/amdoclcl.def.in#10 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/amdoclcl.map.in#9 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/build/Makefile.common#28 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/common/spir.hpp#4 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/cpu/build/Makefile.cpu#10 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/MDParser/AMDILMDTypes.h#2 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/build/Makefile.gpu#29 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/hsail_be.cpp#38 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/sc/HSAIL/hsail-tools/HSAILAsm/HSAILAsm.cpp#5 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/backends/gpu/sc/HSAIL/hsail-tools/htdefs#6 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/build/Makefile.src#4 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/jit/src/jit.cpp#14 edit
... //depot/stg/opencl/drivers/opencl/compiler/lib/promotions/oclutils/top.hpp#5 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/cpu/cpuprogram.cpp#63 edit
2015-03-08 14:31:29 -04:00

222 řádky
5.2 KiB
C++

//
// Copyright (c) 2008 Advanced Micro Devices, Inc. All rights reserved.
//
#ifndef TOP_HPP_
#define TOP_HPP_
#if defined(ATI_ARCH_ARM)
# define __EXPORTED_HEADERS__ 1
#endif /*ATI_ARCH_ARM*/
#ifdef _WIN32
#define NOMINMAX 1
#define WIN32_LEAN_AND_MEAN 1
#endif /*_WIN32*/
#include "utils/macros.hpp"
#if 0 // FIXME_lmoriche
#include "CL/opencl.h"
#include "amdocl/cl_open_video_amd.h"
#endif
#ifdef _WIN32
# include <cstdlib>
#else /*!_WIN32*/
# include <inttypes.h>
#endif /*!_WIN32*/
#if !defined(ATI_ARCH_ARM)
#include <xmmintrin.h>
#endif /*!ATI_ARCH_ARM*/
#include <cstddef>
#include <new>
typedef unsigned char* address;
typedef const unsigned char* const_address;
typedef void * pointer;
typedef const void * const_pointer;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef const char* cstring;
#ifdef _WIN32
#if _MSC_VER >= 1600
# include <stdint.h>
#else // _MSC_VER < 1600
typedef signed __int8 int8_t;
typedef unsigned __int8 uint8_t;
typedef signed __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef signed __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
#endif // _MSC_VER < 1600
#ifndef _WIN64
typedef int32_t ssize_t;
#else // _WIN64
typedef int64_t ssize_t;
#endif // _WIN64
#endif /*_WIN32*/
#ifdef _WIN32
# define SIZE_T_FMT "%Iu"
# define PTR_FMT "0x%p"
# if !defined(snprintf)
# define snprintf sprintf_s
# endif
#else /*!_WIN32*/
# define SIZE_T_FMT "%zu"
# define PTR_FMT "%p"
#endif /*!_WIN32*/
typedef uint32_t cl_mem_fence_flags;
//! \cond ignore
#define _BAD_INT32 0xBAADBAAD
#define _BAD_INT64 0XBAADBAADBAADBAADLL
#define _BAD_INTPTR LP64_SWITCH(_BAD_INT32,_BAD_INT64)
const pointer badPointer = (pointer)(intptr_t) _BAD_INTPTR;
const address badAddress = (address)(intptr_t) _BAD_INTPTR;
//! \endcond
const size_t Ki = 1024;
const size_t Mi = Ki*Ki;
const size_t Gi = Ki*Ki*Ki;
const size_t K = 1000;
const size_t M = K*K;
const size_t G = K*K*K;
#include "utils/debug.hpp"
//! \addtogroup Utils
//! Namespace for AMD's OpenCL platform
namespace amd {/*@{*/
//! \brief The default Null object type (!= void*);
struct Null {};
//! \brief Return a const Null object (null)
inline const Null null() { return Null(); }
/*! \brief A struct to hold 2 objects of arbitrary type.
*/
template <typename F, typename S>
struct pair
{
F first; /*!< \brief first element. */
S second; /*!< \brief second element. */
pair() : first(), second() { }
pair(const F& f, const S& s) : first(f), second(s) { }
template <typename FF, typename SS>
pair(const pair<FF,SS>& p) : first(p.first), second(p.second) { }
};
template<typename F, typename S>
inline pair<F,S>
make_pair(F first, S second)
{
return pair<F,S>(first, second);
}
/*! \brief Equivalent to a namespace (All member functions are static).
*/
class AllStatic
{
WINDOWS_SWITCH(public,private):
AllStatic() { ShouldNotCallThis(); }
AllStatic(const AllStatic&) { ShouldNotCallThis(); }
~AllStatic() { ShouldNotCallThis(); }
};
/*! \brief For embedded objects.
*/
class EmbeddedObject
{
WINDOWS_SWITCH(public,private):
void* operator new(size_t) { ShouldNotCallThis(); return badPointer; }
void operator delete(void *) { ShouldNotCallThis(); }
};
/*! \brief For stack allocated objects.
*/
class StackObject
{
WINDOWS_SWITCH(public,private):
void* operator new(size_t) { ShouldNotCallThis(); return badPointer; }
void operator delete(void *) { ShouldNotCallThis(); }
};
/*! \brief for objects allocated in a dedicate memory pool.
the standard 'new' should not be called,
only the in place version 'new (allocation_pointer) <class>()'
, delete should only invoke the destructors and not release memory
*/
class MemoryPoolObject
{
public:
void* operator new(size_t) { ShouldNotCallThis(); return badPointer; }
void* operator new(size_t size,void * address) { return address; }
void operator delete(void *) { }
void operator delete( void *,void * address) { }
};
/*! \brief For objects allocated on the C-heap.
*/
class HeapObject
{
public:
void* operator new(size_t size);
void operator delete(void* obj);
};
/*! \brief For all reference counted objects.
*/
class ReferenceCountedObject
{
volatile uint referenceCount_;
protected:
virtual ~ReferenceCountedObject() { }
virtual bool terminate() { return true; }
public:
ReferenceCountedObject() : referenceCount_(1) { }
void* operator new(size_t size) { return ::operator new(size); }
void operator delete(void* p) { return ::operator delete(p); }
uint referenceCount() const { return referenceCount_; }
uint retain();
uint release();
};
/*@}*/} // namespace amd
#ifdef FOR_DOXYGEN_ONLY
namespace std
{
template<class F, class S> struct pair { F first; S second; };
template<class T> struct vector { public: T data; };
template<class T> class deque { public: T data; };
template<class T> class list { public: T data; };
template<class T> class slist { public: T data; };
template<class T> class set { public: T data; };
template<class Key, class Data> class map { public: Key key; Data data; };
}
#endif // FOR_DOXYGEN_ONLY
#undef min // using std::min
#undef max // using std::max
#endif /*TOP_HPP_*/