forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===--- TCE.h - Declare TCE target feature support -------------*- C++ -*-===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file declares TCE TargetInfo objects.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_TCE_H
 | |
| #define LLVM_CLANG_LIB_BASIC_TARGETS_TCE_H
 | |
| 
 | |
| #include "clang/Basic/TargetInfo.h"
 | |
| #include "clang/Basic/TargetOptions.h"
 | |
| #include "llvm/ADT/Triple.h"
 | |
| #include "llvm/Support/Compiler.h"
 | |
| 
 | |
| namespace clang {
 | |
| namespace targets {
 | |
| 
 | |
| // llvm and clang cannot be used directly to output native binaries for
 | |
| // target, but is used to compile C code to llvm bitcode with correct
 | |
| // type and alignment information.
 | |
| //
 | |
| // TCE uses the llvm bitcode as input and uses it for generating customized
 | |
| // target processor and program binary. TCE co-design environment is
 | |
| // publicly available in http://tce.cs.tut.fi
 | |
| 
 | |
| static const unsigned TCEOpenCLAddrSpaceMap[] = {
 | |
|     0, // Default
 | |
|     3, // opencl_global
 | |
|     4, // opencl_local
 | |
|     5, // opencl_constant
 | |
|     0, // opencl_private
 | |
|     // FIXME: generic has to be added to the target
 | |
|     0, // opencl_generic
 | |
|     0, // cuda_device
 | |
|     0, // cuda_constant
 | |
|     0, // cuda_shared
 | |
|     0, // ptr32_sptr
 | |
|     0, // ptr32_uptr
 | |
|     0, // ptr64
 | |
| };
 | |
| 
 | |
| class LLVM_LIBRARY_VISIBILITY TCETargetInfo : public TargetInfo {
 | |
| public:
 | |
|   TCETargetInfo(const llvm::Triple &Triple, const TargetOptions &)
 | |
|       : TargetInfo(Triple) {
 | |
|     TLSSupported = false;
 | |
|     IntWidth = 32;
 | |
|     LongWidth = LongLongWidth = 32;
 | |
|     PointerWidth = 32;
 | |
|     IntAlign = 32;
 | |
|     LongAlign = LongLongAlign = 32;
 | |
|     PointerAlign = 32;
 | |
|     SuitableAlign = 32;
 | |
|     SizeType = UnsignedInt;
 | |
|     IntMaxType = SignedLong;
 | |
|     IntPtrType = SignedInt;
 | |
|     PtrDiffType = SignedInt;
 | |
|     FloatWidth = 32;
 | |
|     FloatAlign = 32;
 | |
|     DoubleWidth = 32;
 | |
|     DoubleAlign = 32;
 | |
|     LongDoubleWidth = 32;
 | |
|     LongDoubleAlign = 32;
 | |
|     FloatFormat = &llvm::APFloat::IEEEsingle();
 | |
|     DoubleFormat = &llvm::APFloat::IEEEsingle();
 | |
|     LongDoubleFormat = &llvm::APFloat::IEEEsingle();
 | |
|     resetDataLayout("E-p:32:32:32-i1:8:8-i8:8:32-"
 | |
|                     "i16:16:32-i32:32:32-i64:32:32-"
 | |
|                     "f32:32:32-f64:32:32-v64:32:32-"
 | |
|                     "v128:32:32-v256:32:32-v512:32:32-"
 | |
|                     "v1024:32:32-a0:0:32-n32");
 | |
|     AddrSpaceMap = &TCEOpenCLAddrSpaceMap;
 | |
|     UseAddrSpaceMapMangling = true;
 | |
|   }
 | |
| 
 | |
|   void getTargetDefines(const LangOptions &Opts,
 | |
|                         MacroBuilder &Builder) const override;
 | |
| 
 | |
|   bool hasFeature(StringRef Feature) const override { return Feature == "tce"; }
 | |
| 
 | |
|   ArrayRef<Builtin::Info> getTargetBuiltins() const override { return None; }
 | |
| 
 | |
|   const char *getClobbers() const override { return ""; }
 | |
| 
 | |
|   BuiltinVaListKind getBuiltinVaListKind() const override {
 | |
|     return TargetInfo::VoidPtrBuiltinVaList;
 | |
|   }
 | |
| 
 | |
|   ArrayRef<const char *> getGCCRegNames() const override { return None; }
 | |
| 
 | |
|   bool validateAsmConstraint(const char *&Name,
 | |
|                              TargetInfo::ConstraintInfo &info) const override {
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
 | |
|     return None;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class LLVM_LIBRARY_VISIBILITY TCELETargetInfo : public TCETargetInfo {
 | |
| public:
 | |
|   TCELETargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
 | |
|       : TCETargetInfo(Triple, Opts) {
 | |
|     BigEndian = false;
 | |
| 
 | |
|     resetDataLayout("e-p:32:32:32-i1:8:8-i8:8:32-"
 | |
|                     "i16:16:32-i32:32:32-i64:32:32-"
 | |
|                     "f32:32:32-f64:32:32-v64:32:32-"
 | |
|                     "v128:32:32-v256:32:32-v512:32:32-"
 | |
|                     "v1024:32:32-a0:0:32-n32");
 | |
|   }
 | |
| 
 | |
|   void getTargetDefines(const LangOptions &Opts,
 | |
|                         MacroBuilder &Builder) const override;
 | |
| };
 | |
| } // namespace targets
 | |
| } // namespace clang
 | |
| #endif // LLVM_CLANG_LIB_BASIC_TARGETS_TCE_H
 |