aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/Target/RISCV
diff options
context:
space:
mode:
Diffstat (limited to 'backend/include/rcc/Target/RISCV')
-rw-r--r--backend/include/rcc/Target/RISCV/RISCVFixupKinds.h1
-rw-r--r--backend/include/rcc/Target/RISCV/RISCVInstPrinter.h1
-rw-r--r--backend/include/rcc/Target/RISCV/RISCVSubtarget.h15
3 files changed, 16 insertions, 1 deletions
diff --git a/backend/include/rcc/Target/RISCV/RISCVFixupKinds.h b/backend/include/rcc/Target/RISCV/RISCVFixupKinds.h
index 7e9c8a2..e030bfc 100644
--- a/backend/include/rcc/Target/RISCV/RISCVFixupKinds.h
+++ b/backend/include/rcc/Target/RISCV/RISCVFixupKinds.h
@@ -14,6 +14,7 @@ enum class RISCVFixupKind : mc::MCFixupKind {
Low12I,
Low12S,
PCRelativeHigh20,
+ GOTPCRelativeHigh20,
PCRelativeLow12I,
PCRelativeLow12S,
JAL,
diff --git a/backend/include/rcc/Target/RISCV/RISCVInstPrinter.h b/backend/include/rcc/Target/RISCV/RISCVInstPrinter.h
index 1b80218..7e74ab2 100644
--- a/backend/include/rcc/Target/RISCV/RISCVInstPrinter.h
+++ b/backend/include/rcc/Target/RISCV/RISCVInstPrinter.h
@@ -18,6 +18,7 @@ enum class RISCVMCExprKind : std::uint32_t {
PCRelativeLow = 3,
AbsoluteHigh = 4,
AbsoluteLow = 5,
+ GOTPCRelativeHigh = 6,
};
class RISCVInstPrinter final : public mc::MCInstPrinter {
diff --git a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
index c590be6..a77a045 100644
--- a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
+++ b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
@@ -3,6 +3,7 @@
#ifndef RCC_TARGET_RISCV_RISCVSUBTARGET_H
#define RCC_TARGET_RISCV_RISCVSUBTARGET_H
+#include "rcc/CodeGen/CommandFlags.h"
#include "rcc/Support/Error.h"
#include <cstdint>
@@ -88,7 +89,9 @@ private:
class RISCVSubtarget final {
public:
- explicit RISCVSubtarget(RISCVSubtargetFeatures Features);
+ explicit RISCVSubtarget(RISCVSubtargetFeatures Features,
+ RelocationModel Relocation = RelocationModel::Static,
+ CodeModel Code = CodeModel::Small);
RISCVSubtarget(const RISCVSubtarget &) = delete;
RISCVSubtarget &operator=(const RISCVSubtarget &) = delete;
RISCVSubtarget(RISCVSubtarget &&) = delete;
@@ -99,6 +102,14 @@ public:
return Features;
}
+ [[nodiscard]] RelocationModel relocationModel() const noexcept {
+ return Relocation;
+ }
+
+ [[nodiscard]] CodeModel codeModel() const noexcept {
+ return Code;
+ }
+
[[nodiscard]] const TargetCallLowering *getCallLowering() const;
[[nodiscard]] InstructionSelector *getInstructionSelector() const;
[[nodiscard]] const LegalizerInfo *getLegalizerInfo() const;
@@ -106,6 +117,8 @@ public:
private:
RISCVSubtargetFeatures Features;
+ RelocationModel Relocation;
+ CodeModel Code;
mutable std::unique_ptr<TargetCallLowering> CallLoweringInfo;
mutable std::unique_ptr<InstructionSelector> InstSelector;
mutable std::unique_ptr<LegalizerInfo> Legalizer;