Commit e18048a
committed
Give the GNU and AEABI functions the right ABIs
A buildbot reported a failure in a hardfp build, related to ABI: the
test was calling __mulsf3 and passing arguments in s0/s1, but the code
inside __mulsf3 was reading them out of r0/r1.
The ABI using GPRs is correct for __aeabi_fmul, but not for __mulsf3,
which takes float arguments in accordance with whatever the normal ABI
is. So in hardfp, the two functions behave differently.
The obvious question is why anyone is linking this function in to a
hardfp build in the first place - surely in a hardfp context clients
would just use a vmul instruction instead of calling either of these
entry points? But there seems to be no provision in
builtins/CMakeLists.txt for leaving things out of hardfp builds. The
generic __mulsf3.c is still included in a hardfp builtins library. So
I've stuck with those basic premises, and just corrected my
replacement functions to get the ABIs right.1 parent 85e0ce8 commit e18048a
2 files changed
+26
-6
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
23 | | - | |
| 22 | + | |
24 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
25 | 35 | | |
26 | 36 | | |
27 | 37 | | |
| |||
603 | 613 | | |
604 | 614 | | |
605 | 615 | | |
606 | | - | |
| 616 | + | |
607 | 617 | | |
608 | 618 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
23 | | - | |
| 22 | + | |
24 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
25 | 35 | | |
26 | 36 | | |
27 | 37 | | |
| |||
304 | 314 | | |
305 | 315 | | |
306 | 316 | | |
307 | | - | |
| 317 | + | |
308 | 318 | | |
309 | 319 | | |
0 commit comments