mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
80 lines
1.8 KiB
C++
80 lines
1.8 KiB
C++
#pragma once
|
|
|
|
//
|
|
// This file is distributed under the MIT License. See LICENSE.md for details.
|
|
//
|
|
|
|
#include "llvm/ADT/Triple.h"
|
|
|
|
#include "revng/Model/TupleTree.h"
|
|
#include "revng/Support/YAMLTraits.h"
|
|
|
|
namespace model::Architecture {
|
|
|
|
enum Values { Invalid, x86, x86_64, arm, aarch64, mips, systemz, Count };
|
|
|
|
inline llvm::StringRef getName(Values V) {
|
|
switch (V) {
|
|
case Invalid:
|
|
return "Invalid";
|
|
case x86:
|
|
return "x86";
|
|
case x86_64:
|
|
return "x86_64";
|
|
case arm:
|
|
return "arm";
|
|
case aarch64:
|
|
return "aarch64";
|
|
case mips:
|
|
return "mips";
|
|
case systemz:
|
|
return "systemz";
|
|
default:
|
|
revng_abort();
|
|
}
|
|
}
|
|
|
|
inline Values fromLLVMArchitecture(llvm::Triple::ArchType A) {
|
|
switch (A) {
|
|
case llvm::Triple::x86:
|
|
return model::Architecture::x86;
|
|
case llvm::Triple::x86_64:
|
|
return model::Architecture::x86_64;
|
|
case llvm::Triple::arm:
|
|
return model::Architecture::arm;
|
|
case llvm::Triple::aarch64:
|
|
return model::Architecture::aarch64;
|
|
case llvm::Triple::mips:
|
|
case llvm::Triple::mipsel:
|
|
return model::Architecture::mips;
|
|
case llvm::Triple::systemz:
|
|
return model::Architecture::systemz;
|
|
default:
|
|
return model::Architecture::Invalid;
|
|
}
|
|
}
|
|
|
|
/// Return the size of the pointer in bytes
|
|
constexpr inline size_t getPointerSize(Values V) {
|
|
switch (V) {
|
|
case model::Architecture::x86:
|
|
case model::Architecture::arm:
|
|
case model::Architecture::mips:
|
|
return 4;
|
|
case model::Architecture::x86_64:
|
|
case model::Architecture::aarch64:
|
|
case model::Architecture::systemz:
|
|
return 8;
|
|
default:
|
|
revng_abort();
|
|
}
|
|
}
|
|
|
|
} // namespace model::Architecture
|
|
|
|
namespace llvm::yaml {
|
|
template<>
|
|
struct ScalarEnumerationTraits<model::Architecture::Values>
|
|
: public NamedEnumScalarTraits<model::Architecture::Values> {};
|
|
} // namespace llvm::yaml
|