brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 14c14f6 Raw
54 lines · cpp
1//===- WindowsMachineFlag.cpp ---------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8//9// Functions for implementing the /machine: flag.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/Object/WindowsMachineFlag.h"14 15#include "llvm/ADT/StringRef.h"16#include "llvm/ADT/StringSwitch.h"17#include "llvm/BinaryFormat/COFF.h"18#include "llvm/Support/ErrorHandling.h"19 20using namespace llvm;21 22// Returns /machine's value.23COFF::MachineTypes llvm::getMachineType(StringRef S) {24  // Flags must be a superset of Microsoft lib.exe /machine flags.25  return StringSwitch<COFF::MachineTypes>(S.lower())26      .Cases({"x64", "amd64"}, COFF::IMAGE_FILE_MACHINE_AMD64)27      .Cases({"x86", "i386"}, COFF::IMAGE_FILE_MACHINE_I386)28      .Case("arm", COFF::IMAGE_FILE_MACHINE_ARMNT)29      .Case("arm64", COFF::IMAGE_FILE_MACHINE_ARM64)30      .Case("arm64ec", COFF::IMAGE_FILE_MACHINE_ARM64EC)31      .Case("arm64x", COFF::IMAGE_FILE_MACHINE_ARM64X)32      .Case("mips", COFF::IMAGE_FILE_MACHINE_R4000)33      .Default(COFF::IMAGE_FILE_MACHINE_UNKNOWN);34}35 36StringRef llvm::machineToStr(COFF::MachineTypes MT) {37  switch (MT) {38  case COFF::IMAGE_FILE_MACHINE_ARMNT:39    return "arm";40  case COFF::IMAGE_FILE_MACHINE_ARM64:41    return "arm64";42  case COFF::IMAGE_FILE_MACHINE_ARM64EC:43    return "arm64ec";44  case COFF::IMAGE_FILE_MACHINE_ARM64X:45    return "arm64x";46  case COFF::IMAGE_FILE_MACHINE_AMD64:47    return "x64";48  case COFF::IMAGE_FILE_MACHINE_I386:49    return "x86";50  default:51    llvm_unreachable("unknown machine type");52  }53}54