aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorZarko Todorovski <zarko@ca.ibm.com>2021-06-10 16:49:51 -0400
committerZarko Todorovski <zarko@ca.ibm.com>2021-06-11 07:19:10 -0400
commitc1bb75febe9d1176748f524324b5528347342166 (patch)
tree44e4e5d1db7860146f6d4835963442fe85dbf4de /clang/lib/CodeGen/CodeGenModule.cpp
parent8dc2c1a0abdd52eadb12e8ae3b75f1eb8becc25c (diff)
downloadllvm-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