diff options
author | Zarko Todorovski <zarko@ca.ibm.com> | 2021-06-10 16:49:51 -0400 |
---|---|---|
committer | Zarko Todorovski <zarko@ca.ibm.com> | 2021-06-11 07:19:10 -0400 |
commit | c1bb75febe9d1176748f524324b5528347342166 (patch) | |
tree | 44e4e5d1db7860146f6d4835963442fe85dbf4de /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 8dc2c1a0abdd52eadb12e8ae3b75f1eb8becc25c (diff) | |
download | llvm-c1bb75febe9d1176748f524324b5528347342166.zip llvm-c1bb75febe9d1176748f524324b5528347342166.tar.gz llvm-c1bb75febe9d1176748f524324b5528347342166.tar.bz2 |
[PowerPC] Allow wa inline asm to also accept floating point arguments
GCC documentation for the `wa` constraint states that:
```
wa
A VSX register (VSR), vs0…vs63. This is either an FPR (vs0…vs31 are f0…f31)
or a VR (vs32…vs63 are v0…v31).
```
This technically means that we could accept floating point parameters. In fact,
gcc itself does. The following testcase compiles and runs on all PPC platforms with GCC,
whereas clang/llc will assert:
```
#include <stdio.h>
double foo ( vector double a ) {
double b, c;
asm("xvabsdp %x0, %x2 \n"
"xxsldwi %x1, %x0, %x0, 2 \n"
: "+wa" (b),
"=wa" (c)
: "wa" (a)
);
return b+c;
}
int main(void) {
vector double a = {-3., -4.};
double t = foo( a );
printf("%g\n", t);
}
```
This patch allows clang/llc to build and run this testcase.
Reviewed By: nemanjai, #powerpc
Differential Revision: https://reviews.llvm.org/D103409
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions