[Bug target/102166] [i386] AMX intrinsics and macros not defined in C++

thiago at kde dot org gcc-bugzilla@gcc.gnu.org
Wed Sep 1 22:33:23 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102166

Thiago Macieira <thiago at kde dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hjl.tools at gmail dot com

--- Comment #1 from Thiago Macieira <thiago at kde dot org> ---
I don't understand how this compiles in C mode:

$ gcc -O2 -Werror=implicit-function-declaration -c -xc test.cpp
$ gcc -O2 -fno-asynchronous-unwind-tables  -S -o - -xc test.cpp    
        .file   "test.cpp"
        .text
        .p2align 4
        .globl  avx
        .type   avx, @function
avx:
        vzeroall
        ret
        .size   avx, .-avx
        .p2align 4
        .globl  amx
        .type   amx, @function
amx:
        xorl    %eax, %eax
#APP
# 10 "test.cpp" 1
        tileloadd       (%rax,%rax,1), %tmm0
# 0 "" 2
# 56 "/usr/lib64/gcc/x86_64-generic-linux/11/include/amxtileintrin.h" 1
        tilerelease
# 0 "" 2
#NO_APP
        ret
        .size   amx, .-amx

The comments in the assembly output indicate that _tile_loadd is a macro that
was expanded from test.cpp and that _tile_release is a function in
amxtileintrin.h.

But neither is defined.

$ gcc -E -xc test.cpp | grep -e _tile_loadd -e _tile_release        
    _tile_loadd(0, 0, 0);
    _tile_release();

Whatever they are, they are not visible to the preprocessor.


More information about the Gcc-bugs mailing list