pratlucas added a comment.

> Oh, wait, AAPCS wants half values to be passed in the *least* significant 
> bits of a GPR, even on big-endian machines? That's certainly more convenient, 
> but it's a weird inconsistency with the otherwise iron rule of the calling 
> convention, which that it's exactly as if you laid all of the arguments out 
> in memory and then popped the first four 32-bit values off. We're talking 
> about a calling convention here that literally skips registers in order to 
> "align" arguments.
> 
> Can we not just coerce to i16? Will LLVM not pass an i16 in the 
> least-significant bits of a register?

Yes, AAPCS specifies that they should go into the LSBs:

> B.2 [...]  If the argument is a Half-precision Floating Point Type its size 
> is set to 4 bytes as if it had been copied to the least significant bits of a 
> 32-bit register and the remaining bits filled with unspecified values.

Coercing to i16 solves it for the general case, when the argumetns are going 
into GPRs, but is not suficient when those arguments are required to go into FP 
registers - e.g. `-mfloat-abi=hard`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D75169



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to