Files
revng-revng/include/revng/Model/Architecture.h
Alessandro Di Federico 0dfc81da41 Minor model improvements
* Introduce some documentation for the model.
* Improve the way enums are serialized/deserialized.
* Mark certain fields of model data structures as optional.
* introduces some error messages during model validation.
2021-10-18 20:44:58 +02:00

64 lines
1.4 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;
}
}
} // namespace model::Architecture
namespace llvm::yaml {
template<>
struct ScalarEnumerationTraits<model::Architecture::Values>
: public NamedEnumScalarTraits<model::Architecture::Values> {};
} // namespace llvm::yaml