Bug 109067 - Powerpc GCC does not support __ibm128 complex multiply/divide if long double is IEEE 128-bit.
Summary: Powerpc GCC does not support __ibm128 complex multiply/divide if long double ...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 13.0
: P3 normal
Target Milestone: ---
Assignee: Michael Meissner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-03-08 19:13 UTC by Michael Meissner
Modified: 2023-04-11 14:15 UTC (History)
4 users (show)

See Also:
Host: powerpc64le-unknown-linux-gnu
Target: powerpc64le-unknown-linux-gnu
Build: powerpc64le-unknown-linux-gnu
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Meissner 2023-03-08 19:13:16 UTC

    
Comment 1 Segher Boessenkool 2023-03-08 19:41:03 UTC
Do you have a testcase please?
Comment 2 GCC Commits 2023-03-20 18:48:51 UTC
The master branch has been updated by Michael Meissner <meissner@gcc.gnu.org>:

https://gcc.gnu.org/g:c67f312d20e15e5aa18c587693b4ab7e131596c1

commit r13-6763-gc67f312d20e15e5aa18c587693b4ab7e131596c1
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Mon Mar 20 14:48:06 2023 -0400

    Rework 128-bit complex multiply and divide.
    
    This patch reworks how the complex multiply and divide built-in functions are
    done.  Previously GCC created built-in declarations for doing long double complex
    multiply and divide when long double is IEEE 128-bit.  However, it did not
    support __ibm128 complex multiply and divide if long double is IEEE 128-bit.
    
    This code does not create the built-in declaration with the changed name.
    Instead, it uses the TARGET_MANGLE_DECL_ASSEMBLER_NAME hook to change the name
    before it is written out to the assembler file like it now does for all of the
    other long double built-in functions.
    
    2023-03-20   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            PR target/109067
            * config/rs6000/rs6000.cc (create_complex_muldiv): Delete.
            (init_float128_ieee): Delete code to switch complex multiply and divide
            for long double.
            (complex_multiply_builtin_code): New helper function.
            (complex_divide_builtin_code): Likewise.
            (rs6000_mangle_decl_assembler_name): Add support for mangling the name
            of complex 128-bit multiply and divide built-in functions.
    
    gcc/testsuite/
    
            PR target/109067
            * gcc.target/powerpc/divic3-1.c: New test.
            * gcc.target/powerpc/divic3-2.c: Likewise.
            * gcc.target/powerpc/mulic3-1.c: Likewise.
            * gcc.target/powerpc/mulic3-2.c: Likewise.
Comment 3 GCC Commits 2023-04-11 02:53:22 UTC
The releases/gcc-12 branch has been updated by Michael Meissner <meissner@gcc.gnu.org>:

https://gcc.gnu.org/g:908d9c7e6ed4be95d39b7b01056dda365f379947

commit r12-9394-g908d9c7e6ed4be95d39b7b01056dda365f379947
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Mon Apr 10 22:46:34 2023 -0400

    Backport from master
    
    2023-04-10  Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            PR target/109067
            * config/rs6000/rs6000.cc (create_complex_muldiv): Delete.
            (init_float128_ieee): Delete code to switch complex multiply and divide
            for long double.  Backport from master, 3/20/2023.
            (complex_multiply_builtin_code): New helper function.
            (complex_divide_builtin_code): Likewise.
            (rs6000_mangle_decl_assembler_name): Add support for mangling the name
            of complex 128-bit multiply and divide built-in functions.
    
    gcc/testsuite/
    
            PR target/109067
            * gcc.target/powerpc/divic3-1.c: New test.  Backport from master,
            3/20/2023.
            * gcc.target/powerpc/divic3-2.c: Likewise.
            * gcc.target/powerpc/mulic3-1.c: Likewise.
            * gcc.target/powerpc/mulic3-2.c: Likewise.
Comment 4 GCC Commits 2023-04-11 14:14:02 UTC
The releases/gcc-11 branch has been updated by Michael Meissner <meissner@gcc.gnu.org>:

https://gcc.gnu.org/g:5a15a78b919c43954fbfcc90f53f34d7e2700c97

commit r11-10618-g5a15a78b919c43954fbfcc90f53f34d7e2700c97
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Tue Apr 11 10:11:53 2023 -0400

    Backport from master
    
    2023-04-11  Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            PR target/109067
            * config/rs6000/rs6000.c (create_complex_muldiv): Delete.
            (init_float128_ieee): Delete code to switch complex multiply and divide
            for long double.  Backport from master, 3/20/2023.
            (complex_multiply_builtin_code): New helper function.
            (complex_divide_builtin_code): Likewise.
            (rs6000_mangle_decl_assembler_name): Add support for mangling the name
            of complex 128-bit multiply and divide built-in functions.
    
    gcc/testsuite/
    
            PR target/109067
            * gcc.target/powerpc/divic3-1.c: New test.  Backport from master,
            3/20/2023.
            * gcc.target/powerpc/divic3-2.c: Likewise.
            * gcc.target/powerpc/mulic3-1.c: Likewise.
            * gcc.target/powerpc/mulic3-2.c: Likewise.
Comment 5 Michael Meissner 2023-04-11 14:15:53 UTC
Trunk patched on March 20th, 2023.
Gcc 12 patched on April 10th, 2023.
Gcc 11 patched on April 11th, 2023.