diff options
author | Dan Tejada <dan.tejada@cantada.com> | 2020-04-22 23:25:04 -0400 |
---|---|---|
committer | Dan Tejada <dan.tejada@cantada.com> | 2020-05-20 21:16:14 -0400 |
commit | d532f025420de029914fb43734dec6be9b7128f6 (patch) | |
tree | 87ca7378e9d1197dbf0d052d723158452c40161b /packages/gcc | |
parent | 75d7525aa1698a8bd8dd0c6b78819846fe2ec869 (diff) | |
download | crosstool-ng-d532f025420de029914fb43734dec6be9b7128f6.tar.gz crosstool-ng-d532f025420de029914fb43734dec6be9b7128f6.tar.bz2 crosstool-ng-d532f025420de029914fb43734dec6be9b7128f6.zip |
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.patch | 48 |
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 00000000..398f9043 --- /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 |