From: arthur.cohen@embecosm.com
To: gcc-patches@gcc.gnu.org
Cc: gcc-rust@gcc.gnu.org, ibuclaw@gdcproject.org
Subject: [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-*
Date: Thu, 7 Sep 2023 15:36:30 +0200 [thread overview]
Message-ID: <20230907133729.2518969-5-arthur.cohen@embecosm.com> (raw)
In-Reply-To: <20230907133729.2518969-2-arthur.cohen@embecosm.com>
From: Iain Buclaw <ibuclaw@gdcproject.org>
There are still quite a lot of the previously reverted i386-rust.cc
missing, so it's only a partial reimplementation.
gcc/ChangeLog:
* config/i386/t-i386 (i386-rust.o): New rule.
* config/i386/i386-rust.cc: New file.
* config/i386/i386-rust.h: New file.
---
gcc/config/i386/i386-rust.cc | 129 +++++++++++++++++++++++++++++++++++
gcc/config/i386/i386-rust.h | 22 ++++++
gcc/config/i386/t-i386 | 4 ++
3 files changed, 155 insertions(+)
create mode 100644 gcc/config/i386/i386-rust.cc
create mode 100644 gcc/config/i386/i386-rust.h
diff --git a/gcc/config/i386/i386-rust.cc b/gcc/config/i386/i386-rust.cc
new file mode 100644
index 00000000000..a00c4f8cee1
--- /dev/null
+++ b/gcc/config/i386/i386-rust.cc
@@ -0,0 +1,129 @@
+/* Subroutines for the Rust front end on the x86 architecture.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+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.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#define IN_TARGET_CODE 1
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+
+/* Implement TARGET_RUST_CPU_INFO for x86 targets. */
+
+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");
+}
diff --git a/gcc/config/i386/i386-rust.h b/gcc/config/i386/i386-rust.h
new file mode 100644
index 00000000000..a837e2f1c74
--- /dev/null
+++ b/gcc/config/i386/i386-rust.h
@@ -0,0 +1,22 @@
+/* Definitions for the Rust front end on the x86 architecture.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+
+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.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+/* In i386-rust.cc */
+extern void ix86_rust_target_cpu_info (void);
+
+/* Target CPU info for Rust. */
+#define TARGET_RUST_CPU_INFO ix86_rust_target_cpu_info
diff --git a/gcc/config/i386/t-i386 b/gcc/config/i386/t-i386
index b417c7f17ec..f85817d698c 100644
--- a/gcc/config/i386/t-i386
+++ b/gcc/config/i386/t-i386
@@ -46,6 +46,10 @@ i386-d.o: $(srcdir)/config/i386/i386-d.cc
$(COMPILE) $<
$(POSTCOMPILE)
+i386-rust.o: $(srcdir)/config/i386/i386-rust.cc
+ $(COMPILE) $<
+ $(POSTCOMPILE)
+
i386-options.o: $(srcdir)/config/i386/i386-options.cc
$(COMPILE) $<
$(POSTCOMPILE)
--
2.42.0
next prev parent reply other threads:[~2023-09-07 13:38 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
2023-09-07 13:36 ` arthur.cohen [this message]
2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230907133729.2518969-5-arthur.cohen@embecosm.com \
--to=arthur.cohen@embecosm.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=gcc-rust@gcc.gnu.org \
--cc=ibuclaw@gdcproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).