2020-04-23 03:25:04 +00:00
|
|
|
Internal compiler error and multilib fixes
|
|
|
|
Reported upstream:
|
|
|
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57295
|
|
|
|
|
|
|
|
Fix c6x mulitibs build for uclinux
|
|
|
|
Reported by: Dan Tejada <dan.tejada@cantada.com>
|
|
|
|
|
2022-02-11 02:00:59 +00:00
|
|
|
---
|
|
|
|
gcc/config/c6x/c6x.md | 2 +-
|
|
|
|
gcc/config/c6x/predicates.md | 13 +++++++++++++
|
|
|
|
gcc/config/c6x/t-c6x-uclinux | 4 +++-
|
|
|
|
3 files changed, 17 insertions(+), 2 deletions(-)
|
|
|
|
|
2020-04-23 03:25:04 +00:00
|
|
|
--- a/gcc/config/c6x/c6x.md
|
|
|
|
+++ b/gcc/config/c6x/c6x.md
|
|
|
|
@@ -775,7 +775,7 @@
|
|
|
|
UNSPEC_MISALIGNED_ACCESS))]
|
|
|
|
"TARGET_INSNS_64"
|
|
|
|
{
|
|
|
|
- if (memory_operand (operands[0], <MODE>mode))
|
|
|
|
+ if (memory_operand (operands[0], <MODE>mode) || volatile_mem_operand (operands[0], <MODE>mode))
|
|
|
|
{
|
|
|
|
emit_insn (gen_movmisalign<mode>_store (operands[0], operands[1]));
|
|
|
|
DONE;
|
|
|
|
--- a/gcc/config/c6x/predicates.md
|
|
|
|
+++ b/gcc/config/c6x/predicates.md
|
|
|
|
@@ -224,3 +224,16 @@
|
|
|
|
gcc_unreachable ();
|
|
|
|
}
|
|
|
|
})
|
|
|
|
+
|
|
|
|
+;; Return 1 if the operand is in volatile memory. Note that during the
|
|
|
|
+;; RTL generation phase, memory_operand does not return TRUE for volatile
|
|
|
|
+;; memory references. So this function allows us to recognize volatile
|
|
|
|
+;; references where it's safe.
|
|
|
|
+(define_predicate "volatile_mem_operand"
|
|
|
|
+ (and (and (match_code "mem")
|
|
|
|
+ (match_test "MEM_VOLATILE_P (op)"))
|
|
|
|
+ (if_then_else (match_test "reload_completed")
|
|
|
|
+ (match_operand 0 "memory_operand")
|
|
|
|
+ (if_then_else (match_test "reload_in_progress")
|
|
|
|
+ (match_test "strict_memory_address_p (mode, XEXP (op, 0))")
|
|
|
|
+ (match_test "memory_address_p (mode, XEXP (op, 0))")))))
|
|
|
|
--- a/gcc/config/c6x/t-c6x-uclinux
|
|
|
|
+++ b/gcc/config/c6x/t-c6x-uclinux
|
|
|
|
@@ -1,3 +1,5 @@
|
|
|
|
+MULTILIB_OPTIONS = march=c674x mbig-endian
|
|
|
|
+
|
|
|
|
MULTILIB_OSDIRNAMES = march.c674x=!c674x
|
|
|
|
MULTILIB_OSDIRNAMES += mbig-endian=!be
|
|
|
|
-MULTILIB_OSDIRNAMES += mbig-endian/march.c674x=!be/c674x
|
|
|
|
+MULTILIB_OSDIRNAMES += march.c674x/mbig-endian=!be/c674x
|