| Index: gcc-4.2.2/gcc/config/avr32/avr32.c |
| =================================================================== |
| --- gcc-4.2.2.orig/gcc/config/avr32/avr32.c 2008-09-19 14:29:20.000000000 +0200 |
| +++ gcc-4.2.2/gcc/config/avr32/avr32.c 2008-09-19 14:30:02.000000000 +0200 |
| @@ -1788,7 +1788,7 @@ |
| { |
| if (TREE_CODE (*node) != FUNCTION_DECL) |
| { |
| - warning ("`%s' attribute only applies to functions", |
| + warning (OPT_Wattributes,"`%s' attribute only applies to functions", |
| IDENTIFIER_POINTER (name)); |
| *no_add_attrs = true; |
| } |
| @@ -1802,7 +1802,7 @@ |
| { |
| if (avr32_isr_value (args) == AVR32_FT_UNKNOWN) |
| { |
| - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); |
| + warning (OPT_Wattributes,"`%s' attribute ignored", IDENTIFIER_POINTER (name)); |
| *no_add_attrs = true; |
| } |
| } |
| @@ -1829,7 +1829,7 @@ |
| } |
| else |
| { |
| - warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); |
| + warning (OPT_Wattributes,"`%s' attribute ignored", IDENTIFIER_POINTER (name)); |
| } |
| } |
| } |
| @@ -1847,7 +1847,7 @@ |
| { |
| if (TREE_CODE (*node) != FUNCTION_DECL) |
| { |
| - warning ("%qs attribute only applies to functions", |
| + warning (OPT_Wattributes,"%qs attribute only applies to functions", |
| IDENTIFIER_POINTER (name)); |
| *no_add_attrs = true; |
| } |
| @@ -1866,13 +1866,13 @@ |
| { |
| if (TREE_CODE (*node) == FUNCTION_TYPE || TREE_CODE (*node) == METHOD_TYPE) |
| { |
| - warning ("`%s' attribute not yet supported...", |
| + warning (OPT_Wattributes,"`%s' attribute not yet supported...", |
| IDENTIFIER_POINTER (name)); |
| *no_add_attrs = true; |
| return NULL_TREE; |
| } |
| |
| - warning ("`%s' attribute only applies to functions", |
| + warning (OPT_Wattributes,"`%s' attribute only applies to functions", |
| IDENTIFIER_POINTER (name)); |
| *no_add_attrs = true; |
| return NULL_TREE; |
| @@ -4215,51 +4215,6 @@ |
| |
| |
| void |
| -avr32_asm_output_ascii (FILE * stream, char *ptr, int len) |
| -{ |
| - int i, i_new = 0; |
| - char *new_ptr = xmalloc (4 * len); |
| - if (new_ptr == NULL) |
| - internal_error ("Out of memory."); |
| - |
| - for (i = 0; i < len; i++) |
| - { |
| - if (ptr[i] == '\n') |
| - { |
| - new_ptr[i_new++] = '\\'; |
| - new_ptr[i_new++] = '0'; |
| - new_ptr[i_new++] = '1'; |
| - new_ptr[i_new++] = '2'; |
| - } |
| - else if (ptr[i] == '\"') |
| - { |
| - new_ptr[i_new++] = '\\'; |
| - new_ptr[i_new++] = '\"'; |
| - } |
| - else if (ptr[i] == '\\') |
| - { |
| - new_ptr[i_new++] = '\\'; |
| - new_ptr[i_new++] = '\\'; |
| - } |
| - else if (ptr[i] == '\0' && i + 1 < len) |
| - { |
| - new_ptr[i_new++] = '\\'; |
| - new_ptr[i_new++] = '0'; |
| - } |
| - else |
| - { |
| - new_ptr[i_new++] = ptr[i]; |
| - } |
| - } |
| - |
| - /* Terminate new_ptr. */ |
| - new_ptr[i_new] = '\0'; |
| - fprintf (stream, "\t.ascii\t\"%s\"\n", new_ptr); |
| - free (new_ptr); |
| -} |
| - |
| - |
| -void |
| avr32_asm_output_label (FILE * stream, const char *name) |
| { |
| name = avr32_strip_name_encoding (name); |
| @@ -4444,12 +4399,15 @@ |
| rtx cmp; |
| rtx cmp_op0, cmp_op1; |
| rtx cond; |
| + rtx dest; |
| + |
| if ( GET_CODE (exp) == COND_EXEC ) |
| { |
| cmp_op0 = XEXP (COND_EXEC_TEST (exp), 0); |
| cmp_op1 = XEXP (COND_EXEC_TEST (exp), 1); |
| cond = COND_EXEC_TEST (exp); |
| - } |
| + dest = SET_DEST (COND_EXEC_CODE (exp)); |
| + } |
| else |
| { |
| /* If then else conditional. compare operands are in operands |
| @@ -4457,6 +4415,7 @@ |
| cmp_op0 = recog_data.operand[4]; |
| cmp_op1 = recog_data.operand[5]; |
| cond = recog_data.operand[1]; |
| + dest = SET_DEST (exp); |
| } |
| |
| if ( GET_CODE (cmp_op0) == AND ) |
| @@ -4466,7 +4425,15 @@ |
| cmp_op0, |
| cmp_op1); |
| |
| - if (is_compare_redundant (cmp, cond) == NULL_RTX) |
| + /* Check if the conditional insns updates a register present |
| + in the comparison, if so then we must reset the cc_status. */ |
| + if (REG_P (dest) |
| + && (reg_mentioned_p (dest, cmp_op0) |
| + || reg_mentioned_p (dest, cmp_op1))) |
| + { |
| + CC_STATUS_INIT; |
| + } |
| + else if (is_compare_redundant (cmp, cond) == NULL_RTX) |
| { |
| /* Reset the nonstandard flag */ |
| CC_STATUS_INIT; |