summaryrefslogtreecommitdiff
path: root/packages/gcc
diff options
context:
space:
mode:
authorDan Tejada <dan.tejada@cantada.com>2020-04-23 03:25:04 (GMT)
committerDan Tejada <dan.tejada@cantada.com>2020-05-21 01:16:14 (GMT)
commitd532f025420de029914fb43734dec6be9b7128f6 (patch)
tree87ca7378e9d1197dbf0d052d723158452c40161b /packages/gcc
parent75d7525aa1698a8bd8dd0c6b78819846fe2ec869 (diff)
Experimental: Add support for the Texas Instruments C6X (TMS320C6000 series) DSPs
-- c6x: Add support for c6x product families to pass on to uClibC-ng -- c6x: Fix multilib support -- c6x: Add patch fix internal instruction error (GCC 57295) Signed-off-by: Dan Tejada <dan.tejada@cantada.com>
Diffstat (limited to 'packages/gcc')
-rw-r--r--packages/gcc/4.9.4/0033-fix-c6x-internal-compiler-error-and-multilib.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/packages/gcc/4.9.4/0033-fix-c6x-internal-compiler-error-and-multilib.patch b/packages/gcc/4.9.4/0033-fix-c6x-internal-compiler-error-and-multilib.patch
new file mode 100644
index 0000000..398f904
--- /dev/null
+++ b/packages/gcc/4.9.4/0033-fix-c6x-internal-compiler-error-and-multilib.patch
@@ -0,0 +1,48 @@
+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>
+
+--- 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