xref: /openbsd-src/gnu/llvm/llvm/lib/Object/WindowsMachineFlag.cpp (revision d415bd752c734aee168c4ee86ff32e8cc249eb16)
109467b48Spatrick //===- WindowsMachineFlag.cpp ---------------------------------------------===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick //
909467b48Spatrick // Functions for implementing the /machine: flag.
1009467b48Spatrick //
1109467b48Spatrick //===----------------------------------------------------------------------===//
1209467b48Spatrick 
1309467b48Spatrick #include "llvm/Object/WindowsMachineFlag.h"
1409467b48Spatrick 
1509467b48Spatrick #include "llvm/ADT/StringRef.h"
1609467b48Spatrick #include "llvm/ADT/StringSwitch.h"
1709467b48Spatrick #include "llvm/BinaryFormat/COFF.h"
18*d415bd75Srobert #include "llvm/Support/ErrorHandling.h"
1909467b48Spatrick 
2009467b48Spatrick using namespace llvm;
2109467b48Spatrick 
2209467b48Spatrick // Returns /machine's value.
getMachineType(StringRef S)2309467b48Spatrick COFF::MachineTypes llvm::getMachineType(StringRef S) {
2409467b48Spatrick   return StringSwitch<COFF::MachineTypes>(S.lower())
2509467b48Spatrick       .Cases("x64", "amd64", COFF::IMAGE_FILE_MACHINE_AMD64)
2609467b48Spatrick       .Cases("x86", "i386", COFF::IMAGE_FILE_MACHINE_I386)
2709467b48Spatrick       .Case("arm", COFF::IMAGE_FILE_MACHINE_ARMNT)
2809467b48Spatrick       .Case("arm64", COFF::IMAGE_FILE_MACHINE_ARM64)
29*d415bd75Srobert       .Case("arm64ec", COFF::IMAGE_FILE_MACHINE_ARM64EC)
3009467b48Spatrick       .Default(COFF::IMAGE_FILE_MACHINE_UNKNOWN);
3109467b48Spatrick }
3209467b48Spatrick 
machineToStr(COFF::MachineTypes MT)3309467b48Spatrick StringRef llvm::machineToStr(COFF::MachineTypes MT) {
3409467b48Spatrick   switch (MT) {
3509467b48Spatrick   case COFF::IMAGE_FILE_MACHINE_ARMNT:
3609467b48Spatrick     return "arm";
3709467b48Spatrick   case COFF::IMAGE_FILE_MACHINE_ARM64:
3809467b48Spatrick     return "arm64";
39*d415bd75Srobert   case COFF::IMAGE_FILE_MACHINE_ARM64EC:
40*d415bd75Srobert     return "arm64ec";
4109467b48Spatrick   case COFF::IMAGE_FILE_MACHINE_AMD64:
4209467b48Spatrick     return "x64";
4309467b48Spatrick   case COFF::IMAGE_FILE_MACHINE_I386:
4409467b48Spatrick     return "x86";
4509467b48Spatrick   default:
4609467b48Spatrick     llvm_unreachable("unknown machine type");
4709467b48Spatrick   }
4809467b48Spatrick }
49