SubtargetFeatures getMIPSFeatures() const;
SubtargetFeatures getARMFeatures() const;
SubtargetFeatures getRISCVFeatures() const;
+ SubtargetFeatures getLoongArchFeatures() const;
StringRef getAMDGPUCPUName() const;
break;
case ELF::EM_BPF:
break;
+ case ELF::EM_LOONGARCH:
+ return ELF::R_LARCH_RELATIVE;
default:
break;
}
return Features;
}
+SubtargetFeatures ELFObjectFileBase::getLoongArchFeatures() const {
+ SubtargetFeatures Features;
+
+ switch (getPlatformFlags() & ELF::EF_LOONGARCH_ABI_MODIFIER_MASK) {
+ case ELF::EF_LOONGARCH_ABI_SOFT_FLOAT:
+ break;
+ case ELF::EF_LOONGARCH_ABI_DOUBLE_FLOAT:
+ Features.AddFeature("d");
+ // D implies F according to LoongArch ISA spec.
+ [[fallthrough]];
+ case ELF::EF_LOONGARCH_ABI_SINGLE_FLOAT:
+ Features.AddFeature("f");
+ break;
+ }
+
+ return Features;
+}
+
SubtargetFeatures ELFObjectFileBase::getFeatures() const {
switch (getEMachine()) {
case ELF::EM_MIPS:
return getARMFeatures();
case ELF::EM_RISCV:
return getRISCVFeatures();
+ case ELF::EM_LOONGARCH:
+ return getLoongArchFeatures();
default:
return SubtargetFeatures();
}
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --show-encoding --defsym=LA64=1 \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM,ASM-AND-OBJ64,ASM64 %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+d --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+d --filetype=obj --defsym=LA64=1 \
-# RUN: | llvm-objdump -d --mattr=+d - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM-AND-OBJ64 %s
## Support for the 'D' extension implies support for 'F'
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: fadd.s $fs5, $ft7, $fs1
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: fldgt.s $fa3, $s4, $t1
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: bceqz $fcc6, 12
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: fcmp.caf.s $fcc0, $fa0, $fa1
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: ffint.s.w $fs6, $fa5
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: fld.s $ft15, $t3, 250
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --show-encoding \
# RUN: | FileCheck --check-prefixes=ASM-AND-OBJ,ASM %s
# RUN: llvm-mc %s --triple=loongarch32 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --mattr=+f --filetype=obj \
-# RUN: | llvm-objdump -d --mattr=+f - \
+# RUN: | llvm-objdump -d - \
# RUN: | FileCheck --check-prefix=ASM-AND-OBJ %s
# ASM-AND-OBJ: fmov.s $ft5, $ft15
TEST(ELFTest, getELFRelativeRelocationType) {
EXPECT_EQ(ELF::R_VE_RELATIVE, getELFRelativeRelocationType(EM_VE));
+ EXPECT_EQ(ELF::R_LARCH_RELATIVE, getELFRelativeRelocationType(EM_LOONGARCH));
}
// This is a test for the DataRegion helper struct, defined in ELF.h header.