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