[lld] [RISCV][LLD] Zcmt RISC-V extension in lld (PR #163142)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 14 11:07:31 PDT 2025
================
@@ -380,6 +380,51 @@ class GotPltSection final : public SyntheticSection {
SmallVector<const Symbol *, 0> entries;
};
+class TableJumpSection final : public SyntheticSection {
+public:
+ TableJumpSection(Ctx &);
+ size_t getSize() const override;
+ void writeTo(uint8_t *buf) override;
+ void finalizeContents() override;
+
+ int32_t getSizeReduction();
+ void addCMJTEntryCandidate(const Symbol *symbol, int csReduction);
+ int getCMJTEntryIndex(const Symbol *symbol);
+ void addCMJALTEntryCandidate(const Symbol *symbol, int csReduction);
+ int getCMJALTEntryIndex(const Symbol *symbol);
+ void scanTableJumpEntries(const InputSection &sec) const;
+
+ bool isFinalized = false;
+
+private:
+ SmallVector<llvm::detail::DenseMapPair<const Symbol *, int>, 0>
+ finalizeEntry(llvm::DenseMap<const Symbol *, int> EntryMap, uint32_t maxSize);
+ void addEntry(const Symbol *symbol,
+ llvm::DenseMap<const Symbol *, int> &entriesList,
+ int csReduction);
+ uint32_t getIndex(const Symbol *symbol, uint32_t maxSize,
+ SmallVector<llvm::detail::DenseMapPair<const Symbol *, int>,
+ 0> &entriesList);
+ void writeEntries(uint8_t *buf,
+ SmallVector<llvm::detail::DenseMapPair<const Symbol *, int>,
+ 0> &entriesList);
+ void padWords(uint8_t *buf, const uint8_t maxWordCount);
+
+ // used in finalizeContents function.
+ static const size_t maxCMJTEntrySize = 32;
+ static const size_t maxCMJALTEntrySize = 224;
+
+ static const size_t startCMJTEntryIdx = 0;
+ static const size_t startCMJALTEntryIdx = 32;
----------------
topperc wrote:
```suggestion
static constexpr size_t maxCMJTEntrySize = 32;
static constexpr size_t maxCMJALTEntrySize = 224;
static constexpr size_t startCMJTEntryIdx = 0;
static constexpr size_t startCMJALTEntryIdx = 32;
```
https://github.com/llvm/llvm-project/pull/163142
More information about the llvm-commits
mailing list