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