TPDE
Loading...
Searching...
No Matches
CompilerConfig.hpp
1// SPDX-FileCopyrightText: 2025 Contributors to TPDE <https://tpde.org>
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4#pragma once
5
6#include <concepts>
7#include <type_traits>
8
9#include "base.hpp"
10
11namespace tpde {
12
13class CCAssigner;
14
15template <typename T, typename Base>
16concept SameBaseAs =
17 std::is_same_v<std::remove_const_t<std::remove_reference_t<T>>, Base>;
18
19template <typename T>
20concept CompilerConfig = requires {
21 { T::FRAME_INDEXING_NEGATIVE } -> SameBaseAs<bool>;
22 { T::PLATFORM_POINTER_SIZE } -> SameBaseAs<u32>;
23 { T::NUM_BANKS } -> SameBaseAs<u32>;
24 { T::DEFAULT_VAR_REF_HANDLING } -> SameBaseAs<bool>;
25
26 typename T::DefaultCCAssigner;
27 requires std::derived_from<typename T::DefaultCCAssigner, CCAssigner>;
28
29 typename T::Assembler;
30 typename T::AsmReg;
31};
32
33struct CompilerConfigDefault {
34 constexpr static bool DEFAULT_VAR_REF_HANDLING = true;
35};
36
37} // namespace tpde