This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/49832] [x32] too many memory references for `lea'


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49832

--- Comment #4 from hjl at gcc dot gnu.org <hjl at gcc dot gnu.org> 2011-07-29 16:00:48 UTC ---
Author: hjl
Date: Fri Jul 29 16:00:41 2011
New Revision: 176932

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=176932
Log:
Rewrite x86 lea support for x32.

2011-07-26  Uros Bizjak  <ubizjak@gmail.com>
       H.J. Lu  <hongjiu.lu@intel.com>

    PR target/47381
    PR target/49832
    PR target/49833
    * config/i386/i386.md (i): Change SImode attribute to "e".
    (g): Change SImode attribute to "rme".
    (di): Change SImode attribute to "nF".
    (general_operand): Change SImode attribute to x86_64_general_operand.
    (general_szext_operand): Change SImode attribute to
    x86_64_szext_general_operand.
    (immediate_operand): Change SImode attribute to
    x86_64_immediate_operand.
    (nonmemory_operand): Change SImode attribute to
    x86_64_nonmemory_operand.
    (*movdi_internal_rex64): Remove mode from pic_32bit_operand check.
    (*movsi_internal): Ditto.  Use "e" constraint in alternative 2.
    (*lea_1): Use SWI48 mode iterator.
    (*lea_1_zext): New insn pattern.
    (testsi_ccno_1): Use x86_64_nonmemory_operand predicate for operand 2.
    (*bt<mode>): Ditto.
    (*add<mode>1): Use x86_64_general_operand predicate for operand 2.
    Update operand constraints.
    (addsi_1_zext): Ditto.
    (*add<mode>2): Ditto.
    (*addsi_3_zext): Ditto.
    (*subsi_1_zext): Ditto.
    (*subsi_2_zext): Ditto.
    (*subsi_3_zext): Ditto.
    (*addsi3_carry_zext): Ditto.
    (*<plusminus_insn>si3_zext_cc_overflow): Ditto.
    (*mulsi3_1_zext): Ditto.
    (*andsi_1): Ditto.
    (*andsi_1_zext): Ditto.
    (*andsi_2_zext): Ditto.
    (*<any_or:code>si_1_zext): Ditto.
    (*<any_or:code>si_2_zext): Ditto.
    (*test<mode>_1): Use <general_operand> predicate for operand 1.
    (*and<mode>_2): Ditto.
    (mov<mode>cc): Use  <general_operand> predicate for operands 1 and 2.
    (add->lea splitter): Check operand modes in insn constraint.  Extend
    operands less than SImode wide to SImode.
    (add->lea zext splitter): Do not extend input operands to DImode.
    (*lea_general_1): Handle only QImode and HImode operands.
    (*lea_general_2): Ditto.
    (*lea_general_3): Ditto.
    (*lea_general_1_zext): Remove.
    (*lea_general_2_zext): Ditto.
    (*lea_general_3_zext): Ditto.
    (*lea_general_4): Check operand modes in insn constraint.  Extend
    operands less than SImode wide to SImode.
    (ashift->lea splitter): Ditto.
    * config/i386/i386.c (ix86_print_operand_address): Print address
    registers with 'q' modifier on 64bit targets.
    * config/i386/predicates.md (pic_32bit_opreand): Define as special
    predicate.  Reject non-SI and non-DI modes.

Modified:
    branches/x32/gcc/ChangeLog.x32
    branches/x32/gcc/config/i386/i386.c
    branches/x32/gcc/config/i386/i386.md
    branches/x32/gcc/config/i386/predicates.md


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]