clang 24.0.0git
amxavx512intrin.h
Go to the documentation of this file.
1/*===--------------------- amxavx512intrin.h - AMXAVX512 --------------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===------------------------------------------------------------------------===
8 */
9#ifndef __IMMINTRIN_H
10#error "Never use <amxavx512intrin.h> directly; include <immintrin.h> instead."
11#endif // __IMMINTRIN_H
12
13#ifndef __AMX_AVX512INTRIN_H
14#define __AMX_AVX512INTRIN_H
15#if defined(__x86_64__) && defined(__SSE2__)
16
17#define __DEFAULT_FN_ATTRS_AVX512 \
18 __attribute__((__always_inline__, __nodebug__, \
19 __target__("amx-avx512,avx10.2"), __min_vector_width__(512)))
20
21/// Moves a row from a tile register to a zmm destination register, converting
22/// the int32 source elements to fp32. The row of the tile is selected by a
23/// 32b GPR.
24///
25/// \headerfile <x86intrin.h>
26///
27/// \code
28/// __m512i _tile_cvtrowd2ps(__tile tsrc, unsigned int row);
29/// \endcode
30///
31/// \code{.operation}
32/// VL := 512
33/// VL_bytes := VL >> 3
34/// row_index := row & 0xf
35/// IF row_index >= tsrc.rows
36/// dst[VL-1:0] := 0
37/// ELSE
38/// FOR i := 0 TO (VL_bytes / 4) - 1
39/// IF i >= tsrc.colsb / 4
40/// dst.dword[i] := 0
41/// ELSE
42/// dst.f32[i] := CONVERT_INT32_TO_FP32(tsrc.row[row_index].dword[i], RNE)
43/// FI
44/// ENDFOR
45/// FI
46/// zero_tileconfig_start()
47/// \endcode
48///
49/// This intrinsic corresponds to the \c TCVTROWD2PS instruction.
50///
51/// \param tsrc
52/// The source tile. Max size is 1024 Bytes.
53/// \param row
54/// The row of the source tile
55#define _tile_cvtrowd2ps(tsrc, row) __builtin_ia32_tcvtrowd2ps(tsrc, row)
56
57/// Moves a row from a tile register to a zmm destination register, converting
58/// the int32 source elements to fp32. The row of the tile is selected by a
59/// 8b immediate value.
60///
61/// \headerfile <x86intrin.h>
62///
63/// \code
64/// __m512i _tile_cvtrowd2psi(__tile tsrc, const unsigned int imm8);
65/// \endcode
66///
67/// \code{.operation}
68/// VL := 512
69/// VL_bytes := VL >> 3
70/// row_index := imm8 & 0xf
71/// IF row_index >= tsrc.rows
72/// dst[VL-1:0] := 0
73/// ELSE
74/// FOR i := 0 TO (VL_bytes / 4) - 1
75/// IF i >= tsrc.colsb / 4
76/// dst.dword[i] := 0
77/// ELSE
78/// dst.f32[i] := CONVERT_INT32_TO_FP32(tsrc.row[row_index].dword[i], RNE)
79/// FI
80/// ENDFOR
81/// FI
82/// zero_tileconfig_start()
83/// \endcode
84///
85/// This intrinsic corresponds to the \c TCVTROWD2PS instruction.
86///
87/// \param tsrc
88/// The source tile. Max size is 1024 Bytes.
89/// \param imm8
90/// The row of the source tile
91#define _tile_cvtrowd2psi(tsrc, imm8) __builtin_ia32_tcvtrowd2psi(tsrc, imm8)
92
93/// Moves a row from a tile register to a zmm destination register, converting
94/// the fp32 source elements to bf16. It places the resulting bf16 elements
95/// in the high 16 bits within each dword. The row of the tile is selected
96/// by a 32b GPR.
97///
98/// \headerfile <x86intrin.h>
99///
100/// \code
101/// __m512i _tile_cvtrowps2bf16h(__tile tsrc, unsigned int row);
102/// \endcode
103///
104/// \code{.operation}
105/// VL := 512
106/// VL_bytes := VL >> 3
107/// row_index := row & 0xf
108/// IF row_index >= tsrc.rows
109/// dst[VL-1:0] := 0
110/// ELSE
111/// FOR i := 0 TO (VL_bytes / 4) - 1
112/// IF i >= tsrc.colsb / 4
113/// dst.dword[i] := 0
114/// ELSE
115/// dst.word[2*i+0] := 0
116/// dst.bf16[2*i+1] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE)
117/// FI
118/// ENDFOR
119/// FI
120/// zero_tileconfig_start()
121/// \endcode
122///
123/// This intrinsic corresponds to the \c TCVTROWPS2BF16H instruction.
124///
125/// \param tsrc
126/// The source tile. Max size is 1024 Bytes.
127/// \param row
128/// The the row of the source tile.
129#define _tile_cvtrowps2bf16h(tsrc, row) \
130 __builtin_ia32_tcvtrowps2bf16h(tsrc, row)
131
132/// Moves a row from a tile register to a zmm destination register, converting
133/// the fp32 source elements to bf16. It places the resulting bf16 elements
134/// in the high 16 bits within each dword. The row of the tile is selected
135/// by a 8b immediate value.
136///
137/// \headerfile <x86intrin.h>
138///
139/// \code
140/// __m512i _tile_cvtrowps2bf16hi(__tile tsrc, const unsigned int imm8);
141/// \endcode
142///
143/// \code{.operation}
144/// VL := 512
145/// VL_bytes := VL >> 3
146/// row_index := imm8 & 0xf
147/// IF row_index >= tsrc.rows
148/// dst[VL-1:0] := 0
149/// ELSE
150/// FOR i := 0 TO (VL_bytes / 4) - 1
151/// IF i >= tsrc.colsb / 4
152/// dst.dword[i] := 0
153/// ELSE
154/// dst.word[2*i+0] := 0
155/// dst.bf16[2*i+1] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE)
156/// FI
157/// ENDFOR
158/// FI
159/// zero_tileconfig_start()
160/// \endcode
161///
162/// This intrinsic corresponds to the \c TCVTROWPS2BF16H instruction.
163///
164/// \param tsrc
165/// The source tile. Max size is 1024 Bytes.
166/// \param imm8
167/// The the row of the source tile.
168#define _tile_cvtrowps2bf16hi(tsrc, imm8) \
169 __builtin_ia32_tcvtrowps2bf16hi(tsrc, imm8)
170
171/// Moves a row from a tile register to a zmm destination register, converting
172/// the fp32 source elements to bf16. It places the resulting bf16 elements
173/// in the low 16 bits within each dword. The row of the tile is selected
174/// by a 32b GPR.
175///
176/// \headerfile <x86intrin.h>
177///
178/// \code
179/// __m512i _tile_cvtrowps2bf16l(__tile tsrc, unsigned int row);
180/// \endcode
181///
182/// \code{.operation}
183/// VL := 512
184/// VL_bytes := VL >> 3
185/// row_index := row & 0xf
186/// IF row_index >= tsrc.rows
187/// dst[VL-1:0] := 0
188/// ELSE
189/// FOR i := 0 TO (VL_bytes / 4) - 1
190/// IF i >= tsrc.colsb / 4
191/// dst.dword[i] := 0
192/// ELSE
193/// dst.word[2*i+1] := 0
194/// dst.bf16[2*i+0] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE)
195/// FI
196/// ENDFOR
197/// FI
198/// zero_tileconfig_start()
199/// \endcode
200///
201/// This intrinsic corresponds to the \c TCVTROWPS2BF16L instruction.
202///
203/// \param tsrc
204/// The source tile. Max size is 1024 Bytes.
205/// \param row
206/// The the row of the source tile.
207#define _tile_cvtrowps2bf16l(tsrc, row) \
208 __builtin_ia32_tcvtrowps2bf16l(tsrc, row)
209
210/// Moves a row from a tile register to a zmm destination register, converting
211/// the fp32 source elements to bf16. It places the resulting bf16 elements
212/// in the low 16 bits within each dword. The row of the tile is selected
213/// by a 8b immediate value.
214///
215/// \headerfile <x86intrin.h>
216///
217/// \code
218/// __m512i _tile_cvtrowps2bf16li(__tile tsrc, const unsigned int imm8);
219/// \endcode
220///
221/// \code{.operation}
222/// VL := 512
223/// VL_bytes := VL >> 3
224/// row_index := imm8 & 0xf
225/// IF row_index >= tsrc.rows
226/// dst[VL-1:0] := 0
227/// ELSE
228/// FOR i := 0 TO (VL_bytes / 4) - 1
229/// IF i >= tsrc.colsb / 4
230/// dst.dword[i] := 0
231/// ELSE
232/// dst.word[2*i+1] := 0
233/// dst.bf16[2*i+0] := CONVERT_FP32_TO_BF16(tsrc.row[row_index].fp32[i], RNE)
234/// FI
235/// ENDFOR
236/// FI
237/// zero_tileconfig_start()
238/// \endcode
239///
240/// This intrinsic corresponds to the \c TCVTROWPS2BF16L instruction.
241///
242/// \param tsrc
243/// The source tile. Max size is 1024 Bytes.
244/// \param imm8
245/// The the row of the source tile.
246#define _tile_cvtrowps2bf16li(tsrc, imm8) \
247 __builtin_ia32_tcvtrowps2bf16li(tsrc, imm8)
248
249/// Moves a row from a tile register to a zmm destination register, converting
250/// the fp32 source elements to fp16. It places the resulting fp16 elements
251/// in the high 16 bits within each dword. The row of the tile is selected
252/// by a 32b GPR.
253///
254/// \headerfile <x86intrin.h>
255///
256/// \code
257/// __m512i _tile_cvtrowps2phh(__tile tsrc, unsigned int row);
258/// \endcode
259///
260/// \code{.operation}
261/// VL := 512
262/// VL_bytes := VL >> 3
263/// row_index := row & 0xf
264/// IF row_index >= tsrc.rows
265/// dst[VL-1:0] := 0
266/// ELSE
267/// FOR i := 0 TO (VL_bytes / 4) - 1
268/// IF i >= tsrc.colsb / 4
269/// dst.dword[i] := 0
270/// ELSE
271/// dst.word[2*i+0] := 0
272/// dst.fp16[2*i+1] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE)
273/// FI
274/// ENDFOR
275/// FI
276/// zero_tileconfig_start()
277/// \endcode
278///
279/// This intrinsic corresponds to the \c TCVTROWPS2PHH instruction.
280///
281/// \param tsrc
282/// The source tile. Max size is 1024 Bytes.
283/// \param row
284/// The the row of the source tile.
285#define _tile_cvtrowps2phh(tsrc, row) __builtin_ia32_tcvtrowps2phh(tsrc, row)
286
287/// Moves a row from a tile register to a zmm destination register, converting
288/// the fp32 source elements to fp16. It places the resulting fp16 elements
289/// in the high 16 bits within each dword. The row of the tile is selected
290/// by a 8b immediate value.
291///
292/// \headerfile <x86intrin.h>
293///
294/// \code
295/// __m512i _tile_cvtrowps2phhi(__tile tsrc, constunsigned int imm8);
296/// \endcode
297///
298/// \code{.operation}
299/// VL := 512
300/// VL_bytes := VL >> 3
301/// row_index := imm8 & 0xf
302/// IF row_index >= tsrc.rows
303/// dst[VL-1:0] := 0
304/// ELSE
305/// FOR i := 0 TO (VL_bytes / 4) - 1
306/// IF i >= tsrc.colsb / 4
307/// dst.dword[i] := 0
308/// ELSE
309/// dst.word[2*i+0] := 0
310/// dst.fp16[2*i+1] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE)
311/// FI
312/// ENDFOR
313/// FI
314/// zero_tileconfig_start()
315/// \endcode
316///
317/// This intrinsic corresponds to the \c TCVTROWPS2PHH instruction.
318///
319/// \param tsrc
320/// The source tile. Max size is 1024 Bytes.
321/// \param imm8
322/// The the row of the source tile.
323#define _tile_cvtrowps2phhi(tsrc, imm8) \
324 __builtin_ia32_tcvtrowps2phhi(tsrc, imm8)
325
326/// Moves a row from a tile register to a zmm destination register, converting
327/// the fp32 source elements to fp16. It places the resulting fp16 elements
328/// in the low 16 bits within each dword. The row of the tile is selected
329/// by a 32b GPR.
330///
331/// \headerfile <x86intrin.h>
332///
333/// \code
334/// __m512i _tile_cvtrowps2phl(__tile tsrc, unsigned int row);
335/// \endcode
336///
337/// \code{.operation}
338/// VL := 512
339/// VL_bytes := VL >> 3
340/// row_index := row & 0xf
341/// IF row_index >= tsrc.rows
342/// dst[VL-1:0] := 0
343/// ELSE
344/// FOR i := 0 TO (VL_bytes / 4) - 1
345/// IF i >= tsrc.colsb / 4
346/// dst.dword[i] := 0
347/// ELSE
348/// dst.word[2*i+1] := 0
349/// dst.fp16[2*i+0] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE)
350/// FI
351/// ENDFOR
352/// FI
353/// zero_tileconfig_start()
354/// \endcode
355///
356/// This intrinsic corresponds to the \c TCVTROWPS2PHL instruction.
357///
358/// \param tsrc
359/// The source tile. Max size is 1024 Bytes.
360/// \param row
361/// The the row of the source tile.
362#define _tile_cvtrowps2phl(tsrc, row) __builtin_ia32_tcvtrowps2phl(tsrc, row)
363
364/// Moves a row from a tile register to a zmm destination register, converting
365/// the fp32 source elements to fp16. It places the resulting fp16 elements
366/// in the low 16 bits within each dword. The row of the tile is selected
367/// by a 8b immediate value.
368///
369/// \headerfile <x86intrin.h>
370///
371/// \code
372/// __m512i _tile_cvtrowps2phli(__tile tsrc, const unsigned int imm8);
373/// \endcode
374///
375/// \code{.operation}
376/// VL := 512
377/// VL_bytes := VL >> 3
378/// row_index := imm8 & 0xf
379/// IF row_index >= tsrc.rows
380/// dst[VL-1:0] := 0
381/// ELSE
382/// FOR i := 0 TO (VL_bytes / 4) - 1
383/// IF i >= tsrc.colsb / 4
384/// dst.dword[i] := 0
385/// ELSE
386/// dst.word[2*i+1] := 0
387/// dst.fp16[2*i+0] := CONVERT_FP32_TO_FP16(tsrc.row[row_index].fp32[i], RNE)
388/// FI
389/// ENDFOR
390/// FI
391/// zero_tileconfig_start()
392/// \endcode
393///
394/// This intrinsic corresponds to the \c TCVTROWPS2PHL instruction.
395///
396/// \param tsrc
397/// The source tile. Max size is 1024 Bytes.
398/// \param imm8
399/// The the row of the source tile.
400#define _tile_cvtrowps2phli(tsrc, imm8) \
401 __builtin_ia32_tcvtrowps2phli(tsrc, imm8)
402
403/// Move one row of a tile data to a v16f32 data.
404/// The row of the tile is selected by a 32b GPR.
405///
406/// \headerfile <immintrin.h>
407///
408/// \code
409/// __m512 _tile_movrow(__tile a, unsigned b);
410/// \endcode
411///
412/// This intrinsic corresponds to the <c> TILEMOVROW </c> instruction.
413///
414/// \param a
415/// The 1st source tile. Max size is 1024 Bytes.
416/// \param b
417/// The 2nd source r32. Size is 4 Bytes.
418/// \returns
419/// The destination v16f32 data. Size is 64 Bytes.
420///
421/// \code{.operation}
422/// VL := 512
423/// VL_bytes := VL>>3
424/// row_index := b&0xf
425/// IF row_index >= a.rows
426/// dst[VL-1:0] := 0
427/// ELSE
428/// FOR i := 0 TO (VL_bytes-1)
429/// IF (i >= a.colsb)
430/// dst.byte[i] := 0
431/// ELSE
432/// dst.byte[i] := a.row[row_index].byte[i]
433/// ENDFOR
434/// FI
435/// \endcode
436#define _tile_movrow(a, b) ((__m512i)__builtin_ia32_tilemovrow(a, b))
437
438/// Move one row of a tile data to a v16f32 data.
439/// The row of the tile is selected by a 8b immediate value.
440///
441/// \headerfile <immintrin.h>
442///
443/// \code
444/// __m512 _tile_movrowi(__tile a, const unsigned b);
445/// \endcode
446///
447/// This intrinsic corresponds to the <c> TILEMOVROW </c> instruction.
448///
449/// \param a
450/// The 1st source tile. Max size is 1024 Bytes.
451/// \param b
452/// The 2nd source r32. Size is 4 Bytes.
453/// \returns
454/// The destination v16f32 data. Size is 64 Bytes.
455///
456/// \code{.operation}
457/// VL := 512
458/// VL_bytes := VL>>3
459/// row_index := b&0xf
460/// IF row_index >= a.rows
461/// dst[VL-1:0] := 0
462/// ELSE
463/// FOR i := 0 TO (VL_bytes-1)
464/// IF (i >= a.colsb)
465/// dst.byte[i] := 0
466/// ELSE
467/// dst.byte[i] := a.row[row_index].byte[i]
468/// ENDFOR
469/// FI
470/// \endcode
471#define _tile_movrowi(a, b) ((__m512i)__builtin_ia32_tilemovrowi(a, b))
472
473/// This is internal intrinsic. C/C++ user should avoid calling it directly.
474
475static __inline__ __m512 __DEFAULT_FN_ATTRS_AVX512 _tile_cvtrowd2ps_internal(
476 unsigned short m, unsigned short n, _tile1024i src, unsigned u) {
477 return __builtin_ia32_tcvtrowd2ps_internal(m, n, src, u);
478}
479
480static __inline__ __m512bh __DEFAULT_FN_ATTRS_AVX512
481_tile_cvtrowps2bf16h_internal(unsigned short m, unsigned short n,
482 _tile1024i src, unsigned u) {
483 return __builtin_ia32_tcvtrowps2bf16h_internal(m, n, src, u);
484}
485
486static __inline__ __m512bh __DEFAULT_FN_ATTRS_AVX512
487_tile_cvtrowps2bf16l_internal(unsigned short m, unsigned short n,
488 _tile1024i src, unsigned u) {
489 return __builtin_ia32_tcvtrowps2bf16l_internal(m, n, src, u);
490}
491
492static __inline__ __m512h __DEFAULT_FN_ATTRS_AVX512 _tile_cvtrowps2phh_internal(
493 unsigned short m, unsigned short n, _tile1024i src, unsigned u) {
494 return __builtin_ia32_tcvtrowps2phh_internal(m, n, src, u);
495}
496
497static __inline__ __m512h __DEFAULT_FN_ATTRS_AVX512 _tile_cvtrowps2phl_internal(
498 unsigned short m, unsigned short n, _tile1024i src, unsigned u) {
499 return __builtin_ia32_tcvtrowps2phl_internal(m, n, src, u);
500}
501
502static __inline__ __m512i __DEFAULT_FN_ATTRS_AVX512 _tile_movrow_internal(
503 unsigned short m, unsigned short n, _tile1024i src, unsigned u) {
504 return (__m512i)__builtin_ia32_tilemovrow_internal(m, n, src, u);
505}
506
507/// Move a row from a tile (src0) to a v16f32 dst, converting the int32 source
508/// elements to fp32. No SIMD exceptions are generated. Rounding is done as if
509/// MXCSR.RC=RNE. Embedded rounding is not supported.
510/// The row and chunk elements of tile is fetched from 32bit src1.
511///
512/// \headerfile <immintrin.h>
513///
514/// This intrinsic corresponds to the <c> TCVTROWD2PS </c> instruction.
515///
516/// \param src0
517/// The 1st source tile. Max size is 1024 Bytes.
518/// \param src1
519/// The 2nd source r32. Size is 4 Bytes.
520/// \returns
521/// The destination v16f32 data. Size is 64 Bytes.
522__DEFAULT_FN_ATTRS_AVX512
523static __m512 __tile_cvtrowd2ps(__tile1024i src0, unsigned src1) {
524 return _tile_cvtrowd2ps_internal(src0.row, src0.col, src0.tile, src1);
525}
526
527/// Move a row from a tile (src0) to a v32bf16 dst, converting the fp32 source
528/// elements to bf16 at high 16-bits of each dword.
529/// The row and chunk elements of tile is fetched from 32bit src1.
530///
531/// \headerfile <immintrin.h>
532///
533/// This intrinsic corresponds to the <c> TCVTROWPS2BF16H </c> instruction.
534///
535/// \param src0
536/// The 1st source tile. Max size is 1024 Bytes.
537/// \param src1
538/// The 2nd source r32. Size is 4 Bytes.
539/// \returns
540/// The destination v32bf16 data. Size is 64 Bytes.
541__DEFAULT_FN_ATTRS_AVX512
542static __m512bh __tile_cvtrowps2bf16h(__tile1024i src0, unsigned src1) {
543 return _tile_cvtrowps2bf16h_internal(src0.row, src0.col, src0.tile, src1);
544}
545
546/// Move a row from a tile (src0) to a v32bf16 dst, converting the fp32 source
547/// elements to bf16 at low 16-bits of each dword.
548/// The row and chunk elements of tile is fetched from 32bit src1.
549///
550/// \headerfile <immintrin.h>
551///
552/// This intrinsic corresponds to the <c> TCVTROWPS2BF16L </c> instruction.
553///
554/// \param src0
555/// The 1st source tile. Max size is 1024 Bytes.
556/// \param src1
557/// The 2nd source r32. Size is 4 Bytes.
558/// \returns
559/// The destination v32bf16 data. Size is 64 Bytes.
560__DEFAULT_FN_ATTRS_AVX512
561static __m512bh __tile_cvtrowps2bf16l(__tile1024i src0, unsigned src1) {
562 return _tile_cvtrowps2bf16l_internal(src0.row, src0.col, src0.tile, src1);
563}
564
565/// Move a row from a tile (src0) to a v32fp16 dst, converting the fp32 source
566/// elements to fp16 at high 16-bits of each dword.
567/// The row and chunk elements of tile is fetched from 32bit src1.
568///
569/// \headerfile <immintrin.h>
570///
571/// This intrinsic corresponds to the <c> TCVTROWPS2PHH </c> instruction.
572///
573/// \param src0
574/// The 1st source tile. Max size is 1024 Bytes.
575/// \param src1
576/// The 2nd source r32. Size is 4 Bytes.
577/// \returns
578/// The destination v32fp16 data. Size is 64 Bytes.
579__DEFAULT_FN_ATTRS_AVX512
580static __m512h __tile_cvtrowps2phh(__tile1024i src0, unsigned src1) {
581 return _tile_cvtrowps2phh_internal(src0.row, src0.col, src0.tile, src1);
582}
583
584/// Move a row from a tile (src0) to a v32fp16 dst, converting the fp32 source
585/// elements to fp16 at low 16-bits of each dword.
586/// The row and chunk elements of tile is fetched from 32bit src1.
587///
588/// \headerfile <immintrin.h>
589///
590/// This intrinsic corresponds to the <c> TCVTROWPS2PHL </c> instruction.
591///
592/// \param src0
593/// The 1st source tile. Max size is 1024 Bytes.
594/// \param src1
595/// The 2nd source r32. Size is 4 Bytes.
596/// \returns
597/// The destination v32fp16 data. Size is 64 Bytes.
598__DEFAULT_FN_ATTRS_AVX512
599static __m512h __tile_cvtrowps2phl(__tile1024i src0, unsigned src1) {
600 return _tile_cvtrowps2phl_internal(src0.row, src0.col, src0.tile, src1);
601}
602
603/// Move one row of a tile data to a v16f32 data.
604/// The row of the tile is selected by a 32b GPR.
605///
606/// \headerfile <immintrin.h>
607///
608/// This intrinsic corresponds to the <c> TILEMOVROW </c> instruction.
609///
610/// \param src0
611/// The 1st source tile. Max size is 1024 Bytes.
612/// \param src1
613/// The 2nd source r32. Size is 4 Bytes.
614/// \returns
615/// The destination v16i32 data. Size is 64 Bytes.
616__DEFAULT_FN_ATTRS_AVX512
617static __m512i __tile_movrow(__tile1024i src0, unsigned src1) {
618 return (__m512i)_tile_movrow_internal(src0.row, src0.col, src0.tile, src1);
619}
620
621#endif // __x86_64__ && __SSE2__
622#endif // __AMX_AVX512INTRIN_H