From d91d57297bdb30b6363e259ab75d517dc333e292 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 12 Aug 2026 00:26:10 +0800 Subject: [RISCV] Support absolute address operand flags --- backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp') diff --git a/backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp b/backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp index 19b1b11..ee41d47 100644 --- a/backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp +++ b/backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp @@ -45,9 +45,11 @@ constexpr std::uint32_t PCRelativeHighTargetFlag = 2; constexpr std::uint32_t PCRelativeLowTargetFlag = 4; constexpr std::uint32_t CopyF32TargetFlag = 8; constexpr std::uint32_t CopyF64TargetFlag = 16; -constexpr std::uint32_t KnownTargetFlags = CallTargetFlag | PCRelativeHighTargetFlag | - PCRelativeLowTargetFlag | CopyF32TargetFlag | - CopyF64TargetFlag; +constexpr std::uint32_t AbsoluteHighTargetFlag = 32; +constexpr std::uint32_t AbsoluteLowTargetFlag = 64; +constexpr std::uint32_t KnownTargetFlags = + CallTargetFlag | PCRelativeHighTargetFlag | PCRelativeLowTargetFlag | CopyF32TargetFlag | + CopyF64TargetFlag | AbsoluteHighTargetFlag | AbsoluteLowTargetFlag; struct TypeLayout final { std::uint64_t Size = 0; @@ -219,6 +221,12 @@ struct TypeLayout final { case PCRelativeLowTargetFlag: Kind = RISCVMCExprKind::PCRelativeLow; break; + case AbsoluteHighTargetFlag: + Kind = RISCVMCExprKind::AbsoluteHigh; + break; + case AbsoluteLowTargetFlag: + Kind = RISCVMCExprKind::AbsoluteLow; + break; default: return makeUnexpected(ErrorCode::AssemblyLoweringFailed, "RISC-V operand combines incompatible direct target flags"); -- cgit v1.2.3