blob: ba85ed7ee6260c46ab49a167ae1ec64525aa0ee9 [file] [log] [blame]
Craig Topperd5c28c42020-06-09 12:18:08 -07001//===-- X86TargetParser - Parser for X86 features ---------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements a target parser to recognise X86 hardware features.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/Support/X86TargetParser.h"
14#include "llvm/ADT/StringSwitch.h"
15#include "llvm/ADT/Triple.h"
16
17using namespace llvm;
18
19bool checkCPUKind(llvm::X86::CPUKind Kind, bool Only64Bit) {
20 using namespace X86;
21 // Perform any per-CPU checks necessary to determine if this CPU is
22 // acceptable.
23 switch (Kind) {
24 case CK_None:
25 // No processor selected!
26 return false;
27#define PROC(ENUM, STRING, IS64BIT) \
28 case CK_##ENUM: \
29 return IS64BIT || !Only64Bit;
30#include "llvm/Support/X86TargetParser.def"
31 }
32 llvm_unreachable("Unhandled CPU kind");
33}
34
35X86::CPUKind llvm::X86::parseArchX86(StringRef CPU, bool Only64Bit) {
36 X86::CPUKind Kind = llvm::StringSwitch<CPUKind>(CPU)
37#define PROC(ENUM, STRING, IS64BIT) .Case(STRING, CK_##ENUM)
38#define PROC_ALIAS(ENUM, ALIAS) .Case(ALIAS, CK_##ENUM)
39#include "llvm/Support/X86TargetParser.def"
40 .Default(CK_None);
41
42 if (!checkCPUKind(Kind, Only64Bit))
43 Kind = CK_None;
44
45 return Kind;
46}
47
48void llvm::X86::fillValidCPUArchList(SmallVectorImpl<StringRef> &Values,
49 bool Only64Bit) {
50#define PROC(ENUM, STRING, IS64BIT) \
51 if (IS64BIT || !Only64Bit) \
52 Values.emplace_back(STRING);
53 // For aliases we need to lookup the CPUKind to get the 64-bit ness.
54#define PROC_ALIAS(ENUM, ALIAS) \
55 if (checkCPUKind(CK_##ENUM, Only64Bit)) \
56 Values.emplace_back(ALIAS);
57#include "llvm/Support/X86TargetParser.def"
58}