| //===- WindowsMachineFlag.cpp ---------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Functions for implementing the /machine: flag. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/Object/WindowsMachineFlag.h" |
| |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/ADT/StringSwitch.h" |
| #include "llvm/BinaryFormat/COFF.h" |
| |
| using namespace llvm; |
| |
| // Returns /machine's value. |
| COFF::MachineTypes llvm::getMachineType(StringRef S) { |
| return StringSwitch<COFF::MachineTypes>(S.lower()) |
| .Cases("x64", "amd64", COFF::IMAGE_FILE_MACHINE_AMD64) |
| .Cases("x86", "i386", COFF::IMAGE_FILE_MACHINE_I386) |
| .Case("arm", COFF::IMAGE_FILE_MACHINE_ARMNT) |
| .Case("arm64", COFF::IMAGE_FILE_MACHINE_ARM64) |
| .Default(COFF::IMAGE_FILE_MACHINE_UNKNOWN); |
| } |
| |
| StringRef llvm::machineToStr(COFF::MachineTypes MT) { |
| switch (MT) { |
| case COFF::IMAGE_FILE_MACHINE_ARMNT: |
| return "arm"; |
| case COFF::IMAGE_FILE_MACHINE_ARM64: |
| return "arm64"; |
| case COFF::IMAGE_FILE_MACHINE_AMD64: |
| return "x64"; |
| case COFF::IMAGE_FILE_MACHINE_I386: |
| return "x86"; |
| default: |
| llvm_unreachable("unknown machine type"); |
| } |
| } |