xref: /src/contrib/llvm-project/llvm/lib/Object/WindowsMachineFlag.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
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 Andric COFF::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 Andric StringRef 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