This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Assertify v850
- From: Nathan Sidwell <nathan at codesourcery dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, Nick Clifton <nickc at redhat dot com>
- Date: Sat, 07 May 2005 12:01:36 +0100
- Subject: Assertify v850
This one does the v850 target files. Again I tested with i686 hosted cross
tools. Unfortunately newlib builds with
../../../../../../src/newlib/libc/stdlib/strtod.c: In function '_strtod_r':
../../../../../../src/newlib/libc/stdlib/strtod.c:732: error: unrecognizable insn:
(jump_insn 33 1999 34 2 ../../../../../../src/newlib/libc/stdlib/strtod.c:126 (set (pc)
(plus:SI (sign_extend:SI (mem:HI (plus:SI (mult:SI (reg:SI 149)
(const_int 2 [0x2]))
(label_ref 34)) [0 S2 A16]))
(label_ref 34))) -1 (nil)
(expr_list:REG_DEAD (reg:SI 149)
(nil)))
both with and without the patch. ok?
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
2005-05-07 Nathan Sidwell <nathan@codesourcery.com>
* config/v850/v850.c (print_operand): Use gcc_assert and
gcc_unreachable, as appropriate.
(print_operand_address, v850_handle_data_area_attribute,
v850_encode_data_area, construct_restore_jr, construct_save_jarl,
v850_insert_attributes, construct_prepare_instruction): Likewise.
* config/v850/v850.h (INITIAL_ELIMINATION_OFFSET): Likewise.
* config/v850/v850.md (movsicc, *sasf_1): Likewise.
Index: config/v850/v850.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/v850/v850.c,v
retrieving revision 1.100
diff -c -3 -p -r1.100 v850.c
*** config/v850/v850.c 23 Apr 2005 21:28:44 -0000 1.100
--- config/v850/v850.c 7 May 2005 10:56:50 -0000
*************** print_operand (FILE * file, rtx x, int c
*** 518,547 ****
fprintf (file, "l");
break;
default:
! abort ();
}
break;
case 'F': /* high word of CONST_DOUBLE */
! if (GET_CODE (x) == CONST_INT)
! fprintf (file, "%d", (INTVAL (x) >= 0) ? 0 : -1);
! else if (GET_CODE (x) == CONST_DOUBLE)
{
const_double_split (x, &high, &low);
fprintf (file, "%ld", (long) high);
}
- else
- abort ();
break;
case 'G': /* low word of CONST_DOUBLE */
! if (GET_CODE (x) == CONST_INT)
! fprintf (file, "%ld", (long) INTVAL (x));
! else if (GET_CODE (x) == CONST_DOUBLE)
{
const_double_split (x, &high, &low);
fprintf (file, "%ld", (long) low);
}
- else
- abort ();
break;
case 'L':
fprintf (file, "%d\n", (int)(INTVAL (x) & 0xffff));
--- 518,557 ----
fprintf (file, "l");
break;
default:
! gcc_unreachable ();
}
break;
case 'F': /* high word of CONST_DOUBLE */
! switch (GET_CODE (x))
{
+ case CONST_INT:
+ fprintf (file, "%d", (INTVAL (x) >= 0) ? 0 : -1);
+ break;
+
+ case CONST_DOUBLE:
const_double_split (x, &high, &low);
fprintf (file, "%ld", (long) high);
+ break;
+
+ default:
+ gcc_unreachable ();
}
break;
case 'G': /* low word of CONST_DOUBLE */
! switch (GET_CODE (x))
{
+ case CONST_INT:
+ fprintf (file, "%ld", (long) INTVAL (x));
+ break;
+
+ case CONST_DOUBLE:
const_double_split (x, &high, &low);
fprintf (file, "%ld", (long) low);
+ break;
+
+ default:
+ gcc_unreachable ();
}
break;
case 'L':
fprintf (file, "%d\n", (int)(INTVAL (x) & 0xffff));
*************** print_operand (FILE * file, rtx x, int c
*** 550,603 ****
fprintf (file, "%d", exact_log2 (INTVAL (x)));
break;
case 'O':
! if (special_symbolref_operand (x, VOIDmode))
! {
! if (GET_CODE (x) == SYMBOL_REF)
! ;
! else if (GET_CODE (x) == CONST)
! x = XEXP (XEXP (x, 0), 0);
! else
! abort ();
!
! if (SYMBOL_REF_ZDA_P (x))
! fprintf (file, "zdaoff");
! else if (SYMBOL_REF_SDA_P (x))
! fprintf (file, "sdaoff");
! else if (SYMBOL_REF_TDA_P (x))
! fprintf (file, "tdaoff");
! else
! abort ();
! }
else
! abort ();
break;
case 'P':
! if (special_symbolref_operand (x, VOIDmode))
! output_addr_const (file, x);
! else
! abort ();
break;
case 'Q':
! if (special_symbolref_operand (x, VOIDmode))
! {
! if (GET_CODE (x) == SYMBOL_REF)
! ;
! else if (GET_CODE (x) == CONST)
! x = XEXP (XEXP (x, 0), 0);
! else
! abort ();
!
! if (SYMBOL_REF_ZDA_P (x))
! fprintf (file, "r0");
! else if (SYMBOL_REF_SDA_P (x))
! fprintf (file, "gp");
! else if (SYMBOL_REF_TDA_P (x))
! fprintf (file, "ep");
! else
! abort ();
! }
else
! abort ();
break;
case 'R': /* 2nd word of a double. */
switch (GET_CODE (x))
--- 560,601 ----
fprintf (file, "%d", exact_log2 (INTVAL (x)));
break;
case 'O':
! gcc_assert (special_symbolref_operand (x, VOIDmode));
!
! if (GET_CODE (x) == CONST)
! x = XEXP (XEXP (x, 0), 0);
! else
! gcc_assert (GET_CODE (x) == SYMBOL_REF);
!
! if (SYMBOL_REF_ZDA_P (x))
! fprintf (file, "zdaoff");
! else if (SYMBOL_REF_SDA_P (x))
! fprintf (file, "sdaoff");
! else if (SYMBOL_REF_TDA_P (x))
! fprintf (file, "tdaoff");
else
! gcc_unreachable ();
break;
case 'P':
! gcc_assert (special_symbolref_operand (x, VOIDmode));
! output_addr_const (file, x);
break;
case 'Q':
! gcc_assert (special_symbolref_operand (x, VOIDmode));
!
! if (GET_CODE (x) == CONST)
! x = XEXP (XEXP (x, 0), 0);
else
! gcc_assert (GET_CODE (x) == SYMBOL_REF);
!
! if (SYMBOL_REF_ZDA_P (x))
! fprintf (file, "r0");
! else if (SYMBOL_REF_SDA_P (x))
! fprintf (file, "gp");
! else if (SYMBOL_REF_TDA_P (x))
! fprintf (file, "ep");
! else
! gcc_unreachable ();
break;
case 'R': /* 2nd word of a double. */
switch (GET_CODE (x))
*************** print_operand (FILE * file, rtx x, int c
*** 636,642 ****
switch (GET_MODE (x))
{
default:
! abort ();
case QImode: fputs (".b", file); break;
case HImode: fputs (".h", file); break;
--- 634,640 ----
switch (GET_MODE (x))
{
default:
! gcc_unreachable ();
case QImode: fputs (".b", file); break;
case HImode: fputs (".h", file); break;
*************** print_operand (FILE * file, rtx x, int c
*** 648,659 ****
fputs (reg_names[0], file);
break;
case 'z': /* reg or zero */
! if (x == const0_rtx)
! fputs (reg_names[0], file);
! else if (GET_CODE (x) == REG)
fputs (reg_names[REGNO (x)], file);
else
! abort ();
break;
default:
switch (GET_CODE (x))
--- 646,658 ----
fputs (reg_names[0], file);
break;
case 'z': /* reg or zero */
! if (GET_CODE (x) == REG)
fputs (reg_names[REGNO (x)], file);
else
! {
! gcc_assert (x == const0_rtx);
! fputs (reg_names[0], file);
! }
break;
default:
switch (GET_CODE (x))
*************** print_operand (FILE * file, rtx x, int c
*** 680,686 ****
print_operand_address (file, x);
break;
default:
! abort ();
}
break;
--- 679,685 ----
print_operand_address (file, x);
break;
default:
! gcc_unreachable ();
}
break;
*************** print_operand_address (FILE * file, rtx
*** 779,785 ****
reg_name = "ep";
}
else
! abort ();
fprintf (file, "%s(", off_name);
output_addr_const (file, addr);
--- 778,784 ----
reg_name = "ep";
}
else
! gcc_unreachable ();
fprintf (file, "%s(", off_name);
output_addr_const (file, addr);
*************** v850_handle_data_area_attribute (tree* n
*** 2131,2137 ****
else if (is_attribute_p ("zda", name))
data_area = DATA_AREA_ZDA;
else
! abort ();
switch (TREE_CODE (decl))
{
--- 2130,2136 ----
else if (is_attribute_p ("zda", name))
data_area = DATA_AREA_ZDA;
else
! gcc_unreachable ();
switch (TREE_CODE (decl))
{
*************** v850_encode_data_area (tree decl, rtx sy
*** 2246,2252 ****
case DATA_AREA_ZDA: flags |= SYMBOL_FLAG_ZDA; break;
case DATA_AREA_TDA: flags |= SYMBOL_FLAG_TDA; break;
case DATA_AREA_SDA: flags |= SYMBOL_FLAG_SDA; break;
! default: abort ();
}
SYMBOL_REF_FLAGS (symbol) = flags;
}
--- 2245,2251 ----
case DATA_AREA_ZDA: flags |= SYMBOL_FLAG_ZDA; break;
case DATA_AREA_TDA: flags |= SYMBOL_FLAG_TDA; break;
case DATA_AREA_SDA: flags |= SYMBOL_FLAG_SDA; break;
! default: gcc_unreachable ();
}
SYMBOL_REF_FLAGS (symbol) = flags;
}
*************** construct_restore_jr (rtx op)
*** 2285,2296 ****
/* Work out how many bytes to pop off the stack before retrieving
registers. */
! if (GET_CODE (XVECEXP (op, 0, 1)) != SET)
! abort ();
! if (GET_CODE (SET_SRC (XVECEXP (op, 0, 1))) != PLUS)
! abort ();
! if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1)) != CONST_INT)
! abort ();
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1));
--- 2284,2292 ----
/* Work out how many bytes to pop off the stack before retrieving
registers. */
! gcc_assert (GET_CODE (XVECEXP (op, 0, 1)) == SET);
! gcc_assert (GET_CODE (SET_SRC (XVECEXP (op, 0, 1))) == PLUS);
! gcc_assert (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1)) == CONST_INT);
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1));
*************** construct_restore_jr (rtx op)
*** 2310,2321 ****
{
rtx vector_element = XVECEXP (op, 0, i);
! if (GET_CODE (vector_element) != SET)
! abort ();
! if (GET_CODE (SET_DEST (vector_element)) != REG)
! abort ();
! if (! register_is_ok_for_epilogue (SET_DEST (vector_element), SImode))
! abort ();
mask |= 1 << REGNO (SET_DEST (vector_element));
}
--- 2306,2315 ----
{
rtx vector_element = XVECEXP (op, 0, i);
! gcc_assert (GET_CODE (vector_element) == SET);
! gcc_assert (GET_CODE (SET_DEST (vector_element)) == REG);
! gcc_assert (register_is_ok_for_epilogue (SET_DEST (vector_element),
! SImode));
mask |= 1 << REGNO (SET_DEST (vector_element));
}
*************** construct_restore_jr (rtx op)
*** 2327,2350 ****
break;
}
! if (first >= 32)
! abort ();
/* Discover the last register to pop. */
if (mask & (1 << LINK_POINTER_REGNUM))
{
! if (stack_bytes != 16)
! abort ();
last = LINK_POINTER_REGNUM;
}
else
{
! if (stack_bytes != 0)
! abort ();
!
! if ((mask & (1 << 29)) == 0)
! abort ();
last = 29;
}
--- 2321,2339 ----
break;
}
! gcc_assert (first < 32);
/* Discover the last register to pop. */
if (mask & (1 << LINK_POINTER_REGNUM))
{
! gcc_assert (stack_bytes == 16);
last = LINK_POINTER_REGNUM;
}
else
{
! gcc_assert (!stack_bytes);
! gcc_assert (mask & (1 << 29));
last = 29;
}
*************** construct_save_jarl (rtx op)
*** 2401,2414 ****
}
/* Paranoia. */
! if (GET_CODE (XVECEXP (op, 0, 0)) != SET)
! abort ();
! if (GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != PLUS)
! abort ();
! if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 0)) != REG)
! abort ();
! if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1)) != CONST_INT)
! abort ();
/* Work out how many bytes to push onto the stack after storing the
registers. */
--- 2390,2399 ----
}
/* Paranoia. */
! gcc_assert (GET_CODE (XVECEXP (op, 0, 0)) == SET);
! gcc_assert (GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) == PLUS);
! gcc_assert (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 0)) == REG);
! gcc_assert (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1)) == CONST_INT);
/* Work out how many bytes to push onto the stack after storing the
registers. */
*************** construct_save_jarl (rtx op)
*** 2430,2441 ****
{
rtx vector_element = XVECEXP (op, 0, i);
! if (GET_CODE (vector_element) != SET)
! abort ();
! if (GET_CODE (SET_SRC (vector_element)) != REG)
! abort ();
! if (! register_is_ok_for_epilogue (SET_SRC (vector_element), SImode))
! abort ();
mask |= 1 << REGNO (SET_SRC (vector_element));
}
--- 2415,2424 ----
{
rtx vector_element = XVECEXP (op, 0, i);
! gcc_assert (GET_CODE (vector_element) == SET);
! gcc_assert (GET_CODE (SET_SRC (vector_element)) == REG);
! gcc_assert (register_is_ok_for_epilogue (SET_SRC (vector_element),
! SImode));
mask |= 1 << REGNO (SET_SRC (vector_element));
}
*************** construct_save_jarl (rtx op)
*** 2447,2469 ****
break;
}
! if (first >= 32)
! abort ();
/* Discover the last register to push. */
if (mask & (1 << LINK_POINTER_REGNUM))
{
! if (stack_bytes != -16)
! abort ();
last = LINK_POINTER_REGNUM;
}
else
{
! if (stack_bytes != 0)
! abort ();
! if ((mask & (1 << 29)) == 0)
! abort ();
last = 29;
}
--- 2430,2448 ----
break;
}
! gcc_assert (first < 32);
/* Discover the last register to push. */
if (mask & (1 << LINK_POINTER_REGNUM))
{
! gcc_assert (stack_bytes == -16);
last = LINK_POINTER_REGNUM;
}
else
{
! gcc_assert (!stack_bytes);
! gcc_assert (mask & (1 << 29));
last = 29;
}
*************** v850_insert_attributes (tree decl, tree
*** 2642,2648 ****
switch (v850_get_data_area (decl))
{
default:
! abort ();
case DATA_AREA_SDA:
kind = ((TREE_READONLY (decl))
--- 2621,2627 ----
switch (v850_get_data_area (decl))
{
default:
! gcc_unreachable ();
case DATA_AREA_SDA:
kind = ((TREE_READONLY (decl))
*************** construct_dispose_instruction (rtx op)
*** 2711,2722 ****
/* Work out how many bytes to pop off the
stack before retrieving registers. */
! if (GET_CODE (XVECEXP (op, 0, 1)) != SET)
! abort ();
! if (GET_CODE (SET_SRC (XVECEXP (op, 0, 1))) != PLUS)
! abort ();
! if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1)) != CONST_INT)
! abort ();
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1));
--- 2690,2698 ----
/* Work out how many bytes to pop off the
stack before retrieving registers. */
! gcc_assert (GET_CODE (XVECEXP (op, 0, 1)) == SET);
! gcc_assert (GET_CODE (SET_SRC (XVECEXP (op, 0, 1))) == PLUS);
! gcc_assert (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1)) == CONST_INT);
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 1)), 1));
*************** construct_dispose_instruction (rtx op)
*** 2738,2749 ****
{
rtx vector_element = XVECEXP (op, 0, i);
! if (GET_CODE (vector_element) != SET)
! abort ();
! if (GET_CODE (SET_DEST (vector_element)) != REG)
! abort ();
! if (! register_is_ok_for_epilogue (SET_DEST (vector_element), SImode))
! abort ();
if (REGNO (SET_DEST (vector_element)) == 2)
use_callt = 1;
--- 2714,2723 ----
{
rtx vector_element = XVECEXP (op, 0, i);
! gcc_assert (GET_CODE (vector_element) == SET);
! gcc_assert (GET_CODE (SET_DEST (vector_element)) == REG);
! gcc_assert (register_is_ok_for_epilogue (SET_DEST (vector_element),
! SImode));
if (REGNO (SET_DEST (vector_element)) == 2)
use_callt = 1;
*************** construct_prepare_instruction (rtx op)
*** 2837,2848 ****
/* Work out how many bytes to push onto
the stack after storing the registers. */
! if (GET_CODE (XVECEXP (op, 0, 0)) != SET)
! abort ();
! if (GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) != PLUS)
! abort ();
! if (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1)) != CONST_INT)
! abort ();
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1));
--- 2811,2819 ----
/* Work out how many bytes to push onto
the stack after storing the registers. */
! gcc_assert (GET_CODE (XVECEXP (op, 0, 0)) == SET);
! gcc_assert (GET_CODE (SET_SRC (XVECEXP (op, 0, 0))) == PLUS);
! gcc_assert (GET_CODE (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1)) == CONST_INT);
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1));
*************** construct_prepare_instruction (rtx op)
*** 2863,2874 ****
{
rtx vector_element = XVECEXP (op, 0, i);
! if (GET_CODE (vector_element) != SET)
! abort ();
! if (GET_CODE (SET_SRC (vector_element)) != REG)
! abort ();
! if (! register_is_ok_for_epilogue (SET_SRC (vector_element), SImode))
! abort ();
if (REGNO (SET_SRC (vector_element)) == 2)
use_callt = 1;
--- 2834,2843 ----
{
rtx vector_element = XVECEXP (op, 0, i);
! gcc_assert (GET_CODE (vector_element) == SET);
! gcc_assert (GET_CODE (SET_SRC (vector_element)) == REG);
! gcc_assert (register_is_ok_for_epilogue (SET_SRC (vector_element),
! SImode));
if (REGNO (SET_SRC (vector_element)) == 2)
use_callt = 1;
Index: config/v850/v850.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/v850/v850.h,v
retrieving revision 1.103
diff -c -3 -p -r1.103 v850.h
*** config/v850/v850.h 6 Apr 2005 09:40:41 -0000 1.103
--- config/v850/v850.h 7 May 2005 10:56:55 -0000
*************** enum reg_class
*** 554,560 ****
else if ((FROM) == ARG_POINTER_REGNUM) \
(OFFSET) = compute_frame_size (get_frame_size (), (long *)0); \
else \
! abort (); \
}
/* Keep the stack pointer constant throughout the function. */
--- 554,560 ----
else if ((FROM) == ARG_POINTER_REGNUM) \
(OFFSET) = compute_frame_size (get_frame_size (), (long *)0); \
else \
! gcc_unreachable (); \
}
/* Keep the stack pointer constant throughout the function. */
Index: config/v850/v850.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/v850/v850.md,v
retrieving revision 1.32
diff -c -3 -p -r1.32 v850.md
*** config/v850/v850.md 21 Mar 2005 18:01:29 -0000 1.32
--- config/v850/v850.md 7 May 2005 10:56:57 -0000
***************
*** 876,881 ****
--- 876,882 ----
"
{
rtx insn = get_last_insn_anywhere ();
+ rtx src;
if ( (GET_CODE (operands[2]) == CONST_INT
&& GET_CODE (operands[3]) == CONST_INT))
***************
*** 903,930 ****
if (GET_CODE (operands[3]) != REG)
operands[3] = copy_to_mode_reg (SImode, operands[3]);
}
! if (GET_CODE (insn) == INSN
! && GET_CODE (PATTERN (insn)) == SET
! && SET_DEST (PATTERN (insn)) == cc0_rtx)
{
! rtx src = SET_SRC (PATTERN (insn));
! if (GET_CODE (src) == COMPARE)
! {
! operands[4] = XEXP (src, 0);
! operands[5] = XEXP (src, 1);
! }
! else if (GET_CODE (src) == REG
! || GET_CODE (src) == SUBREG)
! {
! operands[4] = src;
! operands[5] = const0_rtx;
! }
! else
! abort ();
}
- else
- abort ();
}")
;; ??? Clobbering the condition codes is overkill.
--- 904,931 ----
if (GET_CODE (operands[3]) != REG)
operands[3] = copy_to_mode_reg (SImode, operands[3]);
}
! gcc_assert (GET_CODE (insn) == INSN
! && GET_CODE (PATTERN (insn)) == SET
! && SET_DEST (PATTERN (insn)) == cc0_rtx);
!
! src = SET_SRC (PATTERN (insn));
!
! switch (GET_CODE (src))
{
! case COMPARE:
! operands[4] = XEXP (src, 0);
! operands[5] = XEXP (src, 1);
! break;
!
! case REG:
! case SUBREG:
! operands[4] = src;
! operands[5] = const0_rtx;
! break;
! default:
! gcc_unreachable ();
}
}")
;; ??? Clobbering the condition codes is overkill.
***************
*** 1002,1008 ****
(ashift:SI (match_operand:SI 2 "register_operand" "")
(const_int 1))))]
"TARGET_V850E"
! "* abort ();")
(define_insn "*sasf_2"
[(set (match_operand:SI 0 "register_operand" "=r")
--- 1003,1009 ----
(ashift:SI (match_operand:SI 2 "register_operand" "")
(const_int 1))))]
"TARGET_V850E"
! "* gcc_unreachable ();")
(define_insn "*sasf_2"
[(set (match_operand:SI 0 "register_operand" "=r")