Skip to content

Commit

Permalink
Reorganize the CPU feature detection
Browse files Browse the repository at this point in the history
Move the code from i386-rust.cc to i386-rust-and-jit.inc so that it can
be reused by libgccjit.

gcc/ChangeLog:

	* config/i386/i386-rust-and-jit.inc: New file.
	* config/i386/i386-rust.cc: Move code to i386-rust-and-jit.inc.
  • Loading branch information
antoyo authored and CohenArthur committed Nov 5, 2024
1 parent 5ceba7f commit 9bcd87f
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 97 deletions.
93 changes: 93 additions & 0 deletions gcc/config/i386/i386-rust-and-jit.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
if (TARGET_64BIT)
ADD_TARGET_INFO ("target_arch", "x86_64");
else
ADD_TARGET_INFO ("target_arch", "x86");

// features officially "stabilised" in rustc
if (TARGET_MMX)
ADD_TARGET_INFO ("target_feature", "mmx");
if (TARGET_SSE)
ADD_TARGET_INFO ("target_feature", "sse");
if (TARGET_SSE2)
ADD_TARGET_INFO ("target_feature", "sse2");
if (TARGET_SSE3)
ADD_TARGET_INFO ("target_feature", "sse3");
if (TARGET_SSSE3)
ADD_TARGET_INFO ("target_feature", "ssse3");
if (TARGET_SSE4_1)
ADD_TARGET_INFO ("target_feature", "sse4.1");
if (TARGET_SSE4_2)
ADD_TARGET_INFO ("target_feature", "sse4.2");
if (TARGET_AES)
ADD_TARGET_INFO ("target_feature", "aes");
if (TARGET_SHA)
ADD_TARGET_INFO ("target_feature", "sha");
if (TARGET_AVX)
ADD_TARGET_INFO ("target_feature", "avx");
if (TARGET_AVX2)
ADD_TARGET_INFO ("target_feature", "avx2");
if (TARGET_AVX512F)
ADD_TARGET_INFO ("target_feature", "avx512f");
if (TARGET_AVX512CD)
ADD_TARGET_INFO ("target_feature", "avx512cd");
if (TARGET_AVX512DQ)
ADD_TARGET_INFO ("target_feature", "avx512dq");
if (TARGET_AVX512BW)
ADD_TARGET_INFO ("target_feature", "avx512bw");
if (TARGET_AVX512VL)
ADD_TARGET_INFO ("target_feature", "avx512vl");
if (TARGET_AVX512VBMI)
ADD_TARGET_INFO ("target_feature", "avx512vbmi");
if (TARGET_AVX512IFMA)
ADD_TARGET_INFO ("target_feature", "avx512ifma");
if (TARGET_AVX512VPOPCNTDQ)
ADD_TARGET_INFO ("target_feature", "avx512vpopcntdq");
if (TARGET_FMA)
ADD_TARGET_INFO ("target_feature", "fma");
if (TARGET_RTM)
ADD_TARGET_INFO ("target_feature", "rtm");
if (TARGET_SSE4A)
ADD_TARGET_INFO ("target_feature", "sse4a");
if (TARGET_BMI)
{
ADD_TARGET_INFO ("target_feature", "bmi1");
ADD_TARGET_INFO ("target_feature", "bmi");
}
if (TARGET_BMI2)
ADD_TARGET_INFO ("target_feature", "bmi2");
if (TARGET_LZCNT)
ADD_TARGET_INFO ("target_feature", "lzcnt");
if (TARGET_TBM)
ADD_TARGET_INFO ("target_feature", "tbm");
if (TARGET_POPCNT)
ADD_TARGET_INFO ("target_feature", "popcnt");
if (TARGET_RDRND)
{
ADD_TARGET_INFO ("target_feature", "rdrand");
ADD_TARGET_INFO ("target_feature", "rdrnd");
}
if (TARGET_F16C)
ADD_TARGET_INFO ("target_feature", "f16c");
if (TARGET_RDSEED)
ADD_TARGET_INFO ("target_feature", "rdseed");
if (TARGET_ADX)
ADD_TARGET_INFO ("target_feature", "adx");
if (TARGET_FXSR)
ADD_TARGET_INFO ("target_feature", "fxsr");
if (TARGET_XSAVE)
ADD_TARGET_INFO ("target_feature", "xsave");
if (TARGET_XSAVEOPT)
ADD_TARGET_INFO ("target_feature", "xsaveopt");
if (TARGET_XSAVEC)
ADD_TARGET_INFO ("target_feature", "xsavec");
if (TARGET_XSAVES)
ADD_TARGET_INFO ("target_feature", "xsaves");
if (TARGET_VPCLMULQDQ)
{
ADD_TARGET_INFO ("target_feature", "pclmulqdq");
ADD_TARGET_INFO ("target_feature", "vpclmulqdq");
}
if (TARGET_CMPXCHG16B)
ADD_TARGET_INFO ("target_feature", "cmpxchg16b");
if (TARGET_MOVBE)
ADD_TARGET_INFO ("target_feature", "movbe");
100 changes: 3 additions & 97 deletions gcc/config/i386/i386-rust.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,101 +29,7 @@ along with GCC; see the file COPYING3. If not see
void
ix86_rust_target_cpu_info (void)
{
if (TARGET_64BIT)
rust_add_target_info ("target_arch", "x86_64");
else
rust_add_target_info ("target_arch", "x86");

// features officially "stabilised" in rustc
if (TARGET_MMX)
rust_add_target_info ("target_feature", "mmx");
if (TARGET_SSE)
rust_add_target_info ("target_feature", "sse");
if (TARGET_SSE2)
rust_add_target_info ("target_feature", "sse2");
if (TARGET_SSE3)
rust_add_target_info ("target_feature", "sse3");
if (TARGET_SSSE3)
rust_add_target_info ("target_feature", "ssse3");
if (TARGET_SSE4_1)
rust_add_target_info ("target_feature", "sse4.1");
if (TARGET_SSE4_2)
rust_add_target_info ("target_feature", "sse4.2");
if (TARGET_AES)
rust_add_target_info ("target_feature", "aes");
if (TARGET_SHA)
rust_add_target_info ("target_feature", "sha");
if (TARGET_AVX)
rust_add_target_info ("target_feature", "avx");
if (TARGET_AVX2)
rust_add_target_info ("target_feature", "avx2");
if (TARGET_AVX512F)
rust_add_target_info ("target_feature", "avx512f");
if (TARGET_AVX512ER)
rust_add_target_info ("target_feature", "avx512er");
if (TARGET_AVX512CD)
rust_add_target_info ("target_feature", "avx512cd");
if (TARGET_AVX512PF)
rust_add_target_info ("target_feature", "avx512pf");
if (TARGET_AVX512DQ)
rust_add_target_info ("target_feature", "avx512dq");
if (TARGET_AVX512BW)
rust_add_target_info ("target_feature", "avx512bw");
if (TARGET_AVX512VL)
rust_add_target_info ("target_feature", "avx512vl");
if (TARGET_AVX512VBMI)
rust_add_target_info ("target_feature", "avx512vbmi");
if (TARGET_AVX512IFMA)
rust_add_target_info ("target_feature", "avx512ifma");
if (TARGET_AVX512VPOPCNTDQ)
rust_add_target_info ("target_feature", "avx512vpopcntdq");
if (TARGET_FMA)
rust_add_target_info ("target_feature", "fma");
if (TARGET_RTM)
rust_add_target_info ("target_feature", "rtm");
if (TARGET_SSE4A)
rust_add_target_info ("target_feature", "sse4a");
if (TARGET_BMI)
{
rust_add_target_info ("target_feature", "bmi1");
rust_add_target_info ("target_feature", "bmi");
}
if (TARGET_BMI2)
rust_add_target_info ("target_feature", "bmi2");
if (TARGET_LZCNT)
rust_add_target_info ("target_feature", "lzcnt");
if (TARGET_TBM)
rust_add_target_info ("target_feature", "tbm");
if (TARGET_POPCNT)
rust_add_target_info ("target_feature", "popcnt");
if (TARGET_RDRND)
{
rust_add_target_info ("target_feature", "rdrand");
rust_add_target_info ("target_feature", "rdrnd");
}
if (TARGET_F16C)
rust_add_target_info ("target_feature", "f16c");
if (TARGET_RDSEED)
rust_add_target_info ("target_feature", "rdseed");
if (TARGET_ADX)
rust_add_target_info ("target_feature", "adx");
if (TARGET_FXSR)
rust_add_target_info ("target_feature", "fxsr");
if (TARGET_XSAVE)
rust_add_target_info ("target_feature", "xsave");
if (TARGET_XSAVEOPT)
rust_add_target_info ("target_feature", "xsaveopt");
if (TARGET_XSAVEC)
rust_add_target_info ("target_feature", "xsavec");
if (TARGET_XSAVES)
rust_add_target_info ("target_feature", "xsaves");
if (TARGET_VPCLMULQDQ)
{
rust_add_target_info ("target_feature", "pclmulqdq");
rust_add_target_info ("target_feature", "vpclmulqdq");
}
if (TARGET_CMPXCHG16B)
rust_add_target_info ("target_feature", "cmpxchg16b");
if (TARGET_MOVBE)
rust_add_target_info ("target_feature", "movbe");
#define ADD_TARGET_INFO rust_add_target_info
#include "i386-rust-and-jit.inc"
#undef ADD_TARGET_INFO
}

0 comments on commit 9bcd87f

Please sign in to comment.