-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This change adds on-par support for GCC by providing the native x86 intrinsics headers from gcc release 13.1.0. The file `mm_malloc.h` is taken from upstream `pmm_malloc.h`. Signed-off-by: Andrei Tatar <andrei@unikraft.io> Reviewed-by: Maria Sfiraiala <maria.sfiraiala@gmail.com> Reviewed-by: Radu Nichita <radunichita99@gmail.com> Approved-by: Razvan Deaconescu <razvand@unikraft.io> Tested-by: Unikraft CI <monkey@unikraft.io> GitHub-Closes: #3
- Loading branch information
1 parent
ddf533c
commit 5665f99
Showing
100 changed files
with
74,962 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/* Copyright (C) 2012-2023 Free Software Foundation, Inc. | ||
This file is part of GCC. | ||
GCC is free software; you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation; either version 3, or (at your option) | ||
any later version. | ||
GCC is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
Under Section 7 of GPL version 3, you are granted additional | ||
permissions described in the GCC Runtime Library Exception, version | ||
3.1, as published by the Free Software Foundation. | ||
You should have received a copy of the GNU General Public License and | ||
a copy of the GCC Runtime Library Exception along with this program; | ||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | ||
<http://www.gnu.org/licenses/>. */ | ||
|
||
#ifndef _X86GPRINTRIN_H_INCLUDED | ||
# error "Never use <adxintrin.h> directly; include <x86gprintrin.h> instead." | ||
#endif | ||
|
||
#ifndef _ADXINTRIN_H_INCLUDED | ||
#define _ADXINTRIN_H_INCLUDED | ||
|
||
extern __inline unsigned char | ||
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_subborrow_u32 (unsigned char __CF, unsigned int __X, | ||
unsigned int __Y, unsigned int *__P) | ||
{ | ||
return __builtin_ia32_sbb_u32 (__CF, __X, __Y, __P); | ||
} | ||
|
||
extern __inline unsigned char | ||
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_addcarry_u32 (unsigned char __CF, unsigned int __X, | ||
unsigned int __Y, unsigned int *__P) | ||
{ | ||
return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P); | ||
} | ||
|
||
extern __inline unsigned char | ||
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_addcarryx_u32 (unsigned char __CF, unsigned int __X, | ||
unsigned int __Y, unsigned int *__P) | ||
{ | ||
return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P); | ||
} | ||
|
||
#ifdef __x86_64__ | ||
extern __inline unsigned char | ||
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_subborrow_u64 (unsigned char __CF, unsigned long long __X, | ||
unsigned long long __Y, unsigned long long *__P) | ||
{ | ||
return __builtin_ia32_sbb_u64 (__CF, __X, __Y, __P); | ||
} | ||
|
||
extern __inline unsigned char | ||
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_addcarry_u64 (unsigned char __CF, unsigned long long __X, | ||
unsigned long long __Y, unsigned long long *__P) | ||
{ | ||
return __builtin_ia32_addcarryx_u64 (__CF, __X, __Y, __P); | ||
} | ||
|
||
extern __inline unsigned char | ||
__attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_addcarryx_u64 (unsigned char __CF, unsigned long long __X, | ||
unsigned long long __Y, unsigned long long *__P) | ||
{ | ||
return __builtin_ia32_addcarryx_u64 (__CF, __X, __Y, __P); | ||
} | ||
#endif | ||
|
||
#endif /* _ADXINTRIN_H_INCLUDED */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/* Copyright (C) 2007-2023 Free Software Foundation, Inc. | ||
This file is part of GCC. | ||
GCC is free software; you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation; either version 3, or (at your option) | ||
any later version. | ||
GCC is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
Under Section 7 of GPL version 3, you are granted additional | ||
permissions described in the GCC Runtime Library Exception, version | ||
3.1, as published by the Free Software Foundation. | ||
You should have received a copy of the GNU General Public License and | ||
a copy of the GCC Runtime Library Exception along with this program; | ||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | ||
<http://www.gnu.org/licenses/>. */ | ||
|
||
/* Implemented from the specification included in the AMD Programmers | ||
Manual Update, version 2.x */ | ||
|
||
#ifndef _AMMINTRIN_H_INCLUDED | ||
#define _AMMINTRIN_H_INCLUDED | ||
|
||
/* We need definitions from the SSE3, SSE2 and SSE header files*/ | ||
#include <pmmintrin.h> | ||
|
||
#ifndef __SSE4A__ | ||
#pragma GCC push_options | ||
#pragma GCC target("sse4a") | ||
#define __DISABLE_SSE4A__ | ||
#endif /* __SSE4A__ */ | ||
|
||
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_mm_stream_sd (double * __P, __m128d __Y) | ||
{ | ||
__builtin_ia32_movntsd (__P, (__v2df) __Y); | ||
} | ||
|
||
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_mm_stream_ss (float * __P, __m128 __Y) | ||
{ | ||
__builtin_ia32_movntss (__P, (__v4sf) __Y); | ||
} | ||
|
||
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_mm_extract_si64 (__m128i __X, __m128i __Y) | ||
{ | ||
return (__m128i) __builtin_ia32_extrq ((__v2di) __X, (__v16qi) __Y); | ||
} | ||
|
||
#ifdef __OPTIMIZE__ | ||
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_mm_extracti_si64 (__m128i __X, unsigned const int __I, unsigned const int __L) | ||
{ | ||
return (__m128i) __builtin_ia32_extrqi ((__v2di) __X, __I, __L); | ||
} | ||
#else | ||
#define _mm_extracti_si64(X, I, L) \ | ||
((__m128i) __builtin_ia32_extrqi ((__v2di)(__m128i)(X), \ | ||
(unsigned int)(I), (unsigned int)(L))) | ||
#endif | ||
|
||
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_mm_insert_si64 (__m128i __X,__m128i __Y) | ||
{ | ||
return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y); | ||
} | ||
|
||
#ifdef __OPTIMIZE__ | ||
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) | ||
_mm_inserti_si64(__m128i __X, __m128i __Y, unsigned const int __I, unsigned const int __L) | ||
{ | ||
return (__m128i) __builtin_ia32_insertqi ((__v2di)__X, (__v2di)__Y, __I, __L); | ||
} | ||
#else | ||
#define _mm_inserti_si64(X, Y, I, L) \ | ||
((__m128i) __builtin_ia32_insertqi ((__v2di)(__m128i)(X), \ | ||
(__v2di)(__m128i)(Y), \ | ||
(unsigned int)(I), (unsigned int)(L))) | ||
#endif | ||
|
||
#ifdef __DISABLE_SSE4A__ | ||
#undef __DISABLE_SSE4A__ | ||
#pragma GCC pop_options | ||
#endif /* __DISABLE_SSE4A__ */ | ||
|
||
#endif /* _AMMINTRIN_H_INCLUDED */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* Copyright (C) 2020-2023 Free Software Foundation, Inc. | ||
This file is part of GCC. | ||
GCC is free software; you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation; either version 3, or (at your option) | ||
any later version. | ||
GCC is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
Under Section 7 of GPL version 3, you are granted additional | ||
permissions described in the GCC Runtime Library Exception, version | ||
3.1, as published by the Free Software Foundation. | ||
You should have received a copy of the GNU General Public License and | ||
a copy of the GCC Runtime Library Exception along with this program; | ||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | ||
<http://www.gnu.org/licenses/>. */ | ||
|
||
#if !defined _IMMINTRIN_H_INCLUDED | ||
#error "Never use <amxbf16intrin.h> directly; include <immintrin.h> instead." | ||
#endif | ||
|
||
#ifndef _AMXBF16INTRIN_H_INCLUDED | ||
#define _AMXBF16INTRIN_H_INCLUDED | ||
|
||
#if !defined(__AMX_BF16__) | ||
#pragma GCC push_options | ||
#pragma GCC target("amx-bf16") | ||
#define __DISABLE_AMX_BF16__ | ||
#endif /* __AMX_BF16__ */ | ||
|
||
#if defined(__x86_64__) | ||
#define _tile_dpbf16ps_internal(dst,src1,src2) \ | ||
__asm__ volatile\ | ||
("{tdpbf16ps\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|tdpbf16ps\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::) | ||
|
||
#define _tile_dpbf16ps(dst,src1,src2) \ | ||
_tile_dpbf16ps_internal (dst, src1, src2) | ||
|
||
#endif | ||
|
||
#ifdef __DISABLE_AMX_BF16__ | ||
#undef __DISABLE_AMX_BF16__ | ||
#pragma GCC pop_options | ||
#endif /* __DISABLE_AMX_BF16__ */ | ||
|
||
#endif /* _AMXBF16INTRIN_H_INCLUDED */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* Copyright (C) 2023 Free Software Foundation, Inc. | ||
This file is part of GCC. | ||
GCC is free software; you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation; either version 3, or (at your option) | ||
any later version. | ||
GCC is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
Under Section 7 of GPL version 3, you are granted additional | ||
permissions described in the GCC Runtime Library Exception, version | ||
3.1, as published by the Free Software Foundation. | ||
You should have received a copy of the GNU General Public License and | ||
a copy of the GCC Runtime Library Exception along with this program; | ||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | ||
<http://www.gnu.org/licenses/>. */ | ||
|
||
#if !defined _IMMINTRIN_H_INCLUDED | ||
#error "Never use <amxcomplexintrin.h> directly; include <immintrin.h> instead." | ||
#endif | ||
|
||
#ifndef _AMXCOMPLEXINTRIN_H_INCLUDED | ||
#define _AMXCOMPLEXINTRIN_H_INCLUDED | ||
|
||
#if !defined(__AMX_COMPLEX__) | ||
#pragma GCC push_options | ||
#pragma GCC target("amx-complex") | ||
#define __DISABLE_AMX_COMPLEX__ | ||
#endif /* __AMX_COMPLEX__ */ | ||
|
||
#if defined(__x86_64__) | ||
#define _tile_cmmimfp16ps_internal(src1_dst,src2,src3) \ | ||
__asm__ volatile\ | ||
("{tcmmimfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmimfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::) | ||
|
||
#define _tile_cmmrlfp16ps_internal(src1_dst,src2,src3) \ | ||
__asm__ volatile\ | ||
("{tcmmrlfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmrlfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::) | ||
|
||
#define _tile_cmmimfp16ps(src1_dst,src2,src3) \ | ||
_tile_cmmimfp16ps_internal (src1_dst, src2, src3) | ||
|
||
#define _tile_cmmrlfp16ps(src1_dst,src2,src3) \ | ||
_tile_cmmrlfp16ps_internal (src1_dst, src2, src3) | ||
|
||
#endif | ||
|
||
#ifdef __DISABLE_AMX_COMPLEX__ | ||
#undef __DISABLE_AMX_COMPLEX__ | ||
#pragma GCC pop_options | ||
#endif /* __DISABLE_AMX_COMPLEX__ */ | ||
|
||
#endif /* _AMXCOMPLEXINTRIN_H_INCLUDED */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* Copyright (C) 2020-2023 Free Software Foundation, Inc. | ||
This file is part of GCC. | ||
GCC is free software; you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation; either version 3, or (at your option) | ||
any later version. | ||
GCC is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
Under Section 7 of GPL version 3, you are granted additional | ||
permissions described in the GCC Runtime Library Exception, version | ||
3.1, as published by the Free Software Foundation. | ||
You should have received a copy of the GNU General Public License and | ||
a copy of the GCC Runtime Library Exception along with this program; | ||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | ||
<http://www.gnu.org/licenses/>. */ | ||
|
||
#if !defined _IMMINTRIN_H_INCLUDED | ||
#error "Never use <amxfp16intrin.h> directly; include <immintrin.h> instead." | ||
#endif | ||
|
||
#ifndef _AMXFP16INTRIN_H_INCLUDED | ||
#define _AMXFP16INTRIN_H_INCLUDED | ||
|
||
#if defined(__x86_64__) | ||
#define _tile_dpfp16ps_internal(dst,src1,src2) \ | ||
__asm__ volatile \ | ||
("{tdpfp16ps\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|tdpfp16ps\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::) | ||
|
||
#define _tile_dpfp16ps(dst,src1,src2) \ | ||
_tile_dpfp16ps_internal (dst,src1,src2) | ||
|
||
#endif | ||
|
||
#ifdef __DISABLE_AMX_FP16__ | ||
#undef __DISABLE_AMX_FP16__ | ||
#pragma GCC pop_options | ||
#endif /* __DISABLE_AMX_FP16__ */ | ||
|
||
#endif /* _AMXFP16INTRIN_H_INCLUDED */ |
Oops, something went wrong.