xref: /llvm-project/clang/lib/Basic/Targets/VE.cpp (revision 78bf8a0a2212c1826ce2a9c0f98c73e9b9b16367)
196d4ccf0SKazushi (Jam) Marukawa //===--- VE.cpp - Implement VE target feature support ---------------------===//
296d4ccf0SKazushi (Jam) Marukawa //
396d4ccf0SKazushi (Jam) Marukawa // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
496d4ccf0SKazushi (Jam) Marukawa // See https://llvm.org/LICENSE.txt for license information.
596d4ccf0SKazushi (Jam) Marukawa // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
696d4ccf0SKazushi (Jam) Marukawa //
796d4ccf0SKazushi (Jam) Marukawa //===----------------------------------------------------------------------===//
896d4ccf0SKazushi (Jam) Marukawa //
996d4ccf0SKazushi (Jam) Marukawa // This file implements VE TargetInfo objects.
1096d4ccf0SKazushi (Jam) Marukawa //
1196d4ccf0SKazushi (Jam) Marukawa //===----------------------------------------------------------------------===//
1296d4ccf0SKazushi (Jam) Marukawa 
1396d4ccf0SKazushi (Jam) Marukawa #include "VE.h"
1496d4ccf0SKazushi (Jam) Marukawa #include "clang/Basic/Builtins.h"
1596d4ccf0SKazushi (Jam) Marukawa #include "clang/Basic/MacroBuilder.h"
1696d4ccf0SKazushi (Jam) Marukawa #include "clang/Basic/TargetBuiltins.h"
1796d4ccf0SKazushi (Jam) Marukawa 
1896d4ccf0SKazushi (Jam) Marukawa using namespace clang;
1996d4ccf0SKazushi (Jam) Marukawa using namespace clang::targets;
2096d4ccf0SKazushi (Jam) Marukawa 
21d9ab3e82Sserge-sans-paille static constexpr Builtin::Info BuiltinInfo[] = {
22b1b4b6f3SKazushi (Jam) Marukawa #define BUILTIN(ID, TYPE, ATTRS)                                               \
23*5a7f47ccSserge-sans-paille   {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
24b1b4b6f3SKazushi (Jam) Marukawa #include "clang/Basic/BuiltinsVE.def"
25b1b4b6f3SKazushi (Jam) Marukawa };
26b1b4b6f3SKazushi (Jam) Marukawa 
getTargetDefines(const LangOptions & Opts,MacroBuilder & Builder) const2796d4ccf0SKazushi (Jam) Marukawa void VETargetInfo::getTargetDefines(const LangOptions &Opts,
2896d4ccf0SKazushi (Jam) Marukawa                                     MacroBuilder &Builder) const {
2996d4ccf0SKazushi (Jam) Marukawa   Builder.defineMacro("__ve", "1");
3096d4ccf0SKazushi (Jam) Marukawa   Builder.defineMacro("__ve__", "1");
3196d4ccf0SKazushi (Jam) Marukawa   Builder.defineMacro("__NEC__", "1");
3296d4ccf0SKazushi (Jam) Marukawa   // FIXME: define __FAST_MATH__ 1 if -ffast-math is enabled
3396d4ccf0SKazushi (Jam) Marukawa   // FIXME: define __OPTIMIZE__ n if -On is enabled
3496d4ccf0SKazushi (Jam) Marukawa   // FIXME: define __VECTOR__ n 1 if automatic vectorization is enabled
35d227c3b6SBrad Smith 
36d227c3b6SBrad Smith   Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
37d227c3b6SBrad Smith   Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
38d227c3b6SBrad Smith   Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
39d227c3b6SBrad Smith   Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
4096d4ccf0SKazushi (Jam) Marukawa }
4196d4ccf0SKazushi (Jam) Marukawa 
getTargetBuiltins() const4296d4ccf0SKazushi (Jam) Marukawa ArrayRef<Builtin::Info> VETargetInfo::getTargetBuiltins() const {
43a3c248dbSserge-sans-paille   return llvm::ArrayRef(BuiltinInfo,
44b1b4b6f3SKazushi (Jam) Marukawa                         clang::VE::LastTSBuiltin - Builtin::FirstTSBuiltin);
4596d4ccf0SKazushi (Jam) Marukawa }
46