aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJon Beniston <jon@beniston.com>2014-03-02 19:58:24 +0000
committerJon Beniston <jbeniston@gcc.gnu.org>2014-03-02 19:58:24 +0000
commit9b0af790b789de605f6f7d818b375e50cf0c2904 (patch)
tree85fb1a7ef0c849a11e4a88540aa5bf9c8ac5bb35 /gcc
parentf1e443c838503fe4c8e47bb3c54dd97f6e7b8aa7 (diff)
downloadgcc-9b0af790b789de605f6f7d818b375e50cf0c2904.zip
gcc-9b0af790b789de605f6f7d818b375e50cf0c2904.tar.gz
gcc-9b0af790b789de605f6f7d818b375e50cf0c2904.tar.bz2
re PR bootstrap/48230 (bootstrapping gcc-4.6.0-RC-20110321 fails for lm32-rtems*)
PR bootstrap/48230 PR bootstrap/50927 PR bootstrap/52466 PR target/46898 * config/lm32/lm32.c (lm32_legitimate_constant_p): Remove, as incorrect. (TARGET_LEGITIMATE_CONSTANT_P): Undefine, as not needed. * config/lm32/lm32.md (movsi_insn): Add 32-bit immediate support. (simple_return, *simple_return): New patterns * config/lm32/predicates.md (movsi_rhs_operand): Remove as obsolete. * configure.ac (force_sjlj_exceptions): Force sjlj exceptions for lm32. From-SVN: r208260
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/config/lm32/lm32.c15
-rw-r--r--gcc/config/lm32/lm32.md30
-rw-r--r--gcc/config/lm32/predicates.md5
-rw-r--r--gcc/configure.ac4
5 files changed, 42 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f9a644a..4224c01 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2014-03-02 Jon Beniston <jon@beniston.com>
+
+ PR bootstrap/48230
+ PR bootstrap/50927
+ PR bootstrap/52466
+ PR target/46898
+ * config/lm32/lm32.c (lm32_legitimate_constant_p): Remove, as incorrect.
+ (TARGET_LEGITIMATE_CONSTANT_P): Undefine, as not needed.
+ * config/lm32/lm32.md (movsi_insn): Add 32-bit immediate support.
+ (simple_return, *simple_return): New patterns
+ * config/lm32/predicates.md (movsi_rhs_operand): Remove as obsolete.
+ * configure.ac (force_sjlj_exceptions): Force sjlj exceptions for lm32.
+
2014-03-01 Paolo Carlini <paolo.carlini@oracle.com>
* dwarf2out.c (gen_subprogram_die): Tidy.
diff --git a/gcc/config/lm32/lm32.c b/gcc/config/lm32/lm32.c
index ab0c7f7..4f6aba1 100644
--- a/gcc/config/lm32/lm32.c
+++ b/gcc/config/lm32/lm32.c
@@ -82,7 +82,6 @@ static rtx lm32_function_arg (cumulative_args_t cum,
static void lm32_function_arg_advance (cumulative_args_t cum,
enum machine_mode mode,
const_tree type, bool named);
-static bool lm32_legitimate_constant_p (enum machine_mode, rtx);
#undef TARGET_OPTION_OVERRIDE
#define TARGET_OPTION_OVERRIDE lm32_option_override
@@ -110,8 +109,6 @@ static bool lm32_legitimate_constant_p (enum machine_mode, rtx);
#define TARGET_CAN_ELIMINATE lm32_can_eliminate
#undef TARGET_LEGITIMATE_ADDRESS_P
#define TARGET_LEGITIMATE_ADDRESS_P lm32_legitimate_address_p
-#undef TARGET_LEGITIMATE_CONSTANT_P
-#define TARGET_LEGITIMATE_CONSTANT_P lm32_legitimate_constant_p
struct gcc_target targetm = TARGET_INITIALIZER;
@@ -1228,15 +1225,3 @@ lm32_move_ok (enum machine_mode mode, rtx operands[2]) {
return register_or_zero_operand (operands[1], mode);
return true;
}
-
-/* Implement TARGET_LEGITIMATE_CONSTANT_P. */
-
-static bool
-lm32_legitimate_constant_p (enum machine_mode mode, rtx x)
-{
- /* 32-bit addresses require multiple instructions. */
- if (!flag_pic && reloc_operand (x, mode))
- return false;
-
- return true;
-}
diff --git a/gcc/config/lm32/lm32.md b/gcc/config/lm32/lm32.md
index 8b687cf..26d1682 100644
--- a/gcc/config/lm32/lm32.md
+++ b/gcc/config/lm32/lm32.md
@@ -293,8 +293,8 @@
)
(define_insn "movsi_insn"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,m,r,r,r,r,r")
- (match_operand:SI 1 "movsi_rhs_operand" "m,r,r,J,K,L,U,S,Y"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,m,r,r,r,r,r,r")
+ (match_operand:SI 1 "general_operand" "m,r,r,J,K,L,U,S,Y,n"))]
"lm32_move_ok (SImode, operands)"
"@
lw %0, %1
@@ -305,8 +305,9 @@
ori %0, r0, %1
orhi %0, r0, hi(%1)
mva %0, gp(%1)
- orhi %0, r0, hi(%1)"
- [(set_attr "type" "load,arith,store,store,arith,arith,arith,arith,arith")]
+ orhi %0, r0, hi(%1)
+ ori %0, r0, lo(%1); orhi %0, %0, hi(%1)"
+ [(set_attr "type" "load,arith,store,store,arith,arith,arith,arith,arith,arith")]
)
;; ---------------------------------
@@ -636,9 +637,28 @@
[(set_attr "type" "uibranch")]
)
-(define_insn "return"
+(define_expand "return"
[(return)]
"lm32_can_use_return ()"
+ ""
+)
+
+(define_expand "simple_return"
+ [(simple_return)]
+ ""
+ ""
+)
+
+(define_insn "*return"
+ [(return)]
+ "reload_completed"
+ "ret"
+ [(set_attr "type" "uibranch")]
+)
+
+(define_insn "*simple_return"
+ [(simple_return)]
+ ""
"ret"
[(set_attr "type" "uibranch")]
)
diff --git a/gcc/config/lm32/predicates.md b/gcc/config/lm32/predicates.md
index a1a4cb0..ad2e462 100644
--- a/gcc/config/lm32/predicates.md
+++ b/gcc/config/lm32/predicates.md
@@ -70,8 +70,3 @@
(ior (match_code "symbol_ref")
(match_operand 0 "register_operand")))
-(define_predicate "movsi_rhs_operand"
- (ior (match_operand 0 "nonimmediate_operand")
- (ior (match_code "const_int")
- (ior (match_test "satisfies_constraint_S (op)")
- (match_test "satisfies_constraint_Y (op)")))))
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 969a8a6..3d7a5c8 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1249,6 +1249,10 @@ force_sjlj_exceptions=yes],
force_sjlj_exceptions=yes
enableval=yes
;;
+ lm32*-*-*)
+ force_sjlj_exceptions=yes
+ enableval=yes
+ ;;
*)
force_sjlj_exceptions=no
;;