Commit c8b94768 by Richard Henderson Committed by Richard Henderson

re PR rtl-optimization/190 (Optimization bug for x86 target)

        PR opt/190
        * final.c (this_is_asm_operands): Export.
        * output.h (this_is_asm_operands): Declare.
        * config/i386/i386.c (print_operand): Error odd asm operands.

From-SVN: r51741
parent 9cb88bc2
2002-04-02 Richard Henderson <rth@redhat.com> 2002-04-02 Richard Henderson <rth@redhat.com>
PR opt/190
* final.c (this_is_asm_operands): Export.
* output.h (this_is_asm_operands): Declare.
* config/i386/i386.c (print_operand): Error odd asm operands.
2002-04-02 Richard Henderson <rth@redhat.com>
PR opt/420 PR opt/420
* config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra. * config/m68k/m68k.md (dbcc peepholes): Match four forms of dbra.
......
...@@ -5995,6 +5995,8 @@ print_operand (file, x, code) ...@@ -5995,6 +5995,8 @@ print_operand (file, x, code)
else if (CONSTANT_ADDRESS_P (x) && code =='P' else if (CONSTANT_ADDRESS_P (x) && code =='P'
&& GET_CODE (x) != CONST_INT) && GET_CODE (x) != CONST_INT)
output_addr_const (file, x); output_addr_const (file, x);
else if (this_is_asm_operands && ! address_operand (x, VOIDmode))
output_operand_lossage ("invalid constraints for operand");
else else
output_address (x); output_address (x);
} }
......
...@@ -122,7 +122,7 @@ extern int length_unit_log; /* This is defined in insn-attrtab.c. */ ...@@ -122,7 +122,7 @@ extern int length_unit_log; /* This is defined in insn-attrtab.c. */
/* Nonzero while outputting an `asm' with operands. /* Nonzero while outputting an `asm' with operands.
This means that inconsistencies are the user's fault, so don't abort. This means that inconsistencies are the user's fault, so don't abort.
The precise value is the insn being output, to pass to error_for_asm. */ The precise value is the insn being output, to pass to error_for_asm. */
static rtx this_is_asm_operands; rtx this_is_asm_operands;
/* Number of operands of this insn, for an `asm' with operands. */ /* Number of operands of this insn, for an `asm' with operands. */
static unsigned int insn_noperands; static unsigned int insn_noperands;
......
...@@ -465,6 +465,11 @@ extern struct rtx_def *current_insn_predicate; ...@@ -465,6 +465,11 @@ extern struct rtx_def *current_insn_predicate;
/* Last insn processed by final_scan_insn. */ /* Last insn processed by final_scan_insn. */
extern struct rtx_def *current_output_insn; extern struct rtx_def *current_output_insn;
/* Nonzero while outputting an `asm' with operands.
This means that inconsistencies are the user's fault, so don't abort.
The precise value is the insn being output, to pass to error_for_asm. */
extern rtx this_is_asm_operands;
/* Decide whether DECL needs to be in a writable section. RELOC is the same /* Decide whether DECL needs to be in a writable section. RELOC is the same
as for SELECT_SECTION. */ as for SELECT_SECTION. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment