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