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/RISCVSubtarget.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
index c8a4298..52b99af 100644
--- a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
+++ b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
@@ -71,6 +71,13 @@ enum class RISCVSubtargetOption : std::uint8_t {
Count,
};
+enum class RISCVABI : std::uint8_t {
+ LP64,
+ LP64D,
+};
+
+[[nodiscard]] Expected<RISCVABI> parseRISCVABI(std::string_view Name);
+
class RISCVSubtargetFeatures final {
public:
[[nodiscard]] static Expected<RISCVSubtargetFeatures>
@@ -97,7 +104,7 @@ class RISCVSubtarget final {
public:
explicit RISCVSubtarget(RISCVSubtargetFeatures Features,
RelocationModel Relocation = RelocationModel::Static,
- CodeModel Code = CodeModel::Small);
+ CodeModel Code = CodeModel::Small, RISCVABI ABI = RISCVABI::LP64D);
RISCVSubtarget(const RISCVSubtarget &) = delete;
RISCVSubtarget &operator=(const RISCVSubtarget &) = delete;
RISCVSubtarget(RISCVSubtarget &&) = delete;
@@ -116,6 +123,10 @@ public:
return Code;
}
+ [[nodiscard]] RISCVABI targetABI() const noexcept {
+ return ABI;
+ }
+
[[nodiscard]] const TargetCallLowering *getCallLowering() const;
[[nodiscard]] InstructionSelector *getInstructionSelector() const;
[[nodiscard]] const LegalizerInfo *getLegalizerInfo() const;
@@ -126,6 +137,7 @@ private:
RISCVSubtargetFeatures Features;
RelocationModel Relocation;
CodeModel Code;
+ RISCVABI ABI;
mutable std::unique_ptr<TargetCallLowering> CallLoweringInfo;
mutable std::unique_ptr<InstructionSelector> InstSelector;
mutable std::unique_ptr<LegalizerInfo> Legalizer;