Skip to content

Commit 606bad0

Browse files
authored
[SOL] Add v4 CPU type for SBF (#147)
1 parent 176f4c2 commit 606bad0

File tree

10 files changed

+37
-3
lines changed

10 files changed

+37
-3
lines changed

Diff for: lldb/include/lldb/Utility/ArchSpec.h

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class ArchSpec {
111111
eSBFSubType_sbfv1,
112112
eSBFSubType_sbfv2,
113113
eSBFSubType_sbfv3,
114+
eSBFSubType_sbfv4,
114115
};
115116

116117
enum RISCVSubType {
@@ -240,6 +241,7 @@ class ArchSpec {
240241
eCore_sbfv1,
241242
eCore_sbfv2,
242243
eCore_sbfv3,
244+
eCore_sbfv4,
243245

244246
kNumCores,
245247

Diff for: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ static uint32_t sbfVariantFromElfFlags(const elf::ELFHeader &header) {
258258
return ArchSpec::eSBFSubType_sbfv2;
259259
case llvm::ELF::EF_SBF_V3:
260260
return ArchSpec::eSBFSubType_sbfv3;
261+
case llvm::ELF::EF_SBF_V4:
262+
return ArchSpec::eSBFSubType_sbfv4;
261263
default:
262264
return ArchSpec::eSBFSubType_sbfv0;
263265
}

Diff for: lldb/source/Utility/ArchSpec.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ static const CoreDefinition g_core_definitions[] = {
245245
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv1, "sbfv1"},
246246
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv2, "sbfv2"},
247247
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv3, "sbfv3"},
248+
{eByteOrderLittle, 8, 8, 8, llvm::Triple::sbf, ArchSpec::eCore_sbfv4, "sbfv4"},
248249
};
249250

250251
// Ensure that we have an entry in the g_core_definitions for each core. If you
@@ -439,6 +440,8 @@ static const ArchDefinitionEntry g_elf_arch_entries[] = {
439440
0xFFFFFFFFu, 0xFFFFFFFFu}, // sbfv2
440441
{ArchSpec::eCore_sbfv3, llvm::ELF::EM_SBF, ArchSpec::eSBFSubType_sbfv3,
441442
0xFFFFFFFFu, 0xFFFFFFFFu}, // sbfv3
443+
{ArchSpec::eCore_sbfv4, llvm::ELF::EM_SBF, ArchSpec::eSBFSubType_sbfv4,
444+
0xFFFFFFFFu, 0xFFFFFFFFu}, // sbfv3
442445
};
443446

444447
static const ArchDefinition g_elf_arch_def = {

Diff for: llvm/include/llvm/BinaryFormat/ELF.h

+1
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,7 @@ enum : unsigned {
917917
EF_SBF_V1 = 0x01,
918918
EF_SBF_V2 = 0x02,
919919
EF_SBF_V3 = 0x03,
920+
EF_SBF_V4 = 0x04,
920921
};
921922

922923
// ELF Relocation types for SBF.

Diff for: llvm/lib/Target/SBF/MCTargetDesc/SBFMCTargetDesc.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ static MCStreamer *createSBFMCStreamer(const Triple &T, MCContext &Ctx,
7676
EFlag = llvm::ELF::EF_SBF_V2;
7777
} else if (CPU == "v3") {
7878
EFlag = llvm::ELF::EF_SBF_V3;
79+
} else if (CPU == "v4") {
80+
EFlag = llvm::ELF::EF_SBF_V4;
7981
}
8082
S->getWriter().setELFHeaderEFlags(EFlag);
8183

Diff for: llvm/lib/Target/SBF/SBFSubtarget.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ void SBFSubtarget::initializeEnvironment(const Triple &TT) {
4343
assert(TT.getArch() == Triple::sbf && "expected Triple::sbf");
4444
UseDwarfRIS = false;
4545

46-
// SBFv2 features
46+
// New SBF features
4747
HasJmpExt = false;
4848
HasDynamicFrames = false;
4949
DisableNeg = false;
@@ -56,6 +56,7 @@ void SBFSubtarget::initializeEnvironment(const Triple &TT) {
5656
HasExplicitSignExt = false;
5757
NewMemEncoding = false;
5858
HasStaticSyscalls = false;
59+
IsAbiV2 = false;
5960
}
6061

6162
void SBFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {

Diff for: llvm/lib/Target/SBF/SBFSubtarget.h

+3
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ class SBFSubtarget : public SBFGenSubtargetInfo {
8888
// Whether we enable the new encoding for memory instructions
8989
bool NewMemEncoding;
9090

91+
// Whether we are using AbiV2
92+
bool IsAbiV2;
93+
9194
std::unique_ptr<CallLowering> CallLoweringInfo;
9295
std::unique_ptr<InstructionSelector> InstSelector;
9396
std::unique_ptr<LegalizerInfo> Legalizer;

Diff for: llvm/lib/Target/SBF/SBFTargetFeatures.td

+12-1
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,26 @@ def FeatureNewMemEncoding : SubtargetFeature<"mem-encoding", "NewMemEncoding",
5252
def FeatureJumpExt : SubtargetFeature<"jmp-ext", "HasJmpExt",
5353
"true", "Enable jumps with less than and less than or equal">;
5454

55+
def FeatureAbiV2 : SubtargetFeature<"abi-v2", "IsAbiV2",
56+
"true", "Enables AbiV2 in SBF (no-op in LLVM)">;
57+
58+
5559
class Proc<string Name, list<SubtargetFeature> Features>
5660
: Processor<Name, NoItineraries, Features>;
5761

5862
def : Proc<"generic", []>;
5963

6064
def : Proc<"v1", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt]>;
65+
6166
def : Proc<"v2", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt, FeatureDisableLddw,
6267
FeatureNewMemEncoding, FeatureCallxRegSrc, FeaturePqrInstr, FeatureExplicitSext,
6368
FeatureDisableNeg, FeatureReverseSubImm, ALU32]>;
69+
6470
def : Proc<"v3", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt, FeatureDisableLddw,
6571
FeatureNewMemEncoding, FeatureCallxRegSrc, FeaturePqrInstr, FeatureExplicitSext,
66-
FeatureDisableNeg, FeatureReverseSubImm, ALU32, FeatureStaticSyscalls, FeatureRelocAbs64]>;
72+
FeatureDisableNeg, FeatureReverseSubImm, ALU32, FeatureStaticSyscalls, FeatureRelocAbs64]>;
73+
74+
def : Proc<"v4", [FeatureDynamicFrames, FeatureStoreImm, FeatureJumpExt, FeatureDisableLddw,
75+
FeatureNewMemEncoding, FeatureCallxRegSrc, FeaturePqrInstr, FeatureExplicitSext,
76+
FeatureDisableNeg, FeatureReverseSubImm, ALU32, FeatureStaticSyscalls, FeatureRelocAbs64,
77+
FeatureAbiV2]>;

Diff for: llvm/test/MC/SBF/elf-flags.s

+7-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
# RUN: llvm-mc -triple=sbpfv3-solana-solana -filetype=obj < %s \
2323
# RUN: | llvm-readobj --file-headers - \
2424
# RUN: | FileCheck -check-prefix=CHECK-SBFV3 %s
25-
25+
# RUN: llvm-mc -triple=sbf-solana-solana -mcpu=v4 -filetype=obj < %s \
26+
# RUN: | llvm-readobj --file-headers - \
27+
# RUN: | FileCheck -check-prefix=CHECK-SBFV4 %s
2628

2729
# CHECK-NONE: Flags [ (0x0)
2830
# CHECK-NONE-NEXT: ]
@@ -40,4 +42,8 @@
4042
# CHECK-SBFV3-NEXT: 0x2
4143
# CHECK-SBFV3-NEXT: ]
4244

45+
# CHECK-SBFV4: Flags [ (0x4)
46+
# CHECK-SBFV4-NEXT: 0x4
47+
# CHECK-SBFV4-NEXT: ]
48+
4349
mov64 r0, r0

Diff for: llvm/tools/llvm-objdump/llvm-objdump.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -2597,6 +2597,9 @@ static void disassembleObject(ObjectFile *Obj, bool InlineRelocs) {
25972597
case llvm::ELF::EF_SBF_V3:
25982598
MCPU = "v3";
25992599
break;
2600+
case llvm::ELF::EF_SBF_V4:
2601+
MCPU = "v4";
2602+
break;
26002603
default:
26012604
MCPU = "generic";
26022605
break;

0 commit comments

Comments
 (0)