https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77308
--- Comment #16 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
Wow.
look at this:
Index: arm.md
===================================================================
--- arm.md (revision 241539)
+++ arm.md (working copy)
@@ -448,7 +448,7 @@
(plus:DI (match_operand:DI 1 "s_register_operand" "")
(match_operand:DI 2 "arm_adddi_operand" "")))
(clobber (reg:CC CC_REGNUM))])]
- "TARGET_EITHER"
+ "TARGET_EITHER && !TARGET_THUMB2"
"
if (TARGET_THUMB1)
{
@@ -2256,7 +2256,7 @@
[(set (match_operand:DI 0 "s_register_operand" "")
(and:DI (match_operand:DI 1 "s_register_operand" "")
(match_operand:DI 2 "neon_inv_logic_op2" "")))]
- "TARGET_32BIT"
+ "TARGET_32BIT && !TARGET_THUMB2"
""
)
@@ -3310,7 +3310,7 @@
[(set (match_operand:DI 0 "s_register_operand" "")
(xor:DI (match_operand:DI 1 "s_register_operand" "")
(match_operand:DI 2 "arm_xordi_operand" "")))]
- "TARGET_32BIT"
+ "TARGET_32BIT && !TARGET_THUMB2"
""
)
Thus only disabling adddi3, anddi3, and xordi3,
but not ashldi3 and ashrdi3, because they are not part of the problem.
reduces
arm-linux-gnueabihf-gcc -mthumb -march=armv7 -mfloat-abi=soft -Os -c pr77308.c
frame = 272 (about the same as aarch64 had!)
code = 0x374C
sha512_block_data_order:
@ args = 0, pretend = 0, frame = 272
@ frame_needed = 0, uses_anonymous_args = 0
Maybe I am dreaming, or something is completely wrong now...