mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
74217b4fe5
Model classes are now described by a YAML document, which is used to generate C++ headers containing classes and all the boilerplate required for YAML serialization/deserialization, usage in SortedVectors, etc. See the README in include/revng/Model for more info.
87 lines
1.7 KiB
C++
87 lines
1.7 KiB
C++
#pragma once
|
|
|
|
//
|
|
// This file is distributed under the MIT License. See LICENSE.md for details.
|
|
//
|
|
|
|
#include "llvm/ADT/Triple.h"
|
|
|
|
/* TUPLE-TREE-YAML
|
|
name: Architecture
|
|
type: enum
|
|
members:
|
|
- name: x86
|
|
- name: x86_64
|
|
- name: arm
|
|
- name: aarch64
|
|
- name: mips
|
|
- name: mipsel
|
|
- name: systemz
|
|
TUPLE-TREE-YAML */
|
|
|
|
#include "revng/Model/Generated/Early/Architecture.h"
|
|
|
|
namespace model::Architecture {
|
|
|
|
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:
|
|
return model::Architecture::mips;
|
|
case llvm::Triple::mipsel:
|
|
return model::Architecture::mipsel;
|
|
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:
|
|
case model::Architecture::mipsel:
|
|
return 4;
|
|
case model::Architecture::x86_64:
|
|
case model::Architecture::aarch64:
|
|
case model::Architecture::systemz:
|
|
return 8;
|
|
default:
|
|
revng_abort();
|
|
}
|
|
}
|
|
|
|
constexpr inline size_t getCallPushSize(Values V) {
|
|
switch (V) {
|
|
case x86:
|
|
return 4;
|
|
|
|
case x86_64:
|
|
return 8;
|
|
|
|
case arm:
|
|
case mips:
|
|
case mipsel:
|
|
case aarch64:
|
|
case systemz:
|
|
return 0;
|
|
|
|
default:
|
|
revng_abort();
|
|
}
|
|
}
|
|
|
|
} // namespace model::Architecture
|
|
|
|
#include "revng/Model/Generated/Late/Architecture.h"
|