[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