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 WeberCOFF::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 WeberStringRef 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