]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix expand_single_bit_test for big-endian
authorAndrew Pinski <apinski@marvell.com>
Sun, 21 May 2023 04:01:46 +0000 (21:01 -0700)
committerAndrew Pinski <apinski@marvell.com>
Sun, 21 May 2023 04:06:28 +0000 (21:06 -0700)
I had thought extract_bit_field bitpos argument was the shifted position
and not the bitposition like BIT_FIELD_REF so I had removed the code which
would use the correct bitposition for BYTES_BIG_ENDIAN.

Committed as obvious; I checked big-endian MIPS to make sure we are now
producing the correct code.

gcc/ChangeLog:

* expr.cc (expand_single_bit_test): Correct bitpos for big-endian.

gcc/expr.cc

index 30c58c8dc5c9dea17af74c7d1b42de5d0d8b6bb9..56b51876f80449f25295e67715440a281425d78d 100644 (file)
@@ -12958,7 +12958,14 @@ expand_single_bit_test (location_t loc, enum tree_code code,
 
   rtx inner0 = expand_expr (inner, NULL_RTX, VOIDmode, EXPAND_NORMAL);
 
-  inner0 = extract_bit_field (inner0, 1, bitnum, 1, target,
+  int bitpos = bitnum;
+
+  scalar_int_mode imode = as_a <scalar_int_mode>(GET_MODE (inner0));
+
+  if (BYTES_BIG_ENDIAN)
+    bitpos = GET_MODE_BITSIZE (imode) - 1 - bitpos;
+
+  inner0 = extract_bit_field (inner0, 1, bitpos, 1, target,
                              operand_mode, mode, 0, NULL);
 
   if (code == EQ_EXPR)