1*1dc2123dSNico Weber //===- WindowsMachineFlag.cpp ---------------------------------------------===//
2*1dc2123dSNico Weber //
3*1dc2123dSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*1dc2123dSNico Weber // See https://llvm.org/LICENSE.txt for license information.
5*1dc2123dSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*1dc2123dSNico Weber //
7*1dc2123dSNico Weber //===----------------------------------------------------------------------===//
8*1dc2123dSNico Weber //
9*1dc2123dSNico Weber // Functions for implementing the /machine: flag.
10*1dc2123dSNico Weber //
11*1dc2123dSNico Weber //===----------------------------------------------------------------------===//
12*1dc2123dSNico Weber 
13*1dc2123dSNico Weber #include "llvm/Object/WindowsMachineFlag.h"
14*1dc2123dSNico Weber 
15*1dc2123dSNico Weber #include "llvm/ADT/StringRef.h"
16*1dc2123dSNico Weber #include "llvm/ADT/StringSwitch.h"
17*1dc2123dSNico Weber #include "llvm/BinaryFormat/COFF.h"
18*1dc2123dSNico Weber 
19*1dc2123dSNico Weber using namespace llvm;
20*1dc2123dSNico Weber 
21*1dc2123dSNico Weber // Returns /machine's value.
getMachineType(StringRef S)22*1dc2123dSNico Weber COFF::MachineTypes llvm::getMachineType(StringRef S) {
23*1dc2123dSNico Weber   return StringSwitch<COFF::MachineTypes>(S.lower())
24*1dc2123dSNico Weber       .Cases("x64", "amd64", COFF::IMAGE_FILE_MACHINE_AMD64)
25*1dc2123dSNico Weber       .Cases("x86", "i386", COFF::IMAGE_FILE_MACHINE_I386)
26*1dc2123dSNico Weber       .Case("arm", COFF::IMAGE_FILE_MACHINE_ARMNT)
27*1dc2123dSNico Weber       .Case("arm64", COFF::IMAGE_FILE_MACHINE_ARM64)
28*1dc2123dSNico Weber       .Default(COFF::IMAGE_FILE_MACHINE_UNKNOWN);
29*1dc2123dSNico Weber }
30*1dc2123dSNico Weber 
machineToStr(COFF::MachineTypes MT)31*1dc2123dSNico Weber StringRef llvm::machineToStr(COFF::MachineTypes MT) {
32*1dc2123dSNico Weber   switch (MT) {
33*1dc2123dSNico Weber   case COFF::IMAGE_FILE_MACHINE_ARMNT:
34*1dc2123dSNico Weber     return "arm";
35*1dc2123dSNico Weber   case COFF::IMAGE_FILE_MACHINE_ARM64:
36*1dc2123dSNico Weber     return "arm64";
37*1dc2123dSNico Weber   case COFF::IMAGE_FILE_MACHINE_AMD64:
38*1dc2123dSNico Weber     return "x64";
39*1dc2123dSNico Weber   case COFF::IMAGE_FILE_MACHINE_I386:
40*1dc2123dSNico Weber     return "x86";
41*1dc2123dSNico Weber   default:
42*1dc2123dSNico Weber     llvm_unreachable("unknown machine type");
43*1dc2123dSNico Weber   }
44*1dc2123dSNico Weber }
45