[PATCH] x86: Handle extra bit for i386_cpu_flags

Haochen Jiang haochen.jiang@intel.com
Wed Nov 26 02:58:39 GMT 2025


Hi all,

I suppose we will need this handle in the very near future due 
to AMD AVX512-BMM and foreseeable APX_NCI_NDD_NF addition leading
to yet another bit in i386_cpu_flags.

Ok for trunk?

Thx,
Haochen

---

Since we will run out of bits for i386_cpu_flags in the very near
future (AMD AVX512_BMM leads to full, and APX_NCI_NDD_NF also needs
a bit for x86 vendors other than Intel), we will need to handle
extra bit for i386_cpu_flags.

gas/ChangeLog:

	* config/tc-i386.c
	(cpu_flags_all_zero): Handle extra bit.
	(cpu_flags_equal): Ditto.
	(cpu_flags_and): Ditto.
	(cpu_flags_or): Ditto.
	(cpu_flags_and_not): Ditto.
---
 gas/config/tc-i386.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index eb282bff43c..8c823c78fc4 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1943,6 +1943,10 @@ cpu_flags_all_zero (const union i386_cpu_flags *x)
 {
   switch (ARRAY_SIZE(x->array))
     {
+    case 6:
+      if (x->array[5])
+	return 0;
+      /* Fall through.  */
     case 5:
       if (x->array[4])
 	return 0;
@@ -1972,6 +1976,10 @@ cpu_flags_equal (const union i386_cpu_flags *x,
 {
   switch (ARRAY_SIZE(x->array))
     {
+    case 6:
+      if (x->array[5] != y->array[5])
+	return 0;
+      /* Fall through.  */
     case 5:
       if (x->array[4] != y->array[4])
 	return 0;
@@ -2009,6 +2017,9 @@ cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
 {
   switch (ARRAY_SIZE (x.array))
     {
+    case 6:
+      x.array [5] &= y.array [5];
+      /* Fall through.  */
     case 5:
       x.array [4] &= y.array [4];
       /* Fall through.  */
@@ -2035,6 +2046,9 @@ cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
 {
   switch (ARRAY_SIZE (x.array))
     {
+    case 6:
+      x.array [5] |= y.array [5];
+      /* Fall through.  */
     case 5:
       x.array [4] |= y.array [4];
       /* Fall through.  */
@@ -2061,6 +2075,9 @@ cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
 {
   switch (ARRAY_SIZE (x.array))
     {
+    case 6:
+      x.array [5] &= ~y.array [5];
+      /* Fall through.  */
     case 5:
       x.array [4] &= ~y.array [4];
       /* Fall through.  */
-- 
2.31.1



More information about the Binutils mailing list