]> git.ipfire.org Git - thirdparty/gcc.git/commit
i386: Support C++ template parameters in AMX intrinsics [PR122446]
authorHu, Lin1 <lin1.hu@intel.com>
Tue, 28 Oct 2025 08:11:47 +0000 (16:11 +0800)
committerHu, Lin1 <lin1.hu@intel.com>
Tue, 11 Nov 2025 05:37:46 +0000 (13:37 +0800)
commit87f9ff6798d4004cde6a56665dbd424e6f28ff6e
treef8ba0be91e24e6d706bbe5e362667aaa75f99c96
parentb99eddbe7c8805d8543c31ed58d0c77d986dcdb3
i386: Support C++ template parameters in AMX intrinsics [PR122446]

The AMX intrinsics previously used string concatenation with the '#'
operator to construct register names, which prevented their use with
C++ template non-type parameters. This patch converts all AMX intrinsics
to use inline assembly constraints with the %c format specifier.

And Intel style registers also have % prefix, update Intel syntax to use plain
register names without % preifx.

gcc/ChangeLog:

PR target/122446
* config/i386/amxavx512intrin.h (_tile_cvtrowps2bf16hi_internal):
Input register name by inline asm %c[...], and remove %% before tmm
from intel side.
(_tile_cvtrowps2bf16li_internal): Ditto.
* config/i386/amxbf16intrin.h (_tile_dpbf16ps_internal): Ditto
* config/i386/amxcomplexintrin.h (_tile_cmmimfp16ps_internal): Ditto
(_tile_cmmrlfp16ps_internal): Ditto
(_tile_cmmimfp16ps): Ditto
(_tile_cmmrlfp16ps): Ditto
* config/i386/amxfp16intrin.h (_tile_dpfp16ps_internal): Ditto
(_tile_dpfp16ps): Ditto
* config/i386/amxfp8intrin.h (_tile_dpbf8ps_internal): Ditto
(_tile_dpbhf8ps_internal): Ditto
(_tile_dphbf8ps_internal): Ditto
(_tile_dphf8ps_internal): Ditto
(_tile_dpbf8ps): Ditto
(_tile_dpbhf8ps): Ditto
(_tile_dphbf8ps): Ditto
(_tile_dphf8ps): Ditto
* config/i386/amxint8intrin.h (_tile_int8_dp_internal): Ditto
* config/i386/amxmovrsintrin.h (_tile_loaddrs_internal): Ditto
(_tile_loaddrst1_internal): Ditto
(_tile_loaddrs): Ditto
(_tile_loaddrst1): Ditto
* config/i386/amxtf32intrin.h (_tile_mmultf32ps_internal): Ditto
* config/i386/amxtileintrin.h (_tile_loadd): Ditto
(_tile_loadd_internal): Ditto
(_tile_stream_loadd): Ditto
(_tile_stream_loadd_internal): Ditto
(_tile_stored): Ditto
(_tile_stored_internal): Ditto
(_tile_zero): Ditto
(_tile_zero_internal): Ditto

gcc/testsuite/ChangeLog:

PR target/122446
* gcc.target/i386/amxbf16-asmintel-1.c: Modify dg-final to check intel
form.
* gcc.target/i386/amxcomplex-asmintel-1.c: Ditto.
* gcc.target/i386/amxfp16-asmintel-1.c: Ditto.
* gcc.target/i386/amxfp8-asmintel-1.c: Ditto.
* gcc.target/i386/amxint8-asmintel-1.c: Ditto.
* gcc.target/i386/amxmovrs-asmintel-1.c: Ditto.
* gcc.target/i386/amxtf32-asmintel-1.c: Ditto.
* gcc.target/i386/amxtile-asmintel-1.c: Ditto.
* g++.target/i386/pr122446-1.C: New test.
* g++.target/i386/pr122446-amxavx512.C: Ditto.
* g++.target/i386/pr122446-amxbf16.C: Ditto.
* g++.target/i386/pr122446-amxcomplex.C: Ditto.
* g++.target/i386/pr122446-amxfp16.C: Ditto.
* g++.target/i386/pr122446-amxfp8.C: Ditto.
* g++.target/i386/pr122446-amxint8.C: Ditto.
* g++.target/i386/pr122446-amxmovrs.C: Ditto.
* g++.target/i386/pr122446-amxtf32.C: Ditto.
* g++.target/i386/pr122446-amxtile.C: Ditto.
27 files changed:
gcc/config/i386/amxavx512intrin.h
gcc/config/i386/amxbf16intrin.h
gcc/config/i386/amxcomplexintrin.h
gcc/config/i386/amxfp16intrin.h
gcc/config/i386/amxfp8intrin.h
gcc/config/i386/amxint8intrin.h
gcc/config/i386/amxmovrsintrin.h
gcc/config/i386/amxtf32intrin.h
gcc/config/i386/amxtileintrin.h
gcc/testsuite/g++.target/i386/pr122446-1.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxavx512.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxbf16.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxcomplex.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxfp16.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxfp8.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxint8.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxmovrs.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxtf32.C [new file with mode: 0644]
gcc/testsuite/g++.target/i386/pr122446-amxtile.C [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/amxbf16-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxfp16-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxfp8-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxint8-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxmovrs-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxtf32-asmintel-1.c
gcc/testsuite/gcc.target/i386/amxtile-asmintel-1.c