diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 00:26:10 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 00:26:10 +0800 |
| commit | d91d57297bdb30b6363e259ab75d517dc333e292 (patch) | |
| tree | b931c72127e25a4acbf1f7b38ffdcba74ef270c7 /backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp | |
| parent | adf3e4f02e330e052dbb75e9601bae5273ccfe6c (diff) | |
| download | rcc-project-d91d57297bdb30b6363e259ab75d517dc333e292.tar.gz rcc-project-d91d57297bdb30b6363e259ab75d517dc333e292.tar.xz | |
[RISCV] Support absolute address operand flags
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVMCTargetLowering.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
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"); |
