Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1
gcc43
ibm304071-z10-1
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ibm304071-z10-1 of Package gcc43
From gcc-patches-return-218929-listarch-gcc-patches=gcc dot gnu dot org at gcc dot gnu dot org Tue May 27 12:02:57 2008 Return-Path: <gcc-patches-return-218929-listarch-gcc-patches=gcc dot gnu dot org at gcc dot gnu dot org> Delivered-To: listarch-gcc-patches at gcc dot gnu dot org Received: (qmail 22506 invoked by alias); 27 May 2008 12:02:57 -0000 Received: (qmail 22491 invoked by uid 22791); 27 May 2008 12:02:51 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate8.de.ibm.com (HELO mtagate8.de.ibm.com) (195.212.29.157) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 27 May 2008 12:02:25 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate8.de.ibm.com (8.13.8/8.13.8) with ESMTP id m4RC1vlb685348 for <gcc-patches@gcc.gnu.org>; Tue, 27 May 2008 12:01:57 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m4RC1vvA3752188 for <gcc-patches@gcc.gnu.org>; Tue, 27 May 2008 14:01:57 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m4RC1viq021264 for <gcc-patches@gcc.gnu.org>; Tue, 27 May 2008 14:01:57 +0200 Received: from lc4eb0107015440.ibm.com (dyn-9-152-216-52.boeblingen.de.ibm.com [9.152.216.52]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id m4RC1uCO021230 for <gcc-patches@gcc.gnu.org>; Tue, 27 May 2008 14:01:56 +0200 Received: by lc4eb0107015440.ibm.com (sSMTP sendmail emulation); Tue, 27 May 2008 14:02:00 +0200 From: "Andreas Krebbel" <Andreas dot Krebbel at de dot ibm dot com> Date: Tue, 27 May 2008 14:02:00 +0200 To: gcc-patches at gcc dot gnu dot org Subject: [Committed] Introduce TARGET_MEM_CONSTRAINT macro Message-ID: <20080527120200.GC18965@homer.boeblingen.de.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.2i Mailing-List: contact gcc-patches-help at gcc dot gnu dot org; run by ezmlm Precedence: bulk List-Id: <gcc-patches.gcc.gnu.org> List-Archive: <http://gcc.gnu.org/ml/gcc-patches/> List-Post: <mailto:gcc-patches at gcc dot gnu dot org> List-Help: <mailto:gcc-patches-help at gcc dot gnu dot org> Sender: gcc-patches-owner at gcc dot gnu dot org Delivered-To: mailing list gcc-patches at gcc dot gnu dot org Applied to mainline. Approved with: http://gcc.gnu.org/ml/gcc-patches/2008-04/msg00639.html Bye, -Andreas- 2008-05-27 Andreas Krebbel <krebbel1@de.ibm.com> * defaults.h (TARGET_MEM_CONSTRAINT): New target macro added. * postreload.c (reload_cse_simplify_operands): Replace 'm' constraint with TARGET_MEM_CONSTRAINT. * recog.c (asm_operand_ok, preprocess_constraints, constrain_operands): Likewise. * regclass.c (record_reg_classes): Likewise. * reload.c (find_reloads, alternative_allows_const_pool_ref): Likewise. * reload1.c (maybe_fix_stack_asms): Likewise. * stmt.c (parse_output_constraint, parse_input_constraint): Likewise. * recog.h: Adjust comment. * genpreds.c (generic_constraint_letters): Remove 'm' constraint. * genoutput.c (note_constraint): Don't emit error for 'm' constraint. * doc/md.texi: Add a note to description of 'm' constraint. * doc/tm.texi: Document the new TARGET_MEM_CONSTRAINT macro. Index: gcc/defaults.h =================================================================== *** gcc/defaults.h.orig 2008-05-27 08:40:45.000000000 +0200 --- gcc/defaults.h 2008-05-27 08:45:44.000000000 +0200 *************** along with GCC; see the file COPYING3. *** 902,907 **** --- 902,911 ---- #define LEGITIMATE_PIC_OPERAND_P(X) 1 #endif + #ifndef TARGET_MEM_CONSTRAINT + #define TARGET_MEM_CONSTRAINT 'm' + #endif + #ifndef REVERSIBLE_CC_MODE #define REVERSIBLE_CC_MODE(MODE) 0 #endif Index: gcc/postreload.c =================================================================== *** gcc/postreload.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/postreload.c 2008-05-27 08:45:44.000000000 +0200 *************** reload_cse_simplify_operands (rtx insn, *** 542,553 **** case '*': case '%': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ! case 'm': case '<': case '>': case 'V': case 'o': case 'E': case 'F': case 'G': case 'H': case 's': case 'i': case 'n': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': ! case 'p': case 'X': /* These don't say anything we care about. */ break; --- 542,553 ---- case '*': case '%': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ! case '<': case '>': case 'V': case 'o': case 'E': case 'F': case 'G': case 'H': case 's': case 'i': case 'n': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': ! case 'p': case 'X': case TARGET_MEM_CONSTRAINT: /* These don't say anything we care about. */ break; Index: gcc/recog.c =================================================================== *** gcc/recog.c.orig 2008-05-27 08:40:45.000000000 +0200 --- gcc/recog.c 2008-05-27 08:45:44.000000000 +0200 *************** asm_operand_ok (rtx op, const char *cons *** 1543,1549 **** result = 1; break; ! case 'm': case 'V': /* non-offsettable */ if (memory_operand (op, VOIDmode)) result = 1; --- 1543,1549 ---- result = 1; break; ! case TARGET_MEM_CONSTRAINT: case 'V': /* non-offsettable */ if (memory_operand (op, VOIDmode)) result = 1; *************** preprocess_constraints (void) *** 2082,2088 **** } continue; ! case 'm': op_alt[j].memory_ok = 1; break; case '<': --- 2082,2088 ---- } continue; ! case TARGET_MEM_CONSTRAINT: op_alt[j].memory_ok = 1; break; case '<': *************** constrain_operands (int strict) *** 2355,2361 **** win = 1; break; ! case 'm': /* Memory operands must be valid, to the extent required by STRICT. */ if (MEM_P (op)) --- 2355,2361 ---- win = 1; break; ! case TARGET_MEM_CONSTRAINT: /* Memory operands must be valid, to the extent required by STRICT. */ if (MEM_P (op)) Index: gcc/regclass.c =================================================================== *** gcc/regclass.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/regclass.c 2008-05-27 08:45:44.000000000 +0200 *************** record_reg_classes (int n_alts, int n_op *** 1701,1707 **** [(int) base_reg_class (VOIDmode, ADDRESS, SCRATCH)]; break; ! case 'm': case 'o': case 'V': /* It doesn't seem worth distinguishing between offsettable and non-offsettable addresses here. */ allows_mem[i] = 1; --- 1701,1707 ---- [(int) base_reg_class (VOIDmode, ADDRESS, SCRATCH)]; break; ! case TARGET_MEM_CONSTRAINT: case 'o': case 'V': /* It doesn't seem worth distinguishing between offsettable and non-offsettable addresses here. */ allows_mem[i] = 1; Index: gcc/reload.c =================================================================== *** gcc/reload.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/reload.c 2008-05-27 08:45:44.000000000 +0200 *************** find_reloads (rtx insn, int replace, int *** 3182,3188 **** badop = 0; break; ! case 'm': if (force_reload) break; if (MEM_P (operand) --- 3182,3188 ---- badop = 0; break; ! case TARGET_MEM_CONSTRAINT: if (force_reload) break; if (MEM_P (operand) *************** alternative_allows_const_pool_ref (rtx m *** 4522,4528 **** while (*constraint++ != ','); altnum--; } ! /* Scan the requested alternative for 'm' or 'o'. If one of them is present, this alternative accepts the result of passing a constant-pool reference through find_reloads_toplev. --- 4522,4528 ---- while (*constraint++ != ','); altnum--; } ! /* Scan the requested alternative for TARGET_MEM_CONSTRAINT or 'o'. If one of them is present, this alternative accepts the result of passing a constant-pool reference through find_reloads_toplev. *************** alternative_allows_const_pool_ref (rtx m *** 4533,4539 **** for (; (c = *constraint) && c != ',' && c != '#'; constraint += CONSTRAINT_LEN (c, constraint)) { ! if (c == 'm' || c == 'o') return true; #ifdef EXTRA_CONSTRAINT_STR if (EXTRA_MEMORY_CONSTRAINT (c, constraint) --- 4533,4539 ---- for (; (c = *constraint) && c != ',' && c != '#'; constraint += CONSTRAINT_LEN (c, constraint)) { ! if (c == TARGET_MEM_CONSTRAINT || c == 'o') return true; #ifdef EXTRA_CONSTRAINT_STR if (EXTRA_MEMORY_CONSTRAINT (c, constraint) Index: gcc/reload1.c =================================================================== *** gcc/reload1.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/reload1.c 2008-05-27 08:45:44.000000000 +0200 *************** maybe_fix_stack_asms (void) *** 1454,1464 **** switch (c) { case '=': case '+': case '*': case '%': case '?': case '!': ! case '0': case '1': case '2': case '3': case '4': case 'm': ! case '<': case '>': case 'V': case 'o': case '&': case 'E': ! case 'F': case 's': case 'i': case 'n': case 'X': case 'I': ! case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': ! case 'P': break; case 'p': --- 1454,1464 ---- switch (c) { case '=': case '+': case '*': case '%': case '?': case '!': ! case '0': case '1': case '2': case '3': case '4': case '<': ! case '>': case 'V': case 'o': case '&': case 'E': case 'F': ! case 's': case 'i': case 'n': case 'X': case 'I': case 'J': ! case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': ! case TARGET_MEM_CONSTRAINT: break; case 'p': Index: gcc/stmt.c =================================================================== *** gcc/stmt.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/stmt.c 2008-05-27 08:45:44.000000000 +0200 *************** parse_output_constraint (const char **co *** 363,369 **** } break; ! case 'V': case 'm': case 'o': *allows_mem = true; break; --- 363,369 ---- } break; ! case 'V': case TARGET_MEM_CONSTRAINT: case 'o': *allows_mem = true; break; *************** parse_input_constraint (const char **con *** 462,468 **** } break; ! case 'V': case 'm': case 'o': *allows_mem = true; break; --- 462,468 ---- } break; ! case 'V': case TARGET_MEM_CONSTRAINT: case 'o': *allows_mem = true; break; Index: gcc/recog.h =================================================================== *** gcc/recog.h.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/recog.h 2008-05-27 08:45:44.000000000 +0200 *************** struct operand_alternative *** 50,56 **** /* Nonzero if '&' was found in the constraint string. */ unsigned int earlyclobber:1; ! /* Nonzero if 'm' was found in the constraint string. */ unsigned int memory_ok:1; /* Nonzero if 'o' was found in the constraint string. */ unsigned int offmem_ok:1; --- 50,57 ---- /* Nonzero if '&' was found in the constraint string. */ unsigned int earlyclobber:1; ! /* Nonzero if TARGET_MEM_CONSTRAINT was found in the constraint ! string. */ unsigned int memory_ok:1; /* Nonzero if 'o' was found in the constraint string. */ unsigned int offmem_ok:1; Index: gcc/genpreds.c =================================================================== *** gcc/genpreds.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/genpreds.c 2008-05-27 08:45:44.000000000 +0200 *************** static struct constraint_data **last_con *** 690,697 **** for (iter_ = first_constraint; iter_; iter_ = iter_->next_textual) /* These letters, and all names beginning with them, are reserved for ! generic constraints. */ ! static const char generic_constraint_letters[] = "EFVXgimnoprs"; /* Machine-independent code expects that constraints with these (initial) letters will allow only (a subset of all) CONST_INTs. */ --- 690,700 ---- for (iter_ = first_constraint; iter_; iter_ = iter_->next_textual) /* These letters, and all names beginning with them, are reserved for ! generic constraints. ! The 'm' constraint is not mentioned here since that constraint ! letter can be overridden by the back end by defining the ! TARGET_MEM_CONSTRAINT macro. */ ! static const char generic_constraint_letters[] = "EFVXginoprs"; /* Machine-independent code expects that constraints with these (initial) letters will allow only (a subset of all) CONST_INTs. */ Index: gcc/genoutput.c =================================================================== *** gcc/genoutput.c.orig 2008-05-15 10:28:00.000000000 +0200 --- gcc/genoutput.c 2008-05-27 08:45:44.000000000 +0200 *************** note_constraint (rtx exp, int lineno) *** 1122,1128 **** unsigned int namelen = strlen (name); struct constraint_data **iter, **slot, *new; ! if (strchr (indep_constraints, name[0])) { if (name[1] == '\0') message_with_line (lineno, "constraint letter '%s' cannot be " --- 1122,1131 ---- unsigned int namelen = strlen (name); struct constraint_data **iter, **slot, *new; ! /* The 'm' constraint is special here since that constraint letter ! can be overridden by the back end by defining the ! TARGET_MEM_CONSTRAINT macro. */ ! if (strchr (indep_constraints, name[0]) && name[0] != 'm') { if (name[1] == '\0') message_with_line (lineno, "constraint letter '%s' cannot be " Index: gcc/doc/md.texi =================================================================== *** gcc/doc/md.texi.orig 2008-05-15 10:22:48.000000000 +0200 --- gcc/doc/md.texi 2008-05-27 08:45:44.000000000 +0200 *************** number of constraints and modifiers. *** 1085,1090 **** --- 1085,1092 ---- @item @samp{m} A memory operand is allowed, with any kind of address that the machine supports in general. + Note that the letter used for the general memory constraint can be + re-defined by a back end using the @code{TARGET_MEM_CONSTRAINT} macro. @cindex offsettable address @cindex @samp{o} in constraint Index: gcc/doc/tm.texi =================================================================== *** gcc/doc/tm.texi.orig 2008-05-27 08:40:32.000000000 +0200 --- gcc/doc/tm.texi 2008-05-27 08:45:44.000000000 +0200 *************** into the @code{symbol_ref}, and then che *** 5315,5320 **** --- 5315,5331 ---- Format}. @end defmac + @defmac TARGET_MEM_CONSTRAINT + A single character to be used instead of the default @code{'m'} + character for general memory addresses. This defines the constraint + letter which matches the memory addresses accepted by + @code{GO_IF_LEGITIMATE_ADDRESS_P}. Define this macro if you want to + support new address formats in your back end without changing the + semantics of the @code{'m'} constraint. This is necessary in order to + preserve functionality of inline assembly constructs using the + @code{'m'} constraint. + @end defmac + @defmac FIND_BASE_TERM (@var{x}) A C expression to determine the base term of address @var{x}. This macro is used in only one place: `find_base_term' in alias.c.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor