From f99ef4322a7a2c09380fff61f88ab9440f05a92c Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Fri, 7 Aug 2026 22:06:28 +0800 Subject: [CodeGen] Complete machine pass and ABI lowering infrastructure --- .../include/rcc/Target/RISCV/RISCVCallLowering.h | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 backend/include/rcc/Target/RISCV/RISCVCallLowering.h (limited to 'backend/include/rcc/Target') diff --git a/backend/include/rcc/Target/RISCV/RISCVCallLowering.h b/backend/include/rcc/Target/RISCV/RISCVCallLowering.h new file mode 100644 index 0000000..445c922 --- /dev/null +++ b/backend/include/rcc/Target/RISCV/RISCVCallLowering.h @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef RCC_TARGET_RISCV_RISCVCALLLOWERING_H +#define RCC_TARGET_RISCV_RISCVCALLLOWERING_H + +#include "rcc/CodeGen/TargetCallLowering.h" +#include "rcc/Target/RISCV/RISCVInstructions.h" + +#include + +namespace rcc::riscv { + +enum class CallTargetFlag : std::uint32_t { + DirectCall = 1U << 0U, +}; + +enum class CallStackObjectFlag : std::uint64_t { + IncomingArgument = 1ULL << 0U, + OutgoingArgument = 1ULL << 1U, + ByValCopy = 1ULL << 2U, + VarArgSaveArea = 1ULL << 3U, + VarArgAlignmentPadding = 1ULL << 4U, +}; + +enum class CallValueTransform : std::uint8_t { + Full, + AnyExtend, + SignExtend, + ZeroExtend, + Truncate, + Bitcast, +}; + +[[nodiscard]] constexpr CallingConventionID +callingConventionID(CallingConvention Convention) noexcept { + return CallingConventionID::fromValue(static_cast(Convention)); +} + +[[nodiscard]] const TargetCallLowering &callLowering() noexcept; + +} // namespace rcc::riscv + +#endif // RCC_TARGET_RISCV_RISCVCALLLOWERING_H -- cgit v1.2.3