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