[PATCH] D123200: [compiler-rt][builtins] Add several helper functions for AVR
Ben Shi via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 5 20:07:29 PDT 2022
benshi001 added a comment.
In D123200#3495356 <https://reviews.llvm.org/D123200#3495356>, @aykevl wrote:
> @benshi001 I have been looking through the GCC code and I think avr-gcc also has a special calling convention for many other functions, including `__mulqi3` and `__mulhi3`.
>
> Source:
>
> 1. I think this is where the ABI is specified in the compiler: https://github.com/gcc-mirror/gcc/blob/releases/gcc-5.4.0/gcc/config/avr/avr.md#L1543-L1549 You can see that it multiplies R24 with R22 and stores the result in R24, and clobbers R22 in the process. But no other registers.
> 2. In this code sample <https://godbolt.org/z/cPE5ajrbv>, avr-gcc doesn't save `char c` (`r20`) across the `__mulqi3` and `__mulhi3` calls, which is normally call-clobbered.
>
> Therefore, I think we need to be a bit more careful with defining these AVR builtins and check the ABI in avr-gcc first.
> Also, we can make use of this and optimize the AVR backend more (you can see that the Clang generated code is much worse than avr-gcc in the above examples).
Let us discuss that at https://github.com/llvm/llvm-project/issues/55279
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D123200/new/
https://reviews.llvm.org/D123200
More information about the cfe-commits
mailing list