diff options
Diffstat (limited to 'backend/include/rcc/Target/RISCV/RISCVCallLowering.h')
| -rw-r--r-- | backend/include/rcc/Target/RISCV/RISCVCallLowering.h | 43 |
1 files changed, 43 insertions, 0 deletions
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 <cstdint> + +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<std::uint32_t>(Convention)); +} + +[[nodiscard]] const TargetCallLowering &callLowering() noexcept; + +} // namespace rcc::riscv + +#endif // RCC_TARGET_RISCV_RISCVCALLLOWERING_H |
