[flang-commits] [flang] [flang][MIPS] Add N32 and N64 target ABI support (PR #224920)
Jiaxun Yang via flang-commits
flang-commits at lists.llvm.org
Thu Sep 24 02:50:53 PDT 2026
================
@@ -1409,6 +1411,87 @@ struct TargetSparcV9 : public GenericTarget<TargetSparcV9> {
};
} // namespace
+//===----------------------------------------------------------------------===//
+// MIPS N32 and N64 target specifics.
+//===----------------------------------------------------------------------===//
+
+namespace {
+struct TargetMips64 : public GenericTarget<TargetMips64> {
+ using GenericTarget::GenericTarget;
+
+ const int defaultWidth = targetABI == "n32" ? 32 : 64;
+
+ CodeGenSpecifics::Marshalling
+ complexArgumentType(mlir::Location loc, mlir::Type eleTy) const override {
+ return complexArgumentType(loc, eleTy, {});
+ }
+
+ CodeGenSpecifics::Marshalling
+ complexArgumentType(mlir::Location loc, mlir::Type eleTy,
+ const Marshalling &previousArguments) const override {
+ const auto *sem = &floatToSemantics(kindMap, eleTy);
+ if (sem != &llvm::APFloat::IEEEsingle() &&
+ sem != &llvm::APFloat::IEEEdouble())
+ typeTodo(sem, loc, "argument");
+
+ // N32/N64 share eight argument slots between integer and floating-point
+ // registers. A complex argument uses two FPRs when both parts fit.
+ // Otherwise, pass its memory representation in GPRs or on the stack,
+ // packing COMPLEX(4) into one slot.
+ uint64_t slots = 0;
+ for (auto [ty, attr] : previousArguments) {
+ if (attr.isAppend())
+ continue;
+ if (fir::conformsWithPassByRef(ty)) {
+ if (++slots >= 7)
----------------
FlyGoat wrote:
Yes, for N32 slots are 64bit.
https://github.com/llvm/llvm-project/pull/224920
More information about the flang-commits
mailing list