1ec727ea7Spatrick //===--- VE.cpp - Implement VE target feature support ---------------------===//
2ec727ea7Spatrick //
3ec727ea7Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ec727ea7Spatrick // See https://llvm.org/LICENSE.txt for license information.
5ec727ea7Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ec727ea7Spatrick //
7ec727ea7Spatrick //===----------------------------------------------------------------------===//
8ec727ea7Spatrick //
9ec727ea7Spatrick // This file implements VE TargetInfo objects.
10ec727ea7Spatrick //
11ec727ea7Spatrick //===----------------------------------------------------------------------===//
12ec727ea7Spatrick
13ec727ea7Spatrick #include "VE.h"
14ec727ea7Spatrick #include "clang/Basic/Builtins.h"
15ec727ea7Spatrick #include "clang/Basic/MacroBuilder.h"
16ec727ea7Spatrick #include "clang/Basic/TargetBuiltins.h"
17ec727ea7Spatrick
18ec727ea7Spatrick using namespace clang;
19ec727ea7Spatrick using namespace clang::targets;
20ec727ea7Spatrick
21*12c85518Srobert static constexpr Builtin::Info BuiltinInfo[] = {
22*12c85518Srobert #define BUILTIN(ID, TYPE, ATTRS) \
23*12c85518Srobert {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
24*12c85518Srobert #include "clang/Basic/BuiltinsVE.def"
25*12c85518Srobert };
26*12c85518Srobert
getTargetDefines(const LangOptions & Opts,MacroBuilder & Builder) const27ec727ea7Spatrick void VETargetInfo::getTargetDefines(const LangOptions &Opts,
28ec727ea7Spatrick MacroBuilder &Builder) const {
29ec727ea7Spatrick Builder.defineMacro("_LP64", "1");
30ec727ea7Spatrick Builder.defineMacro("unix", "1");
31ec727ea7Spatrick Builder.defineMacro("__unix__", "1");
32ec727ea7Spatrick Builder.defineMacro("__linux__", "1");
33ec727ea7Spatrick Builder.defineMacro("__ve", "1");
34ec727ea7Spatrick Builder.defineMacro("__ve__", "1");
35ec727ea7Spatrick Builder.defineMacro("__STDC_HOSTED__", "1");
36ec727ea7Spatrick Builder.defineMacro("__STDC__", "1");
37ec727ea7Spatrick Builder.defineMacro("__NEC__", "1");
38ec727ea7Spatrick // FIXME: define __FAST_MATH__ 1 if -ffast-math is enabled
39ec727ea7Spatrick // FIXME: define __OPTIMIZE__ n if -On is enabled
40ec727ea7Spatrick // FIXME: define __VECTOR__ n 1 if automatic vectorization is enabled
41*12c85518Srobert
42*12c85518Srobert Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
43*12c85518Srobert Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
44*12c85518Srobert Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
45*12c85518Srobert Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
46ec727ea7Spatrick }
47ec727ea7Spatrick
getTargetBuiltins() const48ec727ea7Spatrick ArrayRef<Builtin::Info> VETargetInfo::getTargetBuiltins() const {
49*12c85518Srobert return llvm::ArrayRef(BuiltinInfo,
50*12c85518Srobert clang::VE::LastTSBuiltin - Builtin::FirstTSBuiltin);
51ec727ea7Spatrick }
52