1 //===- WindowsMachineFlag.h -------------------------------------*- 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 // Functions for implementing the /machine: flag. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_OBJECT_WINDOWSMACHINEFLAG_H 14 #define LLVM_OBJECT_WINDOWSMACHINEFLAG_H 15 16 #include "llvm/BinaryFormat/COFF.h" 17 #include "llvm/Support/Compiler.h" 18 #include "llvm/TargetParser/Triple.h" 19 20 namespace llvm { 21 22 class StringRef; 23 namespace COFF { 24 enum MachineTypes : unsigned; 25 } 26 27 // Returns a user-readable string for ARMNT, ARM64, AMD64, I386. 28 // Other MachineTypes values must not be passed in. 29 LLVM_ABI StringRef machineToStr(COFF::MachineTypes MT); 30 31 // Maps /machine: arguments to a MachineTypes value. 32 // Only returns ARMNT, ARM64, AMD64, I386, or IMAGE_FILE_MACHINE_UNKNOWN. 33 LLVM_ABI COFF::MachineTypes getMachineType(StringRef S); 34 getMachineArchType(T machine)35template <typename T> Triple::ArchType getMachineArchType(T machine) { 36 switch (machine) { 37 case COFF::IMAGE_FILE_MACHINE_I386: 38 return llvm::Triple::ArchType::x86; 39 case COFF::IMAGE_FILE_MACHINE_AMD64: 40 return llvm::Triple::ArchType::x86_64; 41 case COFF::IMAGE_FILE_MACHINE_ARMNT: 42 return llvm::Triple::ArchType::thumb; 43 case COFF::IMAGE_FILE_MACHINE_ARM64: 44 case COFF::IMAGE_FILE_MACHINE_ARM64EC: 45 case COFF::IMAGE_FILE_MACHINE_ARM64X: 46 return llvm::Triple::ArchType::aarch64; 47 case COFF::IMAGE_FILE_MACHINE_R4000: 48 return llvm::Triple::ArchType::mipsel; 49 default: 50 return llvm::Triple::ArchType::UnknownArch; 51 } 52 } 53 54 } // namespace llvm 55 56 #endif 57