[PATCH] D89130: [WIP][Sparc] Fix long double on 32-bit Solaris/SPARC

Eli Friedman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 9 12:12:00 PDT 2020


efriedma added a comment.

SparcTargetLowering::LowerCall_32 is Sparc-specific code.  Maybe you can take a look at where it's crashing, and ask some more specific question?

The compiler-rt requirement for __uint128_t is a bit inconvenient, I guess; maybe it could be changed, but that's probably an invasive patch.

Please split the compiler-rt changes into a separate patch; whether compiler-rt provides long double routines is separate from whether the compiler can generate calls to them.  (For example, you might use clang and link against libgcc.)



================
Comment at: llvm/lib/Target/Sparc/SparcCallingConv.td:30
   // Alternatively, they are assigned to the stack in 4-byte aligned units.
   CCAssignToStack<4, 4>
 ]>;
----------------
Maybe worth adding code to use CCPassIndirect for f128?  Might allow you to simplify the clang handling.


================
Comment at: llvm/lib/Target/Sparc/SparcCallingConv.td:38
+  CCIfInReg<CCIfType<[f128] , CCAssignToReg<[Q0, Q1]>>>,
+  CCIfType<[f128], CCAssignToStack<16, 8>>,
   CCIfType<[v2i32], CCCustom<"CC_Sparc_Assign_Ret_Split_64">>
----------------
CCAssignToStack is used to pass values directly on the stack; I have no idea what it would mean on a return value.  Are you sure you don't want to just fall back to the default handling, which returns the value indirectly?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89130/new/

https://reviews.llvm.org/D89130



More information about the cfe-commits mailing list