aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChen Liqin <liqin@sunnorth.com.cn>2007-05-23 06:09:20 +0000
committerChen Liqin <liqin@gcc.gnu.org>2007-05-23 06:09:20 +0000
commit6d0ceb7638fa91572e3fb39d957f0ff404bc4619 (patch)
treeaca436d9f67d652a8b921381597d788379fdefe7 /gcc
parentb80cca7b47325f8c46d6f35c0a5d7aa17a28e7c5 (diff)
downloadgcc-6d0ceb7638fa91572e3fb39d957f0ff404bc4619.zip
gcc-6d0ceb7638fa91572e3fb39d957f0ff404bc4619.tar.gz
gcc-6d0ceb7638fa91572e3fb39d957f0ff404bc4619.tar.bz2
re PR target/30987 (Problem while compiling gcc for score)
2007-05-23 Chen Liqin <liqin@sunnorth.com.cn> PR target/30987 * config/score/misc.md (bitclr_c, bitset_c, bittgl_c): remove. * config/score/predicate.md (const_pow2, const_npow2): remove. * config/score/score.h (ASM_OUTPUT_EXTERNAL): add ASM_OUTPUT_EXTERNAL undef. PR target/30474 * config/score/score.c (score_print_operand): makes sure that only lower bits are used. From-SVN: r124983
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/score/misc.md35
-rw-r--r--gcc/config/score/predicates.md11
-rw-r--r--gcc/config/score/score.c4
-rw-r--r--gcc/config/score/score.h1
5 files changed, 13 insertions, 48 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab1dc58..52da89f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2007-05-23 Chen Liqin <liqin@sunnorth.com.cn>
+
+ PR target/30987
+ * config/score/misc.md (bitclr_c, bitset_c, bittgl_c): remove.
+ * config/score/predicate.md (const_pow2, const_npow2): remove.
+ * config/score/score.h (ASM_OUTPUT_EXTERNAL): add ASM_OUTPUT_EXTERNAL undef.
+ PR target/30474
+ * config/score/score.c (score_print_operand): makes sure that only lower
+ bits are used.
+
2007-05-22 Ian Lance Taylor <iant@google.com>
* tree-vrp.c (avoid_overflow_infinity): New static function,
diff --git a/gcc/config/score/misc.md b/gcc/config/score/misc.md
index 5da7240..b43497f 100644
--- a/gcc/config/score/misc.md
+++ b/gcc/config/score/misc.md
@@ -380,38 +380,3 @@
[(set_attr "type" "arith")
(set_attr "mode" "SI")])
-(define_insn "bitclr_c"
- [(set (match_operand:SI 0 "register_operand" "=e,d")
- (and:SI (match_operand:SI 1 "register_operand" "0,d")
- (match_operand:SI 2 "const_npow2")))
- (clobber (reg:CC CC_REGNUM))]
- ""
- "@
- bitclr! %0, %F2
- bitclr.c %0, %1, %F2"
- [(set_attr "type" "arith")
- (set_attr "mode" "SI")])
-
-(define_insn "bitset_c"
- [(set (match_operand:SI 0 "register_operand" "=e,d")
- (ior:SI (match_operand:SI 1 "register_operand" "0,d")
- (match_operand:SI 2 "const_pow2")))
- (clobber (reg:CC CC_REGNUM))]
- ""
- "@
- bitset! %0, %E2
- bitset.c %0, %1, %E2"
- [(set_attr "type" "arith")
- (set_attr "mode" "SI")])
-
-(define_insn "bittgl_c"
- [(set (match_operand:SI 0 "register_operand" "=e,d")
- (xor:SI (match_operand:SI 1 "register_operand" "0,d")
- (match_operand:SI 2 "const_pow2")))
- (clobber (reg:CC CC_REGNUM))]
- ""
- "@
- bittgl! %0, %E2
- bittgl.c %0, %1, %E2"
- [(set_attr "type" "arith")
- (set_attr "mode" "SI")])
diff --git a/gcc/config/score/predicates.md b/gcc/config/score/predicates.md
index eefb497..07c4b43 100644
--- a/gcc/config/score/predicates.md
+++ b/gcc/config/score/predicates.md
@@ -75,14 +75,3 @@
return IMM_IN_RANGE (INTVAL (op), 15, 1);
})
-(define_predicate "const_pow2"
- (match_code "const_int")
-{
- return IMM_IS_POW_OF_2 ((unsigned HOST_WIDE_INT) INTVAL (op), 0, 31);
-})
-
-(define_predicate "const_npow2"
- (match_code "const_int")
-{
- return IMM_IS_POW_OF_2 (~(unsigned HOST_WIDE_INT) INTVAL (op), 0, 31);
-})
diff --git a/gcc/config/score/score.c b/gcc/config/score/score.c
index 9fc179e..2d6f721 100644
--- a/gcc/config/score/score.c
+++ b/gcc/config/score/score.c
@@ -1167,7 +1167,7 @@ score_print_operand (FILE *file, rtx op, int c)
{
gcc_assert (code == CONST_INT);
fprintf (file, HOST_WIDE_INT_PRINT_HEX,
- (unsigned HOST_WIDE_INT) INTVAL (op) >> 16);
+ (INTVAL (op) >> 16) & 0xffff);
}
else if (c == 'D')
{
@@ -1175,7 +1175,7 @@ score_print_operand (FILE *file, rtx op, int c)
{
rtx temp = gen_lowpart (SImode, op);
gcc_assert (GET_MODE (op) == SFmode);
- fprintf (file, HOST_WIDE_INT_PRINT_HEX, INTVAL (temp));
+ fprintf (file, HOST_WIDE_INT_PRINT_HEX, INTVAL (temp) & 0xffffffff);
}
else
output_addr_const (file, op);
diff --git a/gcc/config/score/score.h b/gcc/config/score/score.h
index eb3b4f5..3d36a38 100644
--- a/gcc/config/score/score.h
+++ b/gcc/config/score/score.h
@@ -785,6 +785,7 @@ typedef struct score_args
output anything and let undefined symbol become external. However
the assembler uses length information on externals to allocate in
data/sdata bss/sbss, thereby saving exec time. */
+#undef ASM_OUTPUT_EXTERNAL
#define ASM_OUTPUT_EXTERNAL(STREAM, DECL, NAME) \
score_output_external (STREAM, DECL, NAME)