OSDN Git Service

oops
[pf3gnuchains/gcc-fork.git] / gcc / reload.c
1 /* Search an insn for pseudo regs that must be in hard regs and are not.
2    Copyright (C) 1987, 88, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20
21 /* This file contains subroutines used only from the file reload1.c.
22    It knows how to scan one insn for operands and values
23    that need to be copied into registers to make valid code.
24    It also finds other operands and values which are valid
25    but for which equivalent values in registers exist and
26    ought to be used instead.
27
28    Before processing the first insn of the function, call `init_reload'.
29
30    To scan an insn, call `find_reloads'.  This does two things:
31    1. sets up tables describing which values must be reloaded
32    for this insn, and what kind of hard regs they must be reloaded into;
33    2. optionally record the locations where those values appear in
34    the data, so they can be replaced properly later.
35    This is done only if the second arg to `find_reloads' is nonzero.
36
37    The third arg to `find_reloads' specifies the number of levels
38    of indirect addressing supported by the machine.  If it is zero,
39    indirect addressing is not valid.  If it is one, (MEM (REG n))
40    is valid even if (REG n) did not get a hard register; if it is two,
41    (MEM (MEM (REG n))) is also valid even if (REG n) did not get a
42    hard register, and similarly for higher values.
43
44    Then you must choose the hard regs to reload those pseudo regs into,
45    and generate appropriate load insns before this insn and perhaps
46    also store insns after this insn.  Set up the array `reload_reg_rtx'
47    to contain the REG rtx's for the registers you used.  In some
48    cases `find_reloads' will return a nonzero value in `reload_reg_rtx'
49    for certain reloads.  Then that tells you which register to use,
50    so you do not need to allocate one.  But you still do need to add extra
51    instructions to copy the value into and out of that register.
52
53    Finally you must call `subst_reloads' to substitute the reload reg rtx's
54    into the locations already recorded.
55
56 NOTE SIDE EFFECTS:
57
58    find_reloads can alter the operands of the instruction it is called on.
59
60    1. Two operands of any sort may be interchanged, if they are in a
61    commutative instruction.
62    This happens only if find_reloads thinks the instruction will compile
63    better that way.
64
65    2. Pseudo-registers that are equivalent to constants are replaced
66    with those constants if they are not in hard registers.
67
68 1 happens every time find_reloads is called.
69 2 happens only when REPLACE is 1, which is only when
70 actually doing the reloads, not when just counting them.
71
72
73 Using a reload register for several reloads in one insn:
74
75 When an insn has reloads, it is considered as having three parts:
76 the input reloads, the insn itself after reloading, and the output reloads.
77 Reloads of values used in memory addresses are often needed for only one part.
78
79 When this is so, reload_when_needed records which part needs the reload.
80 Two reloads for different parts of the insn can share the same reload
81 register.
82
83 When a reload is used for addresses in multiple parts, or when it is
84 an ordinary operand, it is classified as RELOAD_OTHER, and cannot share
85 a register with any other reload.  */
86
87 #define REG_OK_STRICT
88
89 #include <stdio.h>
90 #include "config.h"
91 #include "rtl.h"
92 #include "insn-config.h"
93 #include "insn-codes.h"
94 #include "recog.h"
95 #include "reload.h"
96 #include "regs.h"
97 #include "hard-reg-set.h"
98 #include "flags.h"
99 #include "real.h"
100
101 #ifndef REGISTER_MOVE_COST
102 #define REGISTER_MOVE_COST(x, y) 2
103 #endif
104 \f
105 /* The variables set up by `find_reloads' are:
106
107    n_reloads              number of distinct reloads needed; max reload # + 1
108        tables indexed by reload number
109    reload_in              rtx for value to reload from
110    reload_out             rtx for where to store reload-reg afterward if nec
111                            (often the same as reload_in)
112    reload_reg_class       enum reg_class, saying what regs to reload into
113    reload_inmode          enum machine_mode; mode this operand should have
114                            when reloaded, on input.
115    reload_outmode         enum machine_mode; mode this operand should have
116                            when reloaded, on output.
117    reload_optional        char, nonzero for an optional reload.
118                            Optional reloads are ignored unless the
119                            value is already sitting in a register.
120    reload_inc             int, positive amount to increment or decrement by if
121                            reload_in is a PRE_DEC, PRE_INC, POST_DEC, POST_INC.
122                            Ignored otherwise (don't assume it is zero).
123    reload_in_reg          rtx.  A reg for which reload_in is the equivalent.
124                            If reload_in is a symbol_ref which came from
125                            reg_equiv_constant, then this is the pseudo
126                            which has that symbol_ref as equivalent.
127    reload_reg_rtx         rtx.  This is the register to reload into.
128                            If it is zero when `find_reloads' returns,
129                            you must find a suitable register in the class
130                            specified by reload_reg_class, and store here
131                            an rtx for that register with mode from
132                            reload_inmode or reload_outmode.
133    reload_nocombine       char, nonzero if this reload shouldn't be
134                            combined with another reload.
135    reload_opnum           int, operand number being reloaded.  This is
136                            used to group related reloads and need not always
137                            be equal to the actual operand number in the insn,
138                            though it current will be; for in-out operands, it
139                            is one of the two operand numbers.
140    reload_when_needed    enum, classifies reload as needed either for
141                            addressing an input reload, addressing an output,
142                            for addressing a non-reloaded mem ref,
143                            or for unspecified purposes (i.e., more than one
144                            of the above).
145    reload_secondary_p     int, 1 if this is a secondary register for one
146                            or more reloads.
147    reload_secondary_in_reload
148    reload_secondary_out_reload
149                           int, gives the reload number of a secondary
150                            reload, when needed; otherwise -1
151    reload_secondary_in_icode
152    reload_secondary_out_icode
153                           enum insn_code, if a secondary reload is required,
154                            gives the INSN_CODE that uses the secondary
155                            reload as a scratch register, or CODE_FOR_nothing
156                            if the secondary reload register is to be an
157                            intermediate register.  */
158 int n_reloads;
159
160 rtx reload_in[MAX_RELOADS];
161 rtx reload_out[MAX_RELOADS];
162 enum reg_class reload_reg_class[MAX_RELOADS];
163 enum machine_mode reload_inmode[MAX_RELOADS];
164 enum machine_mode reload_outmode[MAX_RELOADS];
165 rtx reload_reg_rtx[MAX_RELOADS];
166 char reload_optional[MAX_RELOADS];
167 int reload_inc[MAX_RELOADS];
168 rtx reload_in_reg[MAX_RELOADS];
169 char reload_nocombine[MAX_RELOADS];
170 int reload_opnum[MAX_RELOADS];
171 enum reload_type reload_when_needed[MAX_RELOADS];
172 int reload_secondary_p[MAX_RELOADS];
173 int reload_secondary_in_reload[MAX_RELOADS];
174 int reload_secondary_out_reload[MAX_RELOADS];
175 enum insn_code reload_secondary_in_icode[MAX_RELOADS];
176 enum insn_code reload_secondary_out_icode[MAX_RELOADS];
177
178 /* All the "earlyclobber" operands of the current insn
179    are recorded here.  */
180 int n_earlyclobbers;
181 rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
182
183 int reload_n_operands;
184
185 /* Replacing reloads.
186
187    If `replace_reloads' is nonzero, then as each reload is recorded
188    an entry is made for it in the table `replacements'.
189    Then later `subst_reloads' can look through that table and
190    perform all the replacements needed.  */
191
192 /* Nonzero means record the places to replace.  */
193 static int replace_reloads;
194
195 /* Each replacement is recorded with a structure like this.  */
196 struct replacement
197 {
198   rtx *where;                   /* Location to store in */
199   rtx *subreg_loc;              /* Location of SUBREG if WHERE is inside
200                                    a SUBREG; 0 otherwise.  */
201   int what;                     /* which reload this is for */
202   enum machine_mode mode;       /* mode it must have */
203 };
204
205 static struct replacement replacements[MAX_RECOG_OPERANDS * ((MAX_REGS_PER_ADDRESS * 2) + 1)];
206
207 /* Number of replacements currently recorded.  */
208 static int n_replacements;
209
210 /* Used to track what is modified by an operand.  */
211 struct decomposition
212 {
213   int reg_flag;         /* Nonzero if referencing a register. */
214   int safe;             /* Nonzero if this can't conflict with anything. */
215   rtx base;             /* Base adddress for MEM. */
216   HOST_WIDE_INT start;  /* Starting offset or register number. */
217   HOST_WIDE_INT end;    /* Endinf offset or register number.  */
218 };
219
220 /* MEM-rtx's created for pseudo-regs in stack slots not directly addressable;
221    (see reg_equiv_address).  */
222 static rtx memlocs[MAX_RECOG_OPERANDS * ((MAX_REGS_PER_ADDRESS * 2) + 1)];
223 static int n_memlocs;
224
225 #ifdef SECONDARY_MEMORY_NEEDED
226
227 /* Save MEMs needed to copy from one class of registers to another.  One MEM
228    is used per mode, but normally only one or two modes are ever used.  
229
230    We keep two versions, before and after register elimination.  The one 
231    after register elimination is record separately for each operand.  This
232    is done in case the address is not valid to be sure that we separately
233    reload each.  */
234
235 static rtx secondary_memlocs[NUM_MACHINE_MODES];
236 static rtx secondary_memlocs_elim[NUM_MACHINE_MODES][MAX_RECOG_OPERANDS];
237 #endif
238
239 /* The instruction we are doing reloads for;
240    so we can test whether a register dies in it.  */
241 static rtx this_insn;
242
243 /* Nonzero if this instruction is a user-specified asm with operands.  */
244 static int this_insn_is_asm;
245
246 /* If hard_regs_live_known is nonzero,
247    we can tell which hard regs are currently live,
248    at least enough to succeed in choosing dummy reloads.  */
249 static int hard_regs_live_known;
250
251 /* Indexed by hard reg number,
252    element is nonegative if hard reg has been spilled.
253    This vector is passed to `find_reloads' as an argument
254    and is not changed here.  */
255 static short *static_reload_reg_p;
256
257 /* Set to 1 in subst_reg_equivs if it changes anything.  */
258 static int subst_reg_equivs_changed;
259
260 /* On return from push_reload, holds the reload-number for the OUT
261    operand, which can be different for that from the input operand.  */
262 static int output_reloadnum;
263
264   /* Compare two RTX's.  */
265 #define MATCHES(x, y) \
266  (x == y || (x != 0 && (GET_CODE (x) == REG                             \
267                         ? GET_CODE (y) == REG && REGNO (x) == REGNO (y) \
268                         : rtx_equal_p (x, y) && ! side_effects_p (x))))
269
270   /* Indicates if two reloads purposes are for similar enough things that we
271      can merge their reloads.  */
272 #define MERGABLE_RELOADS(when1, when2, op1, op2) \
273   ((when1) == RELOAD_OTHER || (when2) == RELOAD_OTHER   \
274    || ((when1) == (when2) && (op1) == (op2))            \
275    || ((when1) == RELOAD_FOR_INPUT && (when2) == RELOAD_FOR_INPUT) \
276    || ((when1) == RELOAD_FOR_OPERAND_ADDRESS            \
277        && (when2) == RELOAD_FOR_OPERAND_ADDRESS)        \
278    || ((when1) == RELOAD_FOR_OTHER_ADDRESS              \
279        && (when2) == RELOAD_FOR_OTHER_ADDRESS))
280
281   /* Nonzero if these two reload purposes produce RELOAD_OTHER when merged.  */
282 #define MERGE_TO_OTHER(when1, when2, op1, op2) \
283   ((when1) != (when2)                                   \
284    || ! ((op1) == (op2)                                 \
285          || (when1) == RELOAD_FOR_INPUT                 \
286          || (when1) == RELOAD_FOR_OPERAND_ADDRESS       \
287          || (when1) == RELOAD_FOR_OTHER_ADDRESS))
288
289 static int push_secondary_reload PROTO((int, rtx, int, int, enum reg_class,
290                                         enum machine_mode, enum reload_type,
291                                         enum insn_code *));
292 static int push_reload          PROTO((rtx, rtx, rtx *, rtx *, enum reg_class,
293                                        enum machine_mode, enum machine_mode,
294                                        int, int, int, enum reload_type));
295 static void push_replacement    PROTO((rtx *, int, enum machine_mode));
296 static void combine_reloads     PROTO((void));
297 static rtx find_dummy_reload    PROTO((rtx, rtx, rtx *, rtx *,
298                                        enum machine_mode, enum machine_mode,
299                                        enum reg_class, int));
300 static int earlyclobber_operand_p PROTO((rtx));
301 static int hard_reg_set_here_p  PROTO((int, int, rtx));
302 static struct decomposition decompose PROTO((rtx));
303 static int immune_p             PROTO((rtx, rtx, struct decomposition));
304 static int alternative_allows_memconst PROTO((char *, int));
305 static rtx find_reloads_toplev  PROTO((rtx, int, enum reload_type, int, int));
306 static rtx make_memloc          PROTO((rtx, int));
307 static int find_reloads_address PROTO((enum machine_mode, rtx *, rtx, rtx *,
308                                        int, enum reload_type, int));
309 static rtx subst_reg_equivs     PROTO((rtx));
310 static rtx subst_indexed_address PROTO((rtx));
311 static int find_reloads_address_1 PROTO((rtx, int, rtx *, int,
312                                          enum reload_type,int));
313 static void find_reloads_address_part PROTO((rtx, rtx *, enum reg_class,
314                                              enum machine_mode, int,
315                                              enum reload_type, int));
316 static int find_inc_amount      PROTO((rtx, rtx));
317 \f
318 #ifdef HAVE_SECONDARY_RELOADS
319
320 /* Determine if any secondary reloads are needed for loading (if IN_P is
321    non-zero) or storing (if IN_P is zero) X to or from a reload register of
322    register class RELOAD_CLASS in mode RELOAD_MODE.  If secondary reloads
323    are needed, push them.
324
325    Return the reload number of the secondary reload we made, or -1 if
326    we didn't need one.  *PICODE is set to the insn_code to use if we do
327    need a secondary reload.  */
328
329 static int
330 push_secondary_reload (in_p, x, opnum, optional, reload_class, reload_mode,
331                        type, picode)
332      int in_p;
333      rtx x;
334      int opnum;
335      int optional;
336      enum reg_class reload_class;
337      enum machine_mode reload_mode;
338      enum reload_type type;
339      enum insn_code *picode;
340 {
341   enum reg_class class = NO_REGS;
342   enum machine_mode mode = reload_mode;
343   enum insn_code icode = CODE_FOR_nothing;
344   enum reg_class t_class = NO_REGS;
345   enum machine_mode t_mode = VOIDmode;
346   enum insn_code t_icode = CODE_FOR_nothing;
347   enum reload_type secondary_type;
348   int i;
349   int s_reload, t_reload = -1;
350
351   if (type == RELOAD_FOR_INPUT_ADDRESS || type == RELOAD_FOR_OUTPUT_ADDRESS)
352     secondary_type = type;
353   else
354     secondary_type = in_p ? RELOAD_FOR_INPUT_ADDRESS : RELOAD_FOR_OUTPUT_ADDRESS;
355
356   *picode = CODE_FOR_nothing;
357
358   /* If X is a pseudo-register that has an equivalent MEM (actually, if it
359      is still a pseudo-register by now, it *must* have an equivalent MEM
360      but we don't want to assume that), use that equivalent when seeing if
361      a secondary reload is needed since whether or not a reload is needed
362      might be sensitive to the form of the MEM.  */
363
364   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
365       && reg_equiv_mem[REGNO (x)] != 0)
366     x = reg_equiv_mem[REGNO (x)];
367
368 #ifdef SECONDARY_INPUT_RELOAD_CLASS
369   if (in_p)
370     class = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x);
371 #endif
372
373 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
374   if (! in_p)
375     class = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x);
376 #endif
377
378   /* If we don't need any secondary registers, done.  */
379   if (class == NO_REGS)
380     return -1;
381
382   /* Get a possible insn to use.  If the predicate doesn't accept X, don't
383      use the insn.  */
384
385   icode = (in_p ? reload_in_optab[(int) reload_mode]
386            : reload_out_optab[(int) reload_mode]);
387
388   if (icode != CODE_FOR_nothing
389       && insn_operand_predicate[(int) icode][in_p]
390       && (! (insn_operand_predicate[(int) icode][in_p]) (x, reload_mode)))
391     icode = CODE_FOR_nothing;
392
393   /* If we will be using an insn, see if it can directly handle the reload
394      register we will be using.  If it can, the secondary reload is for a
395      scratch register.  If it can't, we will use the secondary reload for
396      an intermediate register and require a tertiary reload for the scratch
397      register.  */
398
399   if (icode != CODE_FOR_nothing)
400     {
401       /* If IN_P is non-zero, the reload register will be the output in 
402          operand 0.  If IN_P is zero, the reload register will be the input
403          in operand 1.  Outputs should have an initial "=", which we must
404          skip.  */
405
406       char insn_letter = insn_operand_constraint[(int) icode][!in_p][in_p];
407       enum reg_class insn_class
408         = (insn_letter == 'r' ? GENERAL_REGS
409            : REG_CLASS_FROM_LETTER (insn_letter));
410
411       if (insn_class == NO_REGS
412           || (in_p && insn_operand_constraint[(int) icode][!in_p][0] != '=')
413           /* The scratch register's constraint must start with "=&".  */
414           || insn_operand_constraint[(int) icode][2][0] != '='
415           || insn_operand_constraint[(int) icode][2][1] != '&')
416         abort ();
417
418       if (reg_class_subset_p (reload_class, insn_class))
419         mode = insn_operand_mode[(int) icode][2];
420       else
421         {
422           char t_letter = insn_operand_constraint[(int) icode][2][2];
423           class = insn_class;
424           t_mode = insn_operand_mode[(int) icode][2];
425           t_class = (t_letter == 'r' ? GENERAL_REGS
426                      : REG_CLASS_FROM_LETTER (t_letter));
427           t_icode = icode;
428           icode = CODE_FOR_nothing;
429         }
430     }
431
432   /* This case isn't valid, so fail.  Reload is allowed to use the same
433      register for RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_INPUT reloads, but
434      in the case of a secondary register, we actually need two different
435      registers for correct code.  We fail here to prevent the possibility of
436      silently generating incorrect code later.
437
438      The convention is that secondary input reloads are valid only if the
439      secondary_class is different from class.  If you have such a case, you
440      can not use secondary reloads, you must work around the problem some
441      other way.
442
443      Allow this when MODE is not reload_mode and assume that the generated
444      code handles this case (it does on the Alpha, which is the only place
445      this currently happens).  */
446
447   if (in_p && class == reload_class && mode == reload_mode)
448     abort ();
449
450   /* If we need a tertiary reload, see if we have one we can reuse or else
451      make a new one.  */
452
453   if (t_class != NO_REGS)
454     {
455       for (t_reload = 0; t_reload < n_reloads; t_reload++)
456         if (reload_secondary_p[t_reload]
457             && (reg_class_subset_p (t_class, reload_reg_class[t_reload])
458                 || reg_class_subset_p (reload_reg_class[t_reload], t_class))
459             && ((in_p && reload_inmode[t_reload] == t_mode)
460                 || (! in_p && reload_outmode[t_reload] == t_mode))
461             && ((in_p && (reload_secondary_in_icode[t_reload]
462                           == CODE_FOR_nothing))
463                 || (! in_p &&(reload_secondary_out_icode[t_reload]
464                               == CODE_FOR_nothing)))
465             && (reg_class_size[(int) t_class] == 1
466 #ifdef SMALL_REGISTER_CLASSES
467                 || 1
468 #endif
469                 )
470             && MERGABLE_RELOADS (secondary_type,
471                                  reload_when_needed[t_reload],
472                                  opnum, reload_opnum[t_reload]))
473           {
474             if (in_p)
475               reload_inmode[t_reload] = t_mode;
476             if (! in_p)
477               reload_outmode[t_reload] = t_mode;
478
479             if (reg_class_subset_p (t_class, reload_reg_class[t_reload]))
480               reload_reg_class[t_reload] = t_class;
481
482             reload_opnum[t_reload] = MIN (reload_opnum[t_reload], opnum);
483             reload_optional[t_reload] &= optional;
484             reload_secondary_p[t_reload] = 1;
485             if (MERGE_TO_OTHER (secondary_type, reload_when_needed[t_reload],
486                                 opnum, reload_opnum[t_reload]))
487               reload_when_needed[t_reload] = RELOAD_OTHER;
488           }
489
490       if (t_reload == n_reloads)
491         {
492           /* We need to make a new tertiary reload for this register class.  */
493           reload_in[t_reload] = reload_out[t_reload] = 0;
494           reload_reg_class[t_reload] = t_class;
495           reload_inmode[t_reload] = in_p ? t_mode : VOIDmode;
496           reload_outmode[t_reload] = ! in_p ? t_mode : VOIDmode;
497           reload_reg_rtx[t_reload] = 0;
498           reload_optional[t_reload] = optional;
499           reload_inc[t_reload] = 0;
500           /* Maybe we could combine these, but it seems too tricky.  */
501           reload_nocombine[t_reload] = 1;
502           reload_in_reg[t_reload] = 0;
503           reload_opnum[t_reload] = opnum;
504           reload_when_needed[t_reload] = secondary_type;
505           reload_secondary_in_reload[t_reload] = -1;
506           reload_secondary_out_reload[t_reload] = -1;
507           reload_secondary_in_icode[t_reload] = CODE_FOR_nothing;
508           reload_secondary_out_icode[t_reload] = CODE_FOR_nothing;
509           reload_secondary_p[t_reload] = 1;
510
511           n_reloads++;
512         }
513     }
514
515   /* See if we can reuse an existing secondary reload.  */
516   for (s_reload = 0; s_reload < n_reloads; s_reload++)
517     if (reload_secondary_p[s_reload]
518         && (reg_class_subset_p (class, reload_reg_class[s_reload])
519             || reg_class_subset_p (reload_reg_class[s_reload], class))
520         && ((in_p && reload_inmode[s_reload] == mode)
521             || (! in_p && reload_outmode[s_reload] == mode))
522         && ((in_p && reload_secondary_in_reload[s_reload] == t_reload)
523             || (! in_p && reload_secondary_out_reload[s_reload] == t_reload))
524         && ((in_p && reload_secondary_in_icode[s_reload] == t_icode)
525             || (! in_p && reload_secondary_out_icode[s_reload] == t_icode))
526         && (reg_class_size[(int) class] == 1
527 #ifdef SMALL_REGISTER_CLASSES
528             || 1
529 #endif
530             )
531         && MERGABLE_RELOADS (secondary_type, reload_when_needed[s_reload],
532                              opnum, reload_opnum[s_reload]))
533       {
534         if (in_p)
535           reload_inmode[s_reload] = mode;
536         if (! in_p)
537           reload_outmode[s_reload] = mode;
538
539         if (reg_class_subset_p (class, reload_reg_class[s_reload]))
540           reload_reg_class[s_reload] = class;
541
542         reload_opnum[s_reload] = MIN (reload_opnum[s_reload], opnum);
543         reload_optional[s_reload] &= optional;
544         reload_secondary_p[s_reload] = 1;
545         if (MERGE_TO_OTHER (secondary_type, reload_when_needed[s_reload],
546                             opnum, reload_opnum[s_reload]))
547           reload_when_needed[s_reload] = RELOAD_OTHER;
548       }
549
550   if (s_reload == n_reloads)
551     {
552       /* We need to make a new secondary reload for this register class.  */
553       reload_in[s_reload] = reload_out[s_reload] = 0;
554       reload_reg_class[s_reload] = class;
555
556       reload_inmode[s_reload] = in_p ? mode : VOIDmode;
557       reload_outmode[s_reload] = ! in_p ? mode : VOIDmode;
558       reload_reg_rtx[s_reload] = 0;
559       reload_optional[s_reload] = optional;
560       reload_inc[s_reload] = 0;
561       /* Maybe we could combine these, but it seems too tricky.  */
562       reload_nocombine[s_reload] = 1;
563       reload_in_reg[s_reload] = 0;
564       reload_opnum[s_reload] = opnum;
565       reload_when_needed[s_reload] = secondary_type;
566       reload_secondary_in_reload[s_reload] = in_p ? t_reload : -1;
567       reload_secondary_out_reload[s_reload] = ! in_p ? t_reload : -1;
568       reload_secondary_in_icode[s_reload] = in_p ? t_icode : CODE_FOR_nothing; 
569       reload_secondary_out_icode[s_reload]
570         = ! in_p ? t_icode : CODE_FOR_nothing;
571       reload_secondary_p[s_reload] = 1;
572
573       n_reloads++;
574
575 #ifdef SECONDARY_MEMORY_NEEDED
576       /* If we need a memory location to copy between the two reload regs,
577          set it up now.  */
578
579       if (in_p && icode == CODE_FOR_nothing
580           && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
581         get_secondary_mem (x, reload_mode, opnum, type);
582
583       if (! in_p && icode == CODE_FOR_nothing
584           && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
585         get_secondary_mem (x, reload_mode, opnum, type);
586 #endif
587     }
588
589   *picode = icode;
590   return s_reload;
591 }
592 #endif /* HAVE_SECONDARY_RELOADS */
593 \f
594 #ifdef SECONDARY_MEMORY_NEEDED
595
596 /* Return a memory location that will be used to copy X in mode MODE.  
597    If we haven't already made a location for this mode in this insn,
598    call find_reloads_address on the location being returned.  */
599
600 rtx
601 get_secondary_mem (x, mode, opnum, type)
602      rtx x;
603      enum machine_mode mode;
604      int opnum;
605      enum reload_type type;
606 {
607   rtx loc;
608   int mem_valid;
609
610   /* By default, if MODE is narrower than a word, widen it to a word.
611      This is required because most machines that require these memory
612      locations do not support short load and stores from all registers
613      (e.g., FP registers).  */
614
615 #ifdef SECONDARY_MEMORY_NEEDED_MODE
616   mode = SECONDARY_MEMORY_NEEDED_MODE (mode);
617 #else
618   if (GET_MODE_BITSIZE (mode) < BITS_PER_WORD)
619     mode = mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0);
620 #endif
621
622   /* If we already have made a MEM for this operand in MODE, return it.  */
623   if (secondary_memlocs_elim[(int) mode][opnum] != 0)
624     return secondary_memlocs_elim[(int) mode][opnum];
625
626   /* If this is the first time we've tried to get a MEM for this mode, 
627      allocate a new one.  `something_changed' in reload will get set
628      by noticing that the frame size has changed.  */
629
630   if (secondary_memlocs[(int) mode] == 0)
631     {
632 #ifdef SECONDARY_MEMORY_NEEDED_RTX
633       secondary_memlocs[(int) mode] = SECONDARY_MEMORY_NEEDED_RTX (mode);
634 #else
635       secondary_memlocs[(int) mode]
636         = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
637 #endif
638     }
639
640   /* Get a version of the address doing any eliminations needed.  If that
641      didn't give us a new MEM, make a new one if it isn't valid.  */
642
643   loc = eliminate_regs (secondary_memlocs[(int) mode], VOIDmode, NULL_RTX);
644   mem_valid = strict_memory_address_p (mode, XEXP (loc, 0));
645
646   if (! mem_valid && loc == secondary_memlocs[(int) mode])
647     loc = copy_rtx (loc);
648
649   /* The only time the call below will do anything is if the stack
650      offset is too large.  In that case IND_LEVELS doesn't matter, so we
651      can just pass a zero.  Adjust the type to be the address of the
652      corresponding object.  If the address was valid, save the eliminated
653      address.  If it wasn't valid, we need to make a reload each time, so
654      don't save it.  */
655
656   if (! mem_valid)
657     {
658       type =  (type == RELOAD_FOR_INPUT ? RELOAD_FOR_INPUT_ADDRESS
659                : type == RELOAD_FOR_OUTPUT ? RELOAD_FOR_OUTPUT_ADDRESS
660                : RELOAD_OTHER);
661
662       find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
663                             opnum, type, 0);
664     }
665
666   secondary_memlocs_elim[(int) mode][opnum] = loc;
667   return loc;
668 }
669
670 /* Clear any secondary memory locations we've made.  */
671
672 void
673 clear_secondary_mem ()
674 {
675   bzero ((char *) secondary_memlocs, sizeof secondary_memlocs);
676 }
677 #endif /* SECONDARY_MEMORY_NEEDED */
678 \f
679 /* Record one reload that needs to be performed.
680    IN is an rtx saying where the data are to be found before this instruction.
681    OUT says where they must be stored after the instruction.
682    (IN is zero for data not read, and OUT is zero for data not written.)
683    INLOC and OUTLOC point to the places in the instructions where
684    IN and OUT were found.
685    If IN and OUT are both non-zero, it means the same register must be used
686    to reload both IN and OUT.
687
688    CLASS is a register class required for the reloaded data.
689    INMODE is the machine mode that the instruction requires
690    for the reg that replaces IN and OUTMODE is likewise for OUT.
691
692    If IN is zero, then OUT's location and mode should be passed as
693    INLOC and INMODE.
694
695    STRICT_LOW is the 1 if there is a containing STRICT_LOW_PART rtx.
696
697    OPTIONAL nonzero means this reload does not need to be performed:
698    it can be discarded if that is more convenient.
699
700    OPNUM and TYPE say what the purpose of this reload is.
701
702    The return value is the reload-number for this reload.
703
704    If both IN and OUT are nonzero, in some rare cases we might
705    want to make two separate reloads.  (Actually we never do this now.)
706    Therefore, the reload-number for OUT is stored in
707    output_reloadnum when we return; the return value applies to IN.
708    Usually (presently always), when IN and OUT are nonzero,
709    the two reload-numbers are equal, but the caller should be careful to
710    distinguish them.  */
711
712 static int
713 push_reload (in, out, inloc, outloc, class,
714              inmode, outmode, strict_low, optional, opnum, type)
715      register rtx in, out;
716      rtx *inloc, *outloc;
717      enum reg_class class;
718      enum machine_mode inmode, outmode;
719      int strict_low;
720      int optional;
721      int opnum;
722      enum reload_type type;
723 {
724   register int i;
725   int dont_share = 0;
726   rtx *in_subreg_loc = 0, *out_subreg_loc = 0;
727   int secondary_in_reload = -1, secondary_out_reload = -1;
728   enum insn_code secondary_in_icode = CODE_FOR_nothing;
729   enum insn_code secondary_out_icode = CODE_FOR_nothing;
730
731   /* INMODE and/or OUTMODE could be VOIDmode if no mode
732      has been specified for the operand.  In that case,
733      use the operand's mode as the mode to reload.  */
734   if (inmode == VOIDmode && in != 0)
735     inmode = GET_MODE (in);
736   if (outmode == VOIDmode && out != 0)
737     outmode = GET_MODE (out);
738
739   /* If IN is a pseudo register everywhere-equivalent to a constant, and 
740      it is not in a hard register, reload straight from the constant,
741      since we want to get rid of such pseudo registers.
742      Often this is done earlier, but not always in find_reloads_address.  */
743   if (in != 0 && GET_CODE (in) == REG)
744     {
745       register int regno = REGNO (in);
746
747       if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
748           && reg_equiv_constant[regno] != 0)
749         in = reg_equiv_constant[regno];
750     }
751
752   /* Likewise for OUT.  Of course, OUT will never be equivalent to
753      an actual constant, but it might be equivalent to a memory location
754      (in the case of a parameter).  */
755   if (out != 0 && GET_CODE (out) == REG)
756     {
757       register int regno = REGNO (out);
758
759       if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
760           && reg_equiv_constant[regno] != 0)
761         out = reg_equiv_constant[regno];
762     }
763
764   /* If we have a read-write operand with an address side-effect,
765      change either IN or OUT so the side-effect happens only once.  */
766   if (in != 0 && out != 0 && GET_CODE (in) == MEM && rtx_equal_p (in, out))
767     {
768       if (GET_CODE (XEXP (in, 0)) == POST_INC
769           || GET_CODE (XEXP (in, 0)) == POST_DEC)
770         in = gen_rtx (MEM, GET_MODE (in), XEXP (XEXP (in, 0), 0));
771       if (GET_CODE (XEXP (in, 0)) == PRE_INC
772           || GET_CODE (XEXP (in, 0)) == PRE_DEC)
773         out = gen_rtx (MEM, GET_MODE (out), XEXP (XEXP (out, 0), 0));
774     }
775
776   /* If we are reloading a (SUBREG constant ...), really reload just the
777      inside expression in its own mode.  Similarly for (SUBREG (PLUS ...)).
778      If we have (SUBREG:M1 (MEM:M2 ...) ...) (or an inner REG that is still
779      a pseudo and hence will become a MEM) with M1 wider than M2 and the
780      register is a pseudo, also reload the inside expression.
781      For machines that extend byte loads, do this for any SUBREG of a pseudo
782      where both M1 and M2 are a word or smaller, M1 is wider than M2, and
783      M2 is an integral mode that gets extended when loaded.
784      Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
785      either M1 is not valid for R or M2 is wider than a word but we only
786      need one word to store an M2-sized quantity in R.
787      (However, if OUT is nonzero, we need to reload the reg *and*
788      the subreg, so do nothing here, and let following statement handle it.)
789
790      Note that the case of (SUBREG (CONST_INT...)...) is handled elsewhere;
791      we can't handle it here because CONST_INT does not indicate a mode.
792
793      Similarly, we must reload the inside expression if we have a
794      STRICT_LOW_PART (presumably, in == out in the cas).
795
796      Also reload the inner expression if it does not require a secondary
797      reload but the SUBREG does.
798
799      Finally, reload the inner expression if it is a register that is in
800      the class whose registers cannot be referenced in a different size
801      and M1 is not the same size as M2.  */
802
803   if (in != 0 && GET_CODE (in) == SUBREG
804 #ifdef CLASS_CANNOT_CHANGE_SIZE
805       && class != CLASS_CANNOT_CHANGE_SIZE
806 #endif
807       && (CONSTANT_P (SUBREG_REG (in))
808           || GET_CODE (SUBREG_REG (in)) == PLUS
809           || strict_low
810           || (((GET_CODE (SUBREG_REG (in)) == REG
811                 && REGNO (SUBREG_REG (in)) >= FIRST_PSEUDO_REGISTER)
812                || GET_CODE (SUBREG_REG (in)) == MEM)
813               && ((GET_MODE_SIZE (inmode)
814                    > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
815 #ifdef LOAD_EXTEND_OP
816                   || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
817                       && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
818                           <= UNITS_PER_WORD)
819                       && (GET_MODE_SIZE (inmode)
820                           > GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))))
821                       && INTEGRAL_MODE_P (GET_MODE (SUBREG_REG (in)))
822                       && LOAD_EXTEND_OP (GET_MODE (SUBREG_REG (in))) != NIL)
823 #endif
824                   ))
825           || (GET_CODE (SUBREG_REG (in)) == REG
826               && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
827               /* The case where out is nonzero
828                  is handled differently in the following statement.  */
829               && (out == 0 || SUBREG_WORD (in) == 0)
830               && ((GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
831                    && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
832                        > UNITS_PER_WORD)
833                    && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
834                         / UNITS_PER_WORD)
835                        != HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)),
836                                             GET_MODE (SUBREG_REG (in)))))
837                   || ! HARD_REGNO_MODE_OK ((REGNO (SUBREG_REG (in))
838                                             + SUBREG_WORD (in)),
839                                            inmode)))
840 #ifdef SECONDARY_INPUT_RELOAD_CLASS
841           || (SECONDARY_INPUT_RELOAD_CLASS (class, inmode, in) != NO_REGS
842               && (SECONDARY_INPUT_RELOAD_CLASS (class,
843                                                 GET_MODE (SUBREG_REG (in)),
844                                                 SUBREG_REG (in))
845                   == NO_REGS))
846 #endif
847 #ifdef CLASS_CANNOT_CHANGE_SIZE
848           || (GET_CODE (SUBREG_REG (in)) == REG
849               && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
850               && (TEST_HARD_REG_BIT
851                   (reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
852                    REGNO (SUBREG_REG (in))))
853               && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
854                   != GET_MODE_SIZE (inmode)))
855 #endif
856           ))
857     {
858       in_subreg_loc = inloc;
859       inloc = &SUBREG_REG (in);
860       in = *inloc;
861 #ifndef LOAD_EXTEND_OP
862       if (GET_CODE (in) == MEM)
863         /* This is supposed to happen only for paradoxical subregs made by
864            combine.c.  (SUBREG (MEM)) isn't supposed to occur other ways.  */
865         if (GET_MODE_SIZE (GET_MODE (in)) > GET_MODE_SIZE (inmode))
866           abort ();
867 #endif
868       inmode = GET_MODE (in);
869     }
870
871   /* Similar issue for (SUBREG:M1 (REG:M2 ...) ...) for a hard register R where
872      either M1 is not valid for R or M2 is wider than a word but we only
873      need one word to store an M2-sized quantity in R.
874
875      However, we must reload the inner reg *as well as* the subreg in
876      that case.  */
877
878   if (in != 0 && GET_CODE (in) == SUBREG
879       && GET_CODE (SUBREG_REG (in)) == REG
880       && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
881       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode)
882           || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
883               && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
884                   > UNITS_PER_WORD)
885               && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
886                    / UNITS_PER_WORD)
887                   != HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)),
888                                        GET_MODE (SUBREG_REG (in)))))))
889     {
890       push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
891                    GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type);
892     }
893
894
895   /* Similarly for paradoxical and problematical SUBREGs on the output.
896      Note that there is no reason we need worry about the previous value
897      of SUBREG_REG (out); even if wider than out,
898      storing in a subreg is entitled to clobber it all
899      (except in the case of STRICT_LOW_PART,
900      and in that case the constraint should label it input-output.)  */
901   if (out != 0 && GET_CODE (out) == SUBREG
902 #ifdef CLASS_CANNOT_CHANGE_SIZE
903       && class != CLASS_CANNOT_CHANGE_SIZE
904 #endif
905       && (CONSTANT_P (SUBREG_REG (out))
906           || strict_low
907           || (((GET_CODE (SUBREG_REG (out)) == REG
908                 && REGNO (SUBREG_REG (out)) >= FIRST_PSEUDO_REGISTER)
909                || GET_CODE (SUBREG_REG (out)) == MEM)
910               && ((GET_MODE_SIZE (outmode)
911                    > GET_MODE_SIZE (GET_MODE (SUBREG_REG (out))))))
912           || (GET_CODE (SUBREG_REG (out)) == REG
913               && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
914               && ((GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
915                    && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
916                        > UNITS_PER_WORD)
917                    && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
918                         / UNITS_PER_WORD)
919                        != HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)),
920                                             GET_MODE (SUBREG_REG (out)))))
921                   || ! HARD_REGNO_MODE_OK ((REGNO (SUBREG_REG (out))
922                                             + SUBREG_WORD (out)),
923                                            outmode)))
924 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
925           || (SECONDARY_OUTPUT_RELOAD_CLASS (class, outmode, out) != NO_REGS
926               && (SECONDARY_OUTPUT_RELOAD_CLASS (class,
927                                                  GET_MODE (SUBREG_REG (out)),
928                                                  SUBREG_REG (out))
929                   == NO_REGS))
930 #endif
931 #ifdef CLASS_CANNOT_CHANGE_SIZE
932           || (GET_CODE (SUBREG_REG (out)) == REG
933               && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
934               && (TEST_HARD_REG_BIT
935                   (reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE],
936                    REGNO (SUBREG_REG (out))))
937               && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
938                   != GET_MODE_SIZE (outmode)))
939 #endif
940           ))
941     {
942       out_subreg_loc = outloc;
943       outloc = &SUBREG_REG (out);
944       out = *outloc; 
945 #ifndef LOAD_EXTEND_OP
946      if (GET_CODE (out) == MEM
947           && GET_MODE_SIZE (GET_MODE (out)) > GET_MODE_SIZE (outmode))
948         abort ();
949 #endif
950       outmode = GET_MODE (out);
951     }
952
953   /* If IN appears in OUT, we can't share any input-only reload for IN.  */
954   if (in != 0 && out != 0 && GET_CODE (out) == MEM
955       && (GET_CODE (in) == REG || GET_CODE (in) == MEM)
956       && reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0)))
957     dont_share = 1;
958
959   /* If IN is a SUBREG of a hard register, make a new REG.  This
960      simplifies some of the cases below.  */
961
962   if (in != 0 && GET_CODE (in) == SUBREG && GET_CODE (SUBREG_REG (in)) == REG
963       && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER)
964     in = gen_rtx (REG, GET_MODE (in),
965                   REGNO (SUBREG_REG (in)) + SUBREG_WORD (in));
966
967   /* Similarly for OUT.  */
968   if (out != 0 && GET_CODE (out) == SUBREG
969       && GET_CODE (SUBREG_REG (out)) == REG
970       && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER)
971     out = gen_rtx (REG, GET_MODE (out),
972                   REGNO (SUBREG_REG (out)) + SUBREG_WORD (out));
973
974   /* Narrow down the class of register wanted if that is
975      desirable on this machine for efficiency.  */
976   if (in != 0)
977     class = PREFERRED_RELOAD_CLASS (in, class);
978
979   /* Output reloads may need analogous treatment, different in detail.  */
980 #ifdef PREFERRED_OUTPUT_RELOAD_CLASS
981   if (out != 0)
982     class = PREFERRED_OUTPUT_RELOAD_CLASS (out, class);
983 #endif
984
985   /* Make sure we use a class that can handle the actual pseudo
986      inside any subreg.  For example, on the 386, QImode regs
987      can appear within SImode subregs.  Although GENERAL_REGS
988      can handle SImode, QImode needs a smaller class.  */
989 #ifdef LIMIT_RELOAD_CLASS
990   if (in_subreg_loc)
991     class = LIMIT_RELOAD_CLASS (inmode, class);
992   else if (in != 0 && GET_CODE (in) == SUBREG)
993     class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (in)), class);
994
995   if (out_subreg_loc)
996     class = LIMIT_RELOAD_CLASS (outmode, class);
997   if (out != 0 && GET_CODE (out) == SUBREG)
998     class = LIMIT_RELOAD_CLASS (GET_MODE (SUBREG_REG (out)), class);
999 #endif
1000
1001   /* Verify that this class is at least possible for the mode that
1002      is specified.  */
1003   if (this_insn_is_asm)
1004     {
1005       enum machine_mode mode;
1006       if (GET_MODE_SIZE (inmode) > GET_MODE_SIZE (outmode))
1007         mode = inmode;
1008       else
1009         mode = outmode;
1010       if (mode == VOIDmode)
1011         {
1012           error_for_asm (this_insn, "cannot reload integer constant operand in `asm'");
1013           mode = word_mode;
1014           if (in != 0)
1015             inmode = word_mode;
1016           if (out != 0)
1017             outmode = word_mode;
1018         }
1019       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1020         if (HARD_REGNO_MODE_OK (i, mode)
1021             && TEST_HARD_REG_BIT (reg_class_contents[(int) class], i))
1022           {
1023             int nregs = HARD_REGNO_NREGS (i, mode);
1024
1025             int j;
1026             for (j = 1; j < nregs; j++)
1027               if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class], i + j))
1028                 break;
1029             if (j == nregs)
1030               break;
1031           }
1032       if (i == FIRST_PSEUDO_REGISTER)
1033         {
1034           error_for_asm (this_insn, "impossible register constraint in `asm'");
1035           class = ALL_REGS;
1036         }
1037     }
1038
1039   if (class == NO_REGS)
1040     abort ();
1041
1042   /* We can use an existing reload if the class is right
1043      and at least one of IN and OUT is a match
1044      and the other is at worst neutral.
1045      (A zero compared against anything is neutral.) 
1046
1047      If SMALL_REGISTER_CLASSES, don't use existing reloads unless they are
1048      for the same thing since that can cause us to need more reload registers
1049      than we otherwise would.  */
1050
1051   for (i = 0; i < n_reloads; i++)
1052     if ((reg_class_subset_p (class, reload_reg_class[i])
1053          || reg_class_subset_p (reload_reg_class[i], class))
1054         /* If the existing reload has a register, it must fit our class.  */
1055         && (reload_reg_rtx[i] == 0
1056             || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1057                                   true_regnum (reload_reg_rtx[i])))
1058         && ((in != 0 && MATCHES (reload_in[i], in) && ! dont_share
1059              && (out == 0 || reload_out[i] == 0 || MATCHES (reload_out[i], out)))
1060             ||
1061             (out != 0 && MATCHES (reload_out[i], out)
1062              && (in == 0 || reload_in[i] == 0 || MATCHES (reload_in[i], in))))
1063         && (reg_class_size[(int) class] == 1
1064 #ifdef SMALL_REGISTER_CLASSES
1065             || 1
1066 #endif
1067             )
1068         && MERGABLE_RELOADS (type, reload_when_needed[i],
1069                              opnum, reload_opnum[i]))
1070       break;
1071
1072   /* Reloading a plain reg for input can match a reload to postincrement
1073      that reg, since the postincrement's value is the right value.
1074      Likewise, it can match a preincrement reload, since we regard
1075      the preincrementation as happening before any ref in this insn
1076      to that register.  */
1077   if (i == n_reloads)
1078     for (i = 0; i < n_reloads; i++)
1079       if ((reg_class_subset_p (class, reload_reg_class[i])
1080            || reg_class_subset_p (reload_reg_class[i], class))
1081           /* If the existing reload has a register, it must fit our class.  */
1082           && (reload_reg_rtx[i] == 0
1083               || TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1084                                     true_regnum (reload_reg_rtx[i])))
1085           && out == 0 && reload_out[i] == 0 && reload_in[i] != 0
1086           && ((GET_CODE (in) == REG
1087                && (GET_CODE (reload_in[i]) == POST_INC
1088                    || GET_CODE (reload_in[i]) == POST_DEC
1089                    || GET_CODE (reload_in[i]) == PRE_INC
1090                    || GET_CODE (reload_in[i]) == PRE_DEC)
1091                && MATCHES (XEXP (reload_in[i], 0), in))
1092               ||
1093               (GET_CODE (reload_in[i]) == REG
1094                && (GET_CODE (in) == POST_INC
1095                    || GET_CODE (in) == POST_DEC
1096                    || GET_CODE (in) == PRE_INC
1097                    || GET_CODE (in) == PRE_DEC)
1098                && MATCHES (XEXP (in, 0), reload_in[i])))
1099           && (reg_class_size[(int) class] == 1
1100 #ifdef SMALL_REGISTER_CLASSES
1101               || 1
1102 #endif
1103               )
1104           && MERGABLE_RELOADS (type, reload_when_needed[i],
1105                                opnum, reload_opnum[i]))
1106         {
1107           /* Make sure reload_in ultimately has the increment,
1108              not the plain register.  */
1109           if (GET_CODE (in) == REG)
1110             in = reload_in[i];
1111           break;
1112         }
1113
1114   if (i == n_reloads)
1115     {
1116       /* See if we need a secondary reload register to move between CLASS
1117          and IN or CLASS and OUT.  Get the icode and push any required reloads
1118          needed for each of them if so.  */
1119
1120 #ifdef SECONDARY_INPUT_RELOAD_CLASS
1121       if (in != 0)
1122         secondary_in_reload
1123           = push_secondary_reload (1, in, opnum, optional, class, inmode, type,
1124                                    &secondary_in_icode);
1125 #endif
1126
1127 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
1128       if (out != 0 && GET_CODE (out) != SCRATCH)
1129         secondary_out_reload
1130           = push_secondary_reload (0, out, opnum, optional, class, outmode,
1131                                    type, &secondary_out_icode);
1132 #endif
1133
1134       /* We found no existing reload suitable for re-use.
1135          So add an additional reload.  */
1136
1137       i = n_reloads;
1138       reload_in[i] = in;
1139       reload_out[i] = out;
1140       reload_reg_class[i] = class;
1141       reload_inmode[i] = inmode;
1142       reload_outmode[i] = outmode;
1143       reload_reg_rtx[i] = 0;
1144       reload_optional[i] = optional;
1145       reload_inc[i] = 0;
1146       reload_nocombine[i] = 0;
1147       reload_in_reg[i] = inloc ? *inloc : 0;
1148       reload_opnum[i] = opnum;
1149       reload_when_needed[i] = type;
1150       reload_secondary_in_reload[i] = secondary_in_reload;
1151       reload_secondary_out_reload[i] = secondary_out_reload;
1152       reload_secondary_in_icode[i] = secondary_in_icode;
1153       reload_secondary_out_icode[i] = secondary_out_icode;
1154       reload_secondary_p[i] = 0;
1155
1156       n_reloads++;
1157
1158 #ifdef SECONDARY_MEMORY_NEEDED
1159       /* If a memory location is needed for the copy, make one.  */
1160       if (in != 0 && GET_CODE (in) == REG
1161           && REGNO (in) < FIRST_PSEUDO_REGISTER
1162           && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (in)),
1163                                      class, inmode))
1164         get_secondary_mem (in, inmode, opnum, type);
1165
1166       if (out != 0 && GET_CODE (out) == REG
1167           && REGNO (out) < FIRST_PSEUDO_REGISTER
1168           && SECONDARY_MEMORY_NEEDED (class, REGNO_REG_CLASS (REGNO (out)),
1169                                       outmode))
1170         get_secondary_mem (out, outmode, opnum, type);
1171 #endif
1172     }
1173   else
1174     {
1175       /* We are reusing an existing reload,
1176          but we may have additional information for it.
1177          For example, we may now have both IN and OUT
1178          while the old one may have just one of them.  */
1179
1180       if (inmode != VOIDmode)
1181         reload_inmode[i] = inmode;
1182       if (outmode != VOIDmode)
1183         reload_outmode[i] = outmode;
1184       if (in != 0)
1185         reload_in[i] = in;
1186       if (out != 0)
1187         reload_out[i] = out;
1188       if (reg_class_subset_p (class, reload_reg_class[i]))
1189         reload_reg_class[i] = class;
1190       reload_optional[i] &= optional;
1191       if (MERGE_TO_OTHER (type, reload_when_needed[i],
1192                           opnum, reload_opnum[i]))
1193         reload_when_needed[i] = RELOAD_OTHER;
1194       reload_opnum[i] = MIN (reload_opnum[i], opnum);
1195     }
1196
1197   /* If the ostensible rtx being reload differs from the rtx found
1198      in the location to substitute, this reload is not safe to combine
1199      because we cannot reliably tell whether it appears in the insn.  */
1200
1201   if (in != 0 && in != *inloc)
1202     reload_nocombine[i] = 1;
1203
1204 #if 0
1205   /* This was replaced by changes in find_reloads_address_1 and the new
1206      function inc_for_reload, which go with a new meaning of reload_inc.  */
1207
1208   /* If this is an IN/OUT reload in an insn that sets the CC,
1209      it must be for an autoincrement.  It doesn't work to store
1210      the incremented value after the insn because that would clobber the CC.
1211      So we must do the increment of the value reloaded from,
1212      increment it, store it back, then decrement again.  */
1213   if (out != 0 && sets_cc0_p (PATTERN (this_insn)))
1214     {
1215       out = 0;
1216       reload_out[i] = 0;
1217       reload_inc[i] = find_inc_amount (PATTERN (this_insn), in);
1218       /* If we did not find a nonzero amount-to-increment-by,
1219          that contradicts the belief that IN is being incremented
1220          in an address in this insn.  */
1221       if (reload_inc[i] == 0)
1222         abort ();
1223     }
1224 #endif
1225
1226   /* If we will replace IN and OUT with the reload-reg,
1227      record where they are located so that substitution need
1228      not do a tree walk.  */
1229
1230   if (replace_reloads)
1231     {
1232       if (inloc != 0)
1233         {
1234           register struct replacement *r = &replacements[n_replacements++];
1235           r->what = i;
1236           r->subreg_loc = in_subreg_loc;
1237           r->where = inloc;
1238           r->mode = inmode;
1239         }
1240       if (outloc != 0 && outloc != inloc)
1241         {
1242           register struct replacement *r = &replacements[n_replacements++];
1243           r->what = i;
1244           r->where = outloc;
1245           r->subreg_loc = out_subreg_loc;
1246           r->mode = outmode;
1247         }
1248     }
1249
1250   /* If this reload is just being introduced and it has both
1251      an incoming quantity and an outgoing quantity that are
1252      supposed to be made to match, see if either one of the two
1253      can serve as the place to reload into.
1254
1255      If one of them is acceptable, set reload_reg_rtx[i]
1256      to that one.  */
1257
1258   if (in != 0 && out != 0 && in != out && reload_reg_rtx[i] == 0)
1259     {
1260       reload_reg_rtx[i] = find_dummy_reload (in, out, inloc, outloc,
1261                                              inmode, outmode,
1262                                              reload_reg_class[i], i);
1263
1264       /* If the outgoing register already contains the same value
1265          as the incoming one, we can dispense with loading it.
1266          The easiest way to tell the caller that is to give a phony
1267          value for the incoming operand (same as outgoing one).  */
1268       if (reload_reg_rtx[i] == out
1269           && (GET_CODE (in) == REG || CONSTANT_P (in))
1270           && 0 != find_equiv_reg (in, this_insn, 0, REGNO (out),
1271                                   static_reload_reg_p, i, inmode))
1272         reload_in[i] = out;
1273     }
1274
1275   /* If this is an input reload and the operand contains a register that
1276      dies in this insn and is used nowhere else, see if it is the right class
1277      to be used for this reload.  Use it if so.  (This occurs most commonly
1278      in the case of paradoxical SUBREGs and in-out reloads).  We cannot do
1279      this if it is also an output reload that mentions the register unless
1280      the output is a SUBREG that clobbers an entire register.
1281
1282      Note that the operand might be one of the spill regs, if it is a
1283      pseudo reg and we are in a block where spilling has not taken place.
1284      But if there is no spilling in this block, that is OK.
1285      An explicitly used hard reg cannot be a spill reg.  */
1286
1287   if (reload_reg_rtx[i] == 0 && in != 0)
1288     {
1289       rtx note;
1290       int regno;
1291
1292       for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1293         if (REG_NOTE_KIND (note) == REG_DEAD
1294             && GET_CODE (XEXP (note, 0)) == REG
1295             && (regno = REGNO (XEXP (note, 0))) < FIRST_PSEUDO_REGISTER
1296             && reg_mentioned_p (XEXP (note, 0), in)
1297             && ! refers_to_regno_for_reload_p (regno,
1298                                                (regno
1299                                                 + HARD_REGNO_NREGS (regno,
1300                                                                     inmode)),
1301                                                PATTERN (this_insn), inloc)
1302             /* If this is also an output reload, IN cannot be used as
1303                the reload register if it is set in this insn unless IN
1304                is also OUT.  */
1305             && (out == 0 || in == out
1306                 || ! hard_reg_set_here_p (regno,
1307                                           (regno
1308                                            + HARD_REGNO_NREGS (regno,
1309                                                                inmode)),
1310                                           PATTERN (this_insn)))
1311             /* ??? Why is this code so different from the previous?
1312                Is there any simple coherent way to describe the two together?
1313                What's going on here.  */
1314             && (in != out
1315                 || (GET_CODE (in) == SUBREG
1316                     && (((GET_MODE_SIZE (GET_MODE (in)) + (UNITS_PER_WORD - 1))
1317                          / UNITS_PER_WORD)
1318                         == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
1319                              + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
1320             /* Make sure the operand fits in the reg that dies.  */
1321             && GET_MODE_SIZE (inmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
1322             && HARD_REGNO_MODE_OK (regno, inmode)
1323             && GET_MODE_SIZE (outmode) <= GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
1324             && HARD_REGNO_MODE_OK (regno, outmode)
1325             && TEST_HARD_REG_BIT (reg_class_contents[(int) class], regno)
1326             && !fixed_regs[regno])
1327           {
1328             reload_reg_rtx[i] = gen_rtx (REG, inmode, regno);
1329             break;
1330           }
1331     }
1332
1333   if (out)
1334     output_reloadnum = i;
1335
1336   return i;
1337 }
1338
1339 /* Record an additional place we must replace a value
1340    for which we have already recorded a reload.
1341    RELOADNUM is the value returned by push_reload
1342    when the reload was recorded.
1343    This is used in insn patterns that use match_dup.  */
1344
1345 static void
1346 push_replacement (loc, reloadnum, mode)
1347      rtx *loc;
1348      int reloadnum;
1349      enum machine_mode mode;
1350 {
1351   if (replace_reloads)
1352     {
1353       register struct replacement *r = &replacements[n_replacements++];
1354       r->what = reloadnum;
1355       r->where = loc;
1356       r->subreg_loc = 0;
1357       r->mode = mode;
1358     }
1359 }
1360 \f
1361 /* Transfer all replacements that used to be in reload FROM to be in
1362    reload TO.  */
1363
1364 void
1365 transfer_replacements (to, from)
1366      int to, from;
1367 {
1368   int i;
1369
1370   for (i = 0; i < n_replacements; i++)
1371     if (replacements[i].what == from)
1372       replacements[i].what = to;
1373 }
1374 \f
1375 /* If there is only one output reload, and it is not for an earlyclobber
1376    operand, try to combine it with a (logically unrelated) input reload
1377    to reduce the number of reload registers needed.
1378
1379    This is safe if the input reload does not appear in
1380    the value being output-reloaded, because this implies
1381    it is not needed any more once the original insn completes.
1382
1383    If that doesn't work, see we can use any of the registers that
1384    die in this insn as a reload register.  We can if it is of the right
1385    class and does not appear in the value being output-reloaded.  */
1386
1387 static void
1388 combine_reloads ()
1389 {
1390   int i;
1391   int output_reload = -1;
1392   int secondary_out = -1;
1393   rtx note;
1394
1395   /* Find the output reload; return unless there is exactly one
1396      and that one is mandatory.  */
1397
1398   for (i = 0; i < n_reloads; i++)
1399     if (reload_out[i] != 0)
1400       {
1401         if (output_reload >= 0)
1402           return;
1403         output_reload = i;
1404       }
1405
1406   if (output_reload < 0 || reload_optional[output_reload])
1407     return;
1408
1409   /* An input-output reload isn't combinable.  */
1410
1411   if (reload_in[output_reload] != 0)
1412     return;
1413
1414   /* If this reload is for an earlyclobber operand, we can't do anything.  */
1415   if (earlyclobber_operand_p (reload_out[output_reload]))
1416     return;
1417
1418   /* Check each input reload; can we combine it?  */
1419
1420   for (i = 0; i < n_reloads; i++)
1421     if (reload_in[i] && ! reload_optional[i] && ! reload_nocombine[i]
1422         /* Life span of this reload must not extend past main insn.  */
1423         && reload_when_needed[i] != RELOAD_FOR_OUTPUT_ADDRESS
1424         && reload_when_needed[i] != RELOAD_OTHER
1425         && (CLASS_MAX_NREGS (reload_reg_class[i], reload_inmode[i])
1426             == CLASS_MAX_NREGS (reload_reg_class[output_reload],
1427                                 reload_outmode[output_reload]))
1428         && reload_inc[i] == 0
1429         && reload_reg_rtx[i] == 0
1430 #ifdef SECONDARY_MEMORY_NEEDED
1431         /* Don't combine two reloads with different secondary
1432            memory locations.  */
1433         && (secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[i]] == 0
1434             || secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[output_reload]] == 0
1435             || rtx_equal_p (secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[i]],
1436                             secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[output_reload]]))
1437 #endif
1438 #ifdef SMALL_REGISTER_CLASSES
1439         && reload_reg_class[i] == reload_reg_class[output_reload]
1440 #else
1441         && (reg_class_subset_p (reload_reg_class[i],
1442                                 reload_reg_class[output_reload])
1443             || reg_class_subset_p (reload_reg_class[output_reload],
1444                                    reload_reg_class[i]))
1445 #endif
1446         && (MATCHES (reload_in[i], reload_out[output_reload])
1447             /* Args reversed because the first arg seems to be
1448                the one that we imagine being modified
1449                while the second is the one that might be affected.  */
1450             || (! reg_overlap_mentioned_for_reload_p (reload_out[output_reload],
1451                                                       reload_in[i])
1452                 /* However, if the input is a register that appears inside
1453                    the output, then we also can't share.
1454                    Imagine (set (mem (reg 69)) (plus (reg 69) ...)).
1455                    If the same reload reg is used for both reg 69 and the
1456                    result to be stored in memory, then that result
1457                    will clobber the address of the memory ref.  */
1458                 && ! (GET_CODE (reload_in[i]) == REG
1459                       && reg_overlap_mentioned_for_reload_p (reload_in[i],
1460                                                              reload_out[output_reload]))))
1461         && (reg_class_size[(int) reload_reg_class[i]]
1462 #ifdef SMALL_REGISTER_CLASSES
1463              || 1
1464 #endif
1465             )
1466         /* We will allow making things slightly worse by combining an
1467            input and an output, but no worse than that.  */
1468         && (reload_when_needed[i] == RELOAD_FOR_INPUT
1469             || reload_when_needed[i] == RELOAD_FOR_OUTPUT))
1470       {
1471         int j;
1472
1473         /* We have found a reload to combine with!  */
1474         reload_out[i] = reload_out[output_reload];
1475         reload_outmode[i] = reload_outmode[output_reload];
1476         /* Mark the old output reload as inoperative.  */
1477         reload_out[output_reload] = 0;
1478         /* The combined reload is needed for the entire insn.  */
1479         reload_when_needed[i] = RELOAD_OTHER;
1480         /* If the output reload had a secondary reload, copy it. */
1481         if (reload_secondary_out_reload[output_reload] != -1)
1482           {
1483             reload_secondary_out_reload[i]
1484               = reload_secondary_out_reload[output_reload];
1485             reload_secondary_out_icode[i]
1486               = reload_secondary_out_icode[output_reload];
1487           }
1488
1489 #ifdef SECONDARY_MEMORY_NEEDED
1490         /* Copy any secondary MEM.  */
1491         if (secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[output_reload]] != 0)
1492           secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[i]]
1493             = secondary_memlocs_elim[(int) reload_outmode[output_reload]][reload_opnum[output_reload]];
1494 #endif
1495         /* If required, minimize the register class. */
1496         if (reg_class_subset_p (reload_reg_class[output_reload],
1497                                 reload_reg_class[i]))
1498           reload_reg_class[i] = reload_reg_class[output_reload];
1499
1500         /* Transfer all replacements from the old reload to the combined.  */
1501         for (j = 0; j < n_replacements; j++)
1502           if (replacements[j].what == output_reload)
1503             replacements[j].what = i;
1504
1505         return;
1506       }
1507
1508   /* If this insn has only one operand that is modified or written (assumed
1509      to be the first),  it must be the one corresponding to this reload.  It
1510      is safe to use anything that dies in this insn for that output provided
1511      that it does not occur in the output (we already know it isn't an
1512      earlyclobber.  If this is an asm insn, give up.  */
1513
1514   if (INSN_CODE (this_insn) == -1)
1515     return;
1516
1517   for (i = 1; i < insn_n_operands[INSN_CODE (this_insn)]; i++)
1518     if (insn_operand_constraint[INSN_CODE (this_insn)][i][0] == '='
1519         || insn_operand_constraint[INSN_CODE (this_insn)][i][0] == '+')
1520       return;
1521
1522   /* See if some hard register that dies in this insn and is not used in
1523      the output is the right class.  Only works if the register we pick
1524      up can fully hold our output reload.  */
1525   for (note = REG_NOTES (this_insn); note; note = XEXP (note, 1))
1526     if (REG_NOTE_KIND (note) == REG_DEAD
1527         && GET_CODE (XEXP (note, 0)) == REG
1528         && ! reg_overlap_mentioned_for_reload_p (XEXP (note, 0),
1529                                                  reload_out[output_reload])
1530         && REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER
1531         && HARD_REGNO_MODE_OK (REGNO (XEXP (note, 0)), reload_outmode[output_reload])
1532         && TEST_HARD_REG_BIT (reg_class_contents[(int) reload_reg_class[output_reload]],
1533                               REGNO (XEXP (note, 0)))
1534         && (HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), reload_outmode[output_reload])
1535             <= HARD_REGNO_NREGS (REGNO (XEXP (note, 0)), GET_MODE (XEXP (note, 0))))
1536         /* Ensure that a secondary or tertiary reload for this output
1537            won't want this register.  */
1538         && ((secondary_out = reload_secondary_out_reload[output_reload]) == -1
1539             || (! (TEST_HARD_REG_BIT
1540                     (reg_class_contents[(int) reload_reg_class[secondary_out]],
1541                      REGNO (XEXP (note, 0))))
1542                 && ((secondary_out = reload_secondary_out_reload[secondary_out]) == -1
1543                     ||  ! (TEST_HARD_REG_BIT
1544                            (reg_class_contents[(int) reload_reg_class[secondary_out]],
1545                             REGNO (XEXP (note, 0)))))))
1546         && ! fixed_regs[REGNO (XEXP (note, 0))])
1547       {
1548         reload_reg_rtx[output_reload] = gen_rtx (REG,
1549                                                  reload_outmode[output_reload],
1550                                                  REGNO (XEXP (note, 0)));
1551         return;
1552       }
1553 }
1554 \f
1555 /* Try to find a reload register for an in-out reload (expressions IN and OUT).
1556    See if one of IN and OUT is a register that may be used;
1557    this is desirable since a spill-register won't be needed.
1558    If so, return the register rtx that proves acceptable.
1559
1560    INLOC and OUTLOC are locations where IN and OUT appear in the insn.
1561    CLASS is the register class required for the reload.
1562
1563    If FOR_REAL is >= 0, it is the number of the reload,
1564    and in some cases when it can be discovered that OUT doesn't need
1565    to be computed, clear out reload_out[FOR_REAL].
1566
1567    If FOR_REAL is -1, this should not be done, because this call
1568    is just to see if a register can be found, not to find and install it.  */
1569
1570 static rtx
1571 find_dummy_reload (real_in, real_out, inloc, outloc,
1572                    inmode, outmode, class, for_real)
1573      rtx real_in, real_out;
1574      rtx *inloc, *outloc;
1575      enum machine_mode inmode, outmode;
1576      enum reg_class class;
1577      int for_real;
1578 {
1579   rtx in = real_in;
1580   rtx out = real_out;
1581   int in_offset = 0;
1582   int out_offset = 0;
1583   rtx value = 0;
1584
1585   /* If operands exceed a word, we can't use either of them
1586      unless they have the same size.  */
1587   if (GET_MODE_SIZE (outmode) != GET_MODE_SIZE (inmode)
1588       && (GET_MODE_SIZE (outmode) > UNITS_PER_WORD
1589           || GET_MODE_SIZE (inmode) > UNITS_PER_WORD))
1590     return 0;
1591
1592   /* Find the inside of any subregs.  */
1593   while (GET_CODE (out) == SUBREG)
1594     {
1595       out_offset = SUBREG_WORD (out);
1596       out = SUBREG_REG (out);
1597     }
1598   while (GET_CODE (in) == SUBREG)
1599     {
1600       in_offset = SUBREG_WORD (in);
1601       in = SUBREG_REG (in);
1602     }
1603
1604   /* Narrow down the reg class, the same way push_reload will;
1605      otherwise we might find a dummy now, but push_reload won't.  */
1606   class = PREFERRED_RELOAD_CLASS (in, class);
1607
1608   /* See if OUT will do.  */
1609   if (GET_CODE (out) == REG
1610       && REGNO (out) < FIRST_PSEUDO_REGISTER)
1611     {
1612       register int regno = REGNO (out) + out_offset;
1613       int nwords = HARD_REGNO_NREGS (regno, outmode);
1614       rtx saved_rtx;
1615
1616       /* When we consider whether the insn uses OUT,
1617          ignore references within IN.  They don't prevent us
1618          from copying IN into OUT, because those refs would
1619          move into the insn that reloads IN.
1620
1621          However, we only ignore IN in its role as this reload.
1622          If the insn uses IN elsewhere and it contains OUT,
1623          that counts.  We can't be sure it's the "same" operand
1624          so it might not go through this reload.  */
1625       saved_rtx = *inloc;
1626       *inloc = const0_rtx;
1627
1628       if (regno < FIRST_PSEUDO_REGISTER
1629           /* A fixed reg that can overlap other regs better not be used
1630              for reloading in any way.  */
1631 #ifdef OVERLAPPING_REGNO_P
1632           && ! (fixed_regs[regno] && OVERLAPPING_REGNO_P (regno))
1633 #endif
1634           && ! refers_to_regno_for_reload_p (regno, regno + nwords,
1635                                              PATTERN (this_insn), outloc))
1636         {
1637           int i;
1638           for (i = 0; i < nwords; i++)
1639             if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1640                                      regno + i))
1641               break;
1642
1643           if (i == nwords)
1644             {
1645               if (GET_CODE (real_out) == REG)
1646                 value = real_out;
1647               else
1648                 value = gen_rtx (REG, outmode, regno);
1649             }
1650         }
1651
1652       *inloc = saved_rtx;
1653     }
1654
1655   /* Consider using IN if OUT was not acceptable
1656      or if OUT dies in this insn (like the quotient in a divmod insn).
1657      We can't use IN unless it is dies in this insn,
1658      which means we must know accurately which hard regs are live.
1659      Also, the result can't go in IN if IN is used within OUT.  */
1660   if (hard_regs_live_known
1661       && GET_CODE (in) == REG
1662       && REGNO (in) < FIRST_PSEUDO_REGISTER
1663       && (value == 0
1664           || find_reg_note (this_insn, REG_UNUSED, real_out))
1665       && find_reg_note (this_insn, REG_DEAD, real_in)
1666       && !fixed_regs[REGNO (in)]
1667       && HARD_REGNO_MODE_OK (REGNO (in),
1668                              /* The only case where out and real_out might
1669                                 have different modes is where real_out
1670                                 is a subreg, and in that case, out
1671                                 has a real mode.  */
1672                              (GET_MODE (out) != VOIDmode
1673                               ? GET_MODE (out) : outmode)))
1674     {
1675       register int regno = REGNO (in) + in_offset;
1676       int nwords = HARD_REGNO_NREGS (regno, inmode);
1677
1678       if (! refers_to_regno_for_reload_p (regno, regno + nwords, out, NULL_PTR)
1679           && ! hard_reg_set_here_p (regno, regno + nwords,
1680                                     PATTERN (this_insn)))
1681         {
1682           int i;
1683           for (i = 0; i < nwords; i++)
1684             if (! TEST_HARD_REG_BIT (reg_class_contents[(int) class],
1685                                      regno + i))
1686               break;
1687
1688           if (i == nwords)
1689             {
1690               /* If we were going to use OUT as the reload reg
1691                  and changed our mind, it means OUT is a dummy that
1692                  dies here.  So don't bother copying value to it.  */
1693               if (for_real >= 0 && value == real_out)
1694                 reload_out[for_real] = 0;
1695               if (GET_CODE (real_in) == REG)
1696                 value = real_in;
1697               else
1698                 value = gen_rtx (REG, inmode, regno);
1699             }
1700         }
1701     }
1702
1703   return value;
1704 }
1705 \f
1706 /* This page contains subroutines used mainly for determining
1707    whether the IN or an OUT of a reload can serve as the
1708    reload register.  */
1709
1710 /* Return 1 if X is an operand of an insn that is being earlyclobbered.  */
1711
1712 static int
1713 earlyclobber_operand_p (x)
1714      rtx x;
1715 {
1716   int i;
1717
1718   for (i = 0; i < n_earlyclobbers; i++)
1719     if (reload_earlyclobbers[i] == x)
1720       return 1;
1721
1722   return 0;
1723 }
1724
1725 /* Return 1 if expression X alters a hard reg in the range
1726    from BEG_REGNO (inclusive) to END_REGNO (exclusive),
1727    either explicitly or in the guise of a pseudo-reg allocated to REGNO.
1728    X should be the body of an instruction.  */
1729
1730 static int
1731 hard_reg_set_here_p (beg_regno, end_regno, x)
1732      register int beg_regno, end_regno;
1733      rtx x;
1734 {
1735   if (GET_CODE (x) == SET || GET_CODE (x) == CLOBBER)
1736     {
1737       register rtx op0 = SET_DEST (x);
1738       while (GET_CODE (op0) == SUBREG)
1739         op0 = SUBREG_REG (op0);
1740       if (GET_CODE (op0) == REG)
1741         {
1742           register int r = REGNO (op0);
1743           /* See if this reg overlaps range under consideration.  */
1744           if (r < end_regno
1745               && r + HARD_REGNO_NREGS (r, GET_MODE (op0)) > beg_regno)
1746             return 1;
1747         }
1748     }
1749   else if (GET_CODE (x) == PARALLEL)
1750     {
1751       register int i = XVECLEN (x, 0) - 1;
1752       for (; i >= 0; i--)
1753         if (hard_reg_set_here_p (beg_regno, end_regno, XVECEXP (x, 0, i)))
1754           return 1;
1755     }
1756
1757   return 0;
1758 }
1759
1760 /* Return 1 if ADDR is a valid memory address for mode MODE,
1761    and check that each pseudo reg has the proper kind of
1762    hard reg.  */
1763
1764 int
1765 strict_memory_address_p (mode, addr)
1766      enum machine_mode mode;
1767      register rtx addr;
1768 {
1769   GO_IF_LEGITIMATE_ADDRESS (mode, addr, win);
1770   return 0;
1771
1772  win:
1773   return 1;
1774 }
1775 \f
1776 /* Like rtx_equal_p except that it allows a REG and a SUBREG to match
1777    if they are the same hard reg, and has special hacks for
1778    autoincrement and autodecrement.
1779    This is specifically intended for find_reloads to use
1780    in determining whether two operands match.
1781    X is the operand whose number is the lower of the two.
1782
1783    The value is 2 if Y contains a pre-increment that matches
1784    a non-incrementing address in X.  */
1785
1786 /* ??? To be completely correct, we should arrange to pass
1787    for X the output operand and for Y the input operand.
1788    For now, we assume that the output operand has the lower number
1789    because that is natural in (SET output (... input ...)).  */
1790
1791 int
1792 operands_match_p (x, y)
1793      register rtx x, y;
1794 {
1795   register int i;
1796   register RTX_CODE code = GET_CODE (x);
1797   register char *fmt;
1798   int success_2;
1799       
1800   if (x == y)
1801     return 1;
1802   if ((code == REG || (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG))
1803       && (GET_CODE (y) == REG || (GET_CODE (y) == SUBREG
1804                                   && GET_CODE (SUBREG_REG (y)) == REG)))
1805     {
1806       register int j;
1807
1808       if (code == SUBREG)
1809         {
1810           i = REGNO (SUBREG_REG (x));
1811           if (i >= FIRST_PSEUDO_REGISTER)
1812             goto slow;
1813           i += SUBREG_WORD (x);
1814         }
1815       else
1816         i = REGNO (x);
1817
1818       if (GET_CODE (y) == SUBREG)
1819         {
1820           j = REGNO (SUBREG_REG (y));
1821           if (j >= FIRST_PSEUDO_REGISTER)
1822             goto slow;
1823           j += SUBREG_WORD (y);
1824         }
1825       else
1826         j = REGNO (y);
1827
1828       /* On a WORDS_BIG_ENDIAN machine, point to the last register of a
1829          multiple hard register group, so that for example (reg:DI 0) and
1830          (reg:SI 1) will be considered the same register.  */
1831       if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
1832           && i < FIRST_PSEUDO_REGISTER)
1833         i += (GET_MODE_SIZE (GET_MODE (x)) / UNITS_PER_WORD) - 1;
1834       if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
1835           && j < FIRST_PSEUDO_REGISTER)
1836         j += (GET_MODE_SIZE (GET_MODE (y)) / UNITS_PER_WORD) - 1;
1837
1838       return i == j;
1839     }
1840   /* If two operands must match, because they are really a single
1841      operand of an assembler insn, then two postincrements are invalid
1842      because the assembler insn would increment only once.
1843      On the other hand, an postincrement matches ordinary indexing
1844      if the postincrement is the output operand.  */
1845   if (code == POST_DEC || code == POST_INC)
1846     return operands_match_p (XEXP (x, 0), y);
1847   /* Two preincrements are invalid
1848      because the assembler insn would increment only once.
1849      On the other hand, an preincrement matches ordinary indexing
1850      if the preincrement is the input operand.
1851      In this case, return 2, since some callers need to do special
1852      things when this happens.  */
1853   if (GET_CODE (y) == PRE_DEC || GET_CODE (y) == PRE_INC)
1854     return operands_match_p (x, XEXP (y, 0)) ? 2 : 0;
1855
1856  slow:
1857
1858   /* Now we have disposed of all the cases 
1859      in which different rtx codes can match.  */
1860   if (code != GET_CODE (y))
1861     return 0;
1862   if (code == LABEL_REF)
1863     return XEXP (x, 0) == XEXP (y, 0);
1864   if (code == SYMBOL_REF)
1865     return XSTR (x, 0) == XSTR (y, 0);
1866
1867   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.  */
1868
1869   if (GET_MODE (x) != GET_MODE (y))
1870     return 0;
1871
1872   /* Compare the elements.  If any pair of corresponding elements
1873      fail to match, return 0 for the whole things.  */
1874
1875   success_2 = 0;
1876   fmt = GET_RTX_FORMAT (code);
1877   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1878     {
1879       int val;
1880       switch (fmt[i])
1881         {
1882         case 'w':
1883           if (XWINT (x, i) != XWINT (y, i))
1884             return 0;
1885           break;
1886
1887         case 'i':
1888           if (XINT (x, i) != XINT (y, i))
1889             return 0;
1890           break;
1891
1892         case 'e':
1893           val = operands_match_p (XEXP (x, i), XEXP (y, i));
1894           if (val == 0)
1895             return 0;
1896           /* If any subexpression returns 2,
1897              we should return 2 if we are successful.  */
1898           if (val == 2)
1899             success_2 = 1;
1900           break;
1901
1902         case '0':
1903           break;
1904
1905           /* It is believed that rtx's at this level will never
1906              contain anything but integers and other rtx's,
1907              except for within LABEL_REFs and SYMBOL_REFs.  */
1908         default:
1909           abort ();
1910         }
1911     }
1912   return 1 + success_2;
1913 }
1914 \f
1915 /* Return the number of times character C occurs in string S.  */
1916
1917 int
1918 n_occurrences (c, s)
1919      int c;
1920      char *s;
1921 {
1922   int n = 0;
1923   while (*s)
1924     n += (*s++ == c);
1925   return n;
1926 }
1927 \f
1928 /* Describe the range of registers or memory referenced by X.
1929    If X is a register, set REG_FLAG and put the first register 
1930    number into START and the last plus one into END.
1931    If X is a memory reference, put a base address into BASE 
1932    and a range of integer offsets into START and END.
1933    If X is pushing on the stack, we can assume it causes no trouble, 
1934    so we set the SAFE field.  */
1935
1936 static struct decomposition
1937 decompose (x)
1938      rtx x;
1939 {
1940   struct decomposition val;
1941   int all_const = 0;
1942
1943   val.reg_flag = 0;
1944   val.safe = 0;
1945   if (GET_CODE (x) == MEM)
1946     {
1947       rtx base, offset = 0;
1948       rtx addr = XEXP (x, 0);
1949
1950       if (GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
1951           || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
1952         {
1953           val.base = XEXP (addr, 0);
1954           val.start = - GET_MODE_SIZE (GET_MODE (x));
1955           val.end = GET_MODE_SIZE (GET_MODE (x));
1956           val.safe = REGNO (val.base) == STACK_POINTER_REGNUM;
1957           return val;
1958         }
1959
1960       if (GET_CODE (addr) == CONST)
1961         {
1962           addr = XEXP (addr, 0);
1963           all_const = 1;
1964         }
1965       if (GET_CODE (addr) == PLUS)
1966         {
1967           if (CONSTANT_P (XEXP (addr, 0)))
1968             {
1969               base = XEXP (addr, 1);
1970               offset = XEXP (addr, 0);
1971             }
1972           else if (CONSTANT_P (XEXP (addr, 1)))
1973             {
1974               base = XEXP (addr, 0);
1975               offset = XEXP (addr, 1);
1976             }
1977         }
1978
1979       if (offset == 0)
1980         {
1981           base = addr;
1982           offset = const0_rtx;
1983         } 
1984       if (GET_CODE (offset) == CONST)
1985         offset = XEXP (offset, 0);
1986       if (GET_CODE (offset) == PLUS)
1987         {
1988           if (GET_CODE (XEXP (offset, 0)) == CONST_INT)
1989             {
1990               base = gen_rtx (PLUS, GET_MODE (base), base, XEXP (offset, 1));
1991               offset = XEXP (offset, 0);
1992             }
1993           else if (GET_CODE (XEXP (offset, 1)) == CONST_INT)
1994             {
1995               base = gen_rtx (PLUS, GET_MODE (base), base, XEXP (offset, 0));
1996               offset = XEXP (offset, 1);
1997             }
1998           else
1999             {
2000               base = gen_rtx (PLUS, GET_MODE (base), base, offset);
2001               offset = const0_rtx;
2002             }
2003         }
2004       else if (GET_CODE (offset) != CONST_INT)
2005         {
2006           base = gen_rtx (PLUS, GET_MODE (base), base, offset);
2007           offset = const0_rtx;
2008         }
2009
2010       if (all_const && GET_CODE (base) == PLUS)
2011         base = gen_rtx (CONST, GET_MODE (base), base);
2012
2013       if (GET_CODE (offset) != CONST_INT)
2014         abort ();
2015
2016       val.start = INTVAL (offset);
2017       val.end = val.start + GET_MODE_SIZE (GET_MODE (x));
2018       val.base = base;
2019       return val;
2020     }
2021   else if (GET_CODE (x) == REG)
2022     {
2023       val.reg_flag = 1;
2024       val.start = true_regnum (x); 
2025       if (val.start < 0)
2026         {
2027           /* A pseudo with no hard reg.  */
2028           val.start = REGNO (x);
2029           val.end = val.start + 1;
2030         }
2031       else
2032         /* A hard reg.  */
2033         val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
2034     }
2035   else if (GET_CODE (x) == SUBREG)
2036     {
2037       if (GET_CODE (SUBREG_REG (x)) != REG)
2038         /* This could be more precise, but it's good enough.  */
2039         return decompose (SUBREG_REG (x));
2040       val.reg_flag = 1;
2041       val.start = true_regnum (x); 
2042       if (val.start < 0)
2043         return decompose (SUBREG_REG (x));
2044       else
2045         /* A hard reg.  */
2046         val.end = val.start + HARD_REGNO_NREGS (val.start, GET_MODE (x));
2047     }
2048   else if (CONSTANT_P (x)
2049            /* This hasn't been assigned yet, so it can't conflict yet.  */
2050            || GET_CODE (x) == SCRATCH)
2051     val.safe = 1;
2052   else
2053     abort ();
2054   return val;
2055 }
2056
2057 /* Return 1 if altering Y will not modify the value of X.
2058    Y is also described by YDATA, which should be decompose (Y).  */
2059
2060 static int
2061 immune_p (x, y, ydata)
2062      rtx x, y;
2063      struct decomposition ydata;
2064 {
2065   struct decomposition xdata;
2066
2067   if (ydata.reg_flag)
2068     return !refers_to_regno_for_reload_p (ydata.start, ydata.end, x, NULL_PTR);
2069   if (ydata.safe)
2070     return 1;
2071
2072   if (GET_CODE (y) != MEM)
2073     abort ();
2074   /* If Y is memory and X is not, Y can't affect X.  */
2075   if (GET_CODE (x) != MEM)
2076     return 1;
2077
2078   xdata =  decompose (x);
2079
2080   if (! rtx_equal_p (xdata.base, ydata.base))
2081     {
2082       /* If bases are distinct symbolic constants, there is no overlap.  */
2083       if (CONSTANT_P (xdata.base) && CONSTANT_P (ydata.base))
2084         return 1;
2085       /* Constants and stack slots never overlap.  */
2086       if (CONSTANT_P (xdata.base)
2087           && (ydata.base == frame_pointer_rtx
2088               || ydata.base == hard_frame_pointer_rtx
2089               || ydata.base == stack_pointer_rtx))
2090         return 1;
2091       if (CONSTANT_P (ydata.base)
2092           && (xdata.base == frame_pointer_rtx
2093               || xdata.base == hard_frame_pointer_rtx
2094               || xdata.base == stack_pointer_rtx))
2095         return 1;
2096       /* If either base is variable, we don't know anything.  */
2097       return 0;
2098     }
2099
2100
2101   return (xdata.start >= ydata.end || ydata.start >= xdata.end);
2102 }
2103
2104 /* Similar, but calls decompose.  */
2105
2106 int
2107 safe_from_earlyclobber (op, clobber)
2108      rtx op, clobber;
2109 {
2110   struct decomposition early_data;
2111
2112   early_data = decompose (clobber);
2113   return immune_p (op, clobber, early_data);
2114 }
2115 \f
2116 /* Main entry point of this file: search the body of INSN
2117    for values that need reloading and record them with push_reload.
2118    REPLACE nonzero means record also where the values occur
2119    so that subst_reloads can be used.
2120
2121    IND_LEVELS says how many levels of indirection are supported by this
2122    machine; a value of zero means that a memory reference is not a valid
2123    memory address.
2124
2125    LIVE_KNOWN says we have valid information about which hard
2126    regs are live at each point in the program; this is true when
2127    we are called from global_alloc but false when stupid register
2128    allocation has been done.
2129
2130    RELOAD_REG_P if nonzero is a vector indexed by hard reg number
2131    which is nonnegative if the reg has been commandeered for reloading into.
2132    It is copied into STATIC_RELOAD_REG_P and referenced from there
2133    by various subroutines.  */
2134
2135 void
2136 find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
2137      rtx insn;
2138      int replace, ind_levels;
2139      int live_known;
2140      short *reload_reg_p;
2141 {
2142 #ifdef REGISTER_CONSTRAINTS
2143
2144   register int insn_code_number;
2145   register int i, j;
2146   int noperands;
2147   /* These are the constraints for the insn.  We don't change them.  */
2148   char *constraints1[MAX_RECOG_OPERANDS];
2149   /* These start out as the constraints for the insn
2150      and they are chewed up as we consider alternatives.  */
2151   char *constraints[MAX_RECOG_OPERANDS];
2152   /* These are the preferred classes for an operand, or NO_REGS if it isn't
2153      a register.  */
2154   enum reg_class preferred_class[MAX_RECOG_OPERANDS];
2155   char pref_or_nothing[MAX_RECOG_OPERANDS];
2156   /* Nonzero for a MEM operand whose entire address needs a reload.  */
2157   int address_reloaded[MAX_RECOG_OPERANDS];
2158   /* Value of enum reload_type to use for operand.  */
2159   enum reload_type operand_type[MAX_RECOG_OPERANDS];
2160   /* Value of enum reload_type to use within address of operand.  */
2161   enum reload_type address_type[MAX_RECOG_OPERANDS];
2162   /* Save the usage of each operand.  */
2163   enum reload_usage { RELOAD_READ, RELOAD_READ_WRITE, RELOAD_WRITE } modified[MAX_RECOG_OPERANDS];
2164   int no_input_reloads = 0, no_output_reloads = 0;
2165   int n_alternatives;
2166   int this_alternative[MAX_RECOG_OPERANDS];
2167   char this_alternative_win[MAX_RECOG_OPERANDS];
2168   char this_alternative_offmemok[MAX_RECOG_OPERANDS];
2169   char this_alternative_earlyclobber[MAX_RECOG_OPERANDS];
2170   int this_alternative_matches[MAX_RECOG_OPERANDS];
2171   int swapped;
2172   int goal_alternative[MAX_RECOG_OPERANDS];
2173   int this_alternative_number;
2174   int goal_alternative_number;
2175   int operand_reloadnum[MAX_RECOG_OPERANDS];
2176   int goal_alternative_matches[MAX_RECOG_OPERANDS];
2177   int goal_alternative_matched[MAX_RECOG_OPERANDS];
2178   char goal_alternative_win[MAX_RECOG_OPERANDS];
2179   char goal_alternative_offmemok[MAX_RECOG_OPERANDS];
2180   char goal_alternative_earlyclobber[MAX_RECOG_OPERANDS];
2181   int goal_alternative_swapped;
2182   int best;
2183   int commutative;
2184   char operands_match[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
2185   rtx substed_operand[MAX_RECOG_OPERANDS];
2186   rtx body = PATTERN (insn);
2187   rtx set = single_set (insn);
2188   int goal_earlyclobber, this_earlyclobber;
2189   enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
2190
2191   this_insn = insn;
2192   this_insn_is_asm = 0;         /* Tentative.  */
2193   n_reloads = 0;
2194   n_replacements = 0;
2195   n_memlocs = 0;
2196   n_earlyclobbers = 0;
2197   replace_reloads = replace;
2198   hard_regs_live_known = live_known;
2199   static_reload_reg_p = reload_reg_p;
2200
2201   /* JUMP_INSNs and CALL_INSNs are not allowed to have any output reloads;
2202      neither are insns that SET cc0.  Insns that use CC0 are not allowed
2203      to have any input reloads.  */
2204   if (GET_CODE (insn) == JUMP_INSN || GET_CODE (insn) == CALL_INSN)
2205     no_output_reloads = 1;
2206
2207 #ifdef HAVE_cc0
2208   if (reg_referenced_p (cc0_rtx, PATTERN (insn)))
2209     no_input_reloads = 1;
2210   if (reg_set_p (cc0_rtx, PATTERN (insn)))
2211     no_output_reloads = 1;
2212 #endif
2213      
2214 #ifdef SECONDARY_MEMORY_NEEDED
2215   /* The eliminated forms of any secondary memory locations are per-insn, so
2216      clear them out here.  */
2217
2218   bzero ((char *) secondary_memlocs_elim, sizeof secondary_memlocs_elim);
2219 #endif
2220
2221   /* Find what kind of insn this is.  NOPERANDS gets number of operands.
2222      Make OPERANDS point to a vector of operand values.
2223      Make OPERAND_LOCS point to a vector of pointers to
2224      where the operands were found.
2225      Fill CONSTRAINTS and CONSTRAINTS1 with pointers to the
2226      constraint-strings for this insn.
2227      Return if the insn needs no reload processing.  */
2228
2229   switch (GET_CODE (body))
2230     {
2231     case USE:
2232     case CLOBBER:
2233     case ASM_INPUT:
2234     case ADDR_VEC:
2235     case ADDR_DIFF_VEC:
2236       return;
2237
2238     case SET:
2239       /* Dispose quickly of (set (reg..) (reg..)) if both have hard regs and it
2240          is cheap to move between them.  If it is not, there may not be an insn
2241          to do the copy, so we may need a reload.  */
2242       if (GET_CODE (SET_DEST (body)) == REG
2243           && REGNO (SET_DEST (body)) < FIRST_PSEUDO_REGISTER
2244           && GET_CODE (SET_SRC (body)) == REG
2245           && REGNO (SET_SRC (body)) < FIRST_PSEUDO_REGISTER
2246           && REGISTER_MOVE_COST (REGNO_REG_CLASS (REGNO (SET_SRC (body))),
2247                                  REGNO_REG_CLASS (REGNO (SET_DEST (body)))) == 2)
2248         return;
2249     case PARALLEL:
2250     case ASM_OPERANDS:
2251       reload_n_operands = noperands = asm_noperands (body);
2252       if (noperands >= 0)
2253         {
2254           /* This insn is an `asm' with operands.  */
2255
2256           insn_code_number = -1;
2257           this_insn_is_asm = 1;
2258
2259           /* expand_asm_operands makes sure there aren't too many operands.  */
2260           if (noperands > MAX_RECOG_OPERANDS)
2261             abort ();
2262
2263           /* Now get the operand values and constraints out of the insn.  */
2264
2265           decode_asm_operands (body, recog_operand, recog_operand_loc,
2266                                constraints, operand_mode);
2267           if (noperands > 0)
2268             {
2269               bcopy ((char *) constraints, (char *) constraints1,
2270                      noperands * sizeof (char *));
2271               n_alternatives = n_occurrences (',', constraints[0]) + 1;
2272               for (i = 1; i < noperands; i++)
2273                 if (n_alternatives != n_occurrences (',', constraints[i]) + 1)
2274                   {
2275                     error_for_asm (insn, "operand constraints differ in number of alternatives");
2276                     /* Avoid further trouble with this insn.  */
2277                     PATTERN (insn) = gen_rtx (USE, VOIDmode, const0_rtx);
2278                     n_reloads = 0;
2279                     return;
2280                   }
2281             }
2282           break;
2283         }
2284
2285     default:
2286       /* Ordinary insn: recognize it, get the operands via insn_extract
2287          and get the constraints.  */
2288
2289       insn_code_number = recog_memoized (insn);
2290       if (insn_code_number < 0)
2291         fatal_insn_not_found (insn);
2292
2293       reload_n_operands = noperands = insn_n_operands[insn_code_number];
2294       n_alternatives = insn_n_alternatives[insn_code_number];
2295       /* Just return "no reloads" if insn has no operands with constraints.  */
2296       if (n_alternatives == 0)
2297         return;
2298       insn_extract (insn);
2299       for (i = 0; i < noperands; i++)
2300         {
2301           constraints[i] = constraints1[i]
2302             = insn_operand_constraint[insn_code_number][i];
2303           operand_mode[i] = insn_operand_mode[insn_code_number][i];
2304         }
2305     }
2306
2307   if (noperands == 0)
2308     return;
2309
2310   commutative = -1;
2311
2312   /* If we will need to know, later, whether some pair of operands
2313      are the same, we must compare them now and save the result.
2314      Reloading the base and index registers will clobber them
2315      and afterward they will fail to match.  */
2316
2317   for (i = 0; i < noperands; i++)
2318     {
2319       register char *p;
2320       register int c;
2321
2322       substed_operand[i] = recog_operand[i];
2323       p = constraints[i];
2324
2325       modified[i] = RELOAD_READ;
2326
2327       /* Scan this operand's constraint to see if it is an output operand, 
2328          an in-out operand, is commutative, or should match another.  */
2329
2330       while (c = *p++)
2331         {
2332           if (c == '=')
2333             modified[i] = RELOAD_WRITE;
2334           else if (c == '+')
2335             modified[i] = RELOAD_READ_WRITE;
2336           else if (c == '%')
2337             {
2338               /* The last operand should not be marked commutative.  */
2339               if (i == noperands - 1)
2340                 {
2341                   if (this_insn_is_asm)
2342                     warning_for_asm (this_insn,
2343                                      "`%%' constraint used with last operand");
2344                   else
2345                     abort ();
2346                 }
2347               else
2348                 commutative = i;
2349             }
2350           else if (c >= '0' && c <= '9')
2351             {
2352               c -= '0';
2353               operands_match[c][i]
2354                 = operands_match_p (recog_operand[c], recog_operand[i]);
2355
2356               /* An operand may not match itself.  */
2357               if (c == i)
2358                 {
2359                   if (this_insn_is_asm)
2360                     warning_for_asm (this_insn,
2361                                      "operand %d has constraint %d", i, c);
2362                   else
2363                     abort ();
2364                 }
2365
2366               /* If C can be commuted with C+1, and C might need to match I,
2367                  then C+1 might also need to match I.  */
2368               if (commutative >= 0)
2369                 {
2370                   if (c == commutative || c == commutative + 1)
2371                     {
2372                       int other = c + (c == commutative ? 1 : -1);
2373                       operands_match[other][i]
2374                         = operands_match_p (recog_operand[other], recog_operand[i]);
2375                     }
2376                   if (i == commutative || i == commutative + 1)
2377                     {
2378                       int other = i + (i == commutative ? 1 : -1);
2379                       operands_match[c][other]
2380                         = operands_match_p (recog_operand[c], recog_operand[other]);
2381                     }
2382                   /* Note that C is supposed to be less than I.
2383                      No need to consider altering both C and I because in
2384                      that case we would alter one into the other.  */
2385                 }
2386             }
2387         }
2388     }
2389
2390   /* Examine each operand that is a memory reference or memory address
2391      and reload parts of the addresses into index registers.
2392      Also here any references to pseudo regs that didn't get hard regs
2393      but are equivalent to constants get replaced in the insn itself
2394      with those constants.  Nobody will ever see them again. 
2395
2396      Finally, set up the preferred classes of each operand.  */
2397
2398   for (i = 0; i < noperands; i++)
2399     {
2400       register RTX_CODE code = GET_CODE (recog_operand[i]);
2401
2402       address_reloaded[i] = 0;
2403       operand_type[i] = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT
2404                          : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT
2405                          : RELOAD_OTHER);
2406       address_type[i]
2407         = (modified[i] == RELOAD_READ ? RELOAD_FOR_INPUT_ADDRESS
2408            : modified[i] == RELOAD_WRITE ? RELOAD_FOR_OUTPUT_ADDRESS
2409            : RELOAD_OTHER);
2410
2411       if (*constraints[i] == 0)
2412         /* Ignore things like match_operator operands.  */
2413         ;
2414       else if (constraints[i][0] == 'p')
2415         {
2416           find_reloads_address (VOIDmode, NULL_PTR,
2417                                 recog_operand[i], recog_operand_loc[i],
2418                                 i, operand_type[i], ind_levels);
2419           substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
2420         }
2421       else if (code == MEM)
2422         {
2423           if (find_reloads_address (GET_MODE (recog_operand[i]),
2424                                     recog_operand_loc[i],
2425                                     XEXP (recog_operand[i], 0),
2426                                     &XEXP (recog_operand[i], 0),
2427                                     i, address_type[i], ind_levels))
2428             address_reloaded[i] = 1;
2429           substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
2430         }
2431       else if (code == SUBREG)
2432         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
2433           = find_reloads_toplev (recog_operand[i], i, address_type[i],
2434                                  ind_levels,
2435                                  set != 0
2436                                  && &SET_DEST (set) == recog_operand_loc[i]);
2437       else if (code == PLUS)
2438         /* We can get a PLUS as an "operand" as a result of
2439            register elimination.  See eliminate_regs and gen_reload.  */
2440         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
2441           = find_reloads_toplev (recog_operand[i], i, address_type[i],
2442                                  ind_levels, 0);
2443       else if (code == REG)
2444         {
2445           /* This is equivalent to calling find_reloads_toplev.
2446              The code is duplicated for speed.
2447              When we find a pseudo always equivalent to a constant,
2448              we replace it by the constant.  We must be sure, however,
2449              that we don't try to replace it in the insn in which it
2450              is being set.   */
2451           register int regno = REGNO (recog_operand[i]);
2452           if (reg_equiv_constant[regno] != 0
2453               && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
2454             substed_operand[i] = recog_operand[i]
2455               = reg_equiv_constant[regno];
2456 #if 0 /* This might screw code in reload1.c to delete prior output-reload
2457          that feeds this insn.  */
2458           if (reg_equiv_mem[regno] != 0)
2459             substed_operand[i] = recog_operand[i]
2460               = reg_equiv_mem[regno];
2461 #endif
2462           if (reg_equiv_address[regno] != 0)
2463             {
2464               /* If reg_equiv_address is not a constant address, copy it,
2465                  since it may be shared.  */
2466               rtx address = reg_equiv_address[regno];
2467
2468               if (rtx_varies_p (address))
2469                 address = copy_rtx (address);
2470
2471               /* If this is an output operand, we must output a CLOBBER
2472                  after INSN so find_equiv_reg knows REGNO is being written. 
2473                  Mark this insn specially, do we can put our output reloads
2474                  after it.  */
2475
2476               if (modified[i] != RELOAD_READ)
2477                 PUT_MODE (emit_insn_after (gen_rtx (CLOBBER, VOIDmode,
2478                                                     recog_operand[i]),
2479                                            insn),
2480                           DImode);
2481
2482               *recog_operand_loc[i] = recog_operand[i]
2483                 = gen_rtx (MEM, GET_MODE (recog_operand[i]), address);
2484               RTX_UNCHANGING_P (recog_operand[i])
2485                 = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
2486               find_reloads_address (GET_MODE (recog_operand[i]),
2487                                     recog_operand_loc[i],
2488                                     XEXP (recog_operand[i], 0),
2489                                     &XEXP (recog_operand[i], 0),
2490                                     i, address_type[i], ind_levels);
2491               substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
2492             }
2493         }
2494       /* If the operand is still a register (we didn't replace it with an
2495          equivalent), get the preferred class to reload it into.  */
2496       code = GET_CODE (recog_operand[i]);
2497       preferred_class[i]
2498         = ((code == REG && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER)
2499            ? reg_preferred_class (REGNO (recog_operand[i])) : NO_REGS);
2500       pref_or_nothing[i]
2501         = (code == REG && REGNO (recog_operand[i]) >= FIRST_PSEUDO_REGISTER
2502            && reg_alternate_class (REGNO (recog_operand[i])) == NO_REGS);
2503     }
2504
2505   /* If this is simply a copy from operand 1 to operand 0, merge the
2506      preferred classes for the operands.  */
2507   if (set != 0 && noperands >= 2 && recog_operand[0] == SET_DEST (set)
2508       && recog_operand[1] == SET_SRC (set))
2509     {
2510       preferred_class[0] = preferred_class[1]
2511         = reg_class_subunion[(int) preferred_class[0]][(int) preferred_class[1]];
2512       pref_or_nothing[0] |= pref_or_nothing[1];
2513       pref_or_nothing[1] |= pref_or_nothing[0];
2514     }
2515
2516   /* Now see what we need for pseudo-regs that didn't get hard regs
2517      or got the wrong kind of hard reg.  For this, we must consider
2518      all the operands together against the register constraints.  */
2519
2520   best = MAX_RECOG_OPERANDS + 300;
2521
2522   swapped = 0;
2523   goal_alternative_swapped = 0;
2524  try_swapped:
2525
2526   /* The constraints are made of several alternatives.
2527      Each operand's constraint looks like foo,bar,... with commas
2528      separating the alternatives.  The first alternatives for all
2529      operands go together, the second alternatives go together, etc.
2530
2531      First loop over alternatives.  */
2532
2533   for (this_alternative_number = 0;
2534        this_alternative_number < n_alternatives;
2535        this_alternative_number++)
2536     {
2537       /* Loop over operands for one constraint alternative.  */
2538       /* LOSERS counts those that don't fit this alternative
2539          and would require loading.  */
2540       int losers = 0;
2541       /* BAD is set to 1 if it some operand can't fit this alternative
2542          even after reloading.  */
2543       int bad = 0;
2544       /* REJECT is a count of how undesirable this alternative says it is
2545          if any reloading is required.  If the alternative matches exactly
2546          then REJECT is ignored, but otherwise it gets this much
2547          counted against it in addition to the reloading needed.  Each 
2548          ? counts three times here since we want the disparaging caused by
2549          a bad register class to only count 1/3 as much.  */
2550       int reject = 0;
2551
2552       this_earlyclobber = 0;
2553
2554       for (i = 0; i < noperands; i++)
2555         {
2556           register char *p = constraints[i];
2557           register int win = 0;
2558           /* 0 => this operand can be reloaded somehow for this alternative */
2559           int badop = 1;
2560           /* 0 => this operand can be reloaded if the alternative allows regs.  */
2561           int winreg = 0;
2562           int c;
2563           register rtx operand = recog_operand[i];
2564           int offset = 0;
2565           /* Nonzero means this is a MEM that must be reloaded into a reg
2566              regardless of what the constraint says.  */
2567           int force_reload = 0;
2568           int offmemok = 0;
2569           /* Nonzero if a constant forced into memory would be OK for this
2570              operand.  */
2571           int constmemok = 0;
2572           int earlyclobber = 0;
2573
2574           /* If the operand is a SUBREG, extract
2575              the REG or MEM (or maybe even a constant) within.
2576              (Constants can occur as a result of reg_equiv_constant.)  */
2577
2578           while (GET_CODE (operand) == SUBREG)
2579             {
2580               offset += SUBREG_WORD (operand);
2581               operand = SUBREG_REG (operand);
2582               /* Force reload if this is a constant or PLUS or if there may may
2583                  be a problem accessing OPERAND in the outer mode.  */
2584               if (CONSTANT_P (operand)
2585                   || GET_CODE (operand) == PLUS
2586                   /* We must force a reload of paradoxical SUBREGs
2587                      of a MEM because the alignment of the inner value
2588                      may not be enough to do the outer reference.  On
2589                      big-endian machines, it may also reference outside
2590                      the object.
2591
2592                      On machines that extend byte operations and we have a
2593                      SUBREG where both the inner and outer modes are no wider
2594                      than a word and the inner mode is narrower, is integral,
2595                      and gets extended when loaded from memory, combine.c has
2596                      made assumptions about the behavior of the machine in such
2597                      register access.  If the data is, in fact, in memory we
2598                      must always load using the size assumed to be in the
2599                      register and let the insn do the different-sized 
2600                      accesses.  */
2601                   || ((GET_CODE (operand) == MEM
2602                        || (GET_CODE (operand)== REG
2603                            && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
2604                       && (((GET_MODE_BITSIZE (GET_MODE (operand))
2605                             < BIGGEST_ALIGNMENT)
2606                            && (GET_MODE_SIZE (operand_mode[i])
2607                                > GET_MODE_SIZE (GET_MODE (operand))))
2608                           || (GET_CODE (operand) == MEM && BYTES_BIG_ENDIAN)
2609 #ifdef LOAD_EXTEND_OP
2610                           || (GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2611                               && (GET_MODE_SIZE (GET_MODE (operand))
2612                                   <= UNITS_PER_WORD)
2613                               && (GET_MODE_SIZE (operand_mode[i])
2614                                   > GET_MODE_SIZE (GET_MODE (operand)))
2615                               && INTEGRAL_MODE_P (GET_MODE (operand))
2616                               && LOAD_EXTEND_OP (GET_MODE (operand)) != NIL)
2617 #endif
2618                           ))
2619                   /* Subreg of a hard reg which can't handle the subreg's mode
2620                      or which would handle that mode in the wrong number of
2621                      registers for subregging to work.  */
2622                   || (GET_CODE (operand) == REG
2623                       && REGNO (operand) < FIRST_PSEUDO_REGISTER
2624                       && ((GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
2625                            && (GET_MODE_SIZE (GET_MODE (operand))
2626                                > UNITS_PER_WORD)
2627                            && ((GET_MODE_SIZE (GET_MODE (operand))
2628                                 / UNITS_PER_WORD)
2629                                != HARD_REGNO_NREGS (REGNO (operand),
2630                                                     GET_MODE (operand))))
2631                           || ! HARD_REGNO_MODE_OK (REGNO (operand) + offset,
2632                                                    operand_mode[i]))))
2633                 force_reload = 1;
2634             }
2635
2636           this_alternative[i] = (int) NO_REGS;
2637           this_alternative_win[i] = 0;
2638           this_alternative_offmemok[i] = 0;
2639           this_alternative_earlyclobber[i] = 0;
2640           this_alternative_matches[i] = -1;
2641
2642           /* An empty constraint or empty alternative
2643              allows anything which matched the pattern.  */
2644           if (*p == 0 || *p == ',')
2645             win = 1, badop = 0;
2646
2647           /* Scan this alternative's specs for this operand;
2648              set WIN if the operand fits any letter in this alternative.
2649              Otherwise, clear BADOP if this operand could
2650              fit some letter after reloads,
2651              or set WINREG if this operand could fit after reloads
2652              provided the constraint allows some registers.  */
2653
2654           while (*p && (c = *p++) != ',')
2655             switch (c)
2656               {
2657               case '=':
2658               case '+':
2659               case '*':
2660                 break;
2661
2662               case '%':
2663                 /* The last operand should not be marked commutative.  */
2664                 if (i != noperands - 1)
2665                   commutative = i;
2666                 break;
2667
2668               case '?':
2669                 reject += 3;
2670                 break;
2671
2672               case '!':
2673                 reject = 300;
2674                 break;
2675
2676               case '#':
2677                 /* Ignore rest of this alternative as far as
2678                    reloading is concerned.  */
2679                 while (*p && *p != ',') p++;
2680                 break;
2681
2682               case '0':
2683               case '1':
2684               case '2':
2685               case '3':
2686               case '4':
2687                 c -= '0';
2688                 this_alternative_matches[i] = c;
2689                 /* We are supposed to match a previous operand.
2690                    If we do, we win if that one did.
2691                    If we do not, count both of the operands as losers.
2692                    (This is too conservative, since most of the time
2693                    only a single reload insn will be needed to make
2694                    the two operands win.  As a result, this alternative
2695                    may be rejected when it is actually desirable.)  */
2696                 if ((swapped && (c != commutative || i != commutative + 1))
2697                     /* If we are matching as if two operands were swapped,
2698                        also pretend that operands_match had been computed
2699                        with swapped.
2700                        But if I is the second of those and C is the first,
2701                        don't exchange them, because operands_match is valid
2702                        only on one side of its diagonal.  */
2703                     ? (operands_match
2704                         [(c == commutative || c == commutative + 1)
2705                          ? 2*commutative + 1 - c : c]
2706                         [(i == commutative || i == commutative + 1)
2707                          ? 2*commutative + 1 - i : i])
2708                     : operands_match[c][i])
2709                   win = this_alternative_win[c];
2710                 else
2711                   {
2712                     /* Operands don't match.  */
2713                     rtx value;
2714                     /* Retroactively mark the operand we had to match
2715                        as a loser, if it wasn't already.  */
2716                     if (this_alternative_win[c])
2717                       losers++;
2718                     this_alternative_win[c] = 0;
2719                     if (this_alternative[c] == (int) NO_REGS)
2720                       bad = 1;
2721                     /* But count the pair only once in the total badness of
2722                        this alternative, if the pair can be a dummy reload.  */
2723                     value
2724                       = find_dummy_reload (recog_operand[i], recog_operand[c],
2725                                            recog_operand_loc[i], recog_operand_loc[c],
2726                                            operand_mode[i], operand_mode[c],
2727                                            this_alternative[c], -1);
2728
2729                     if (value != 0)
2730                       losers--;
2731                   }
2732                 /* This can be fixed with reloads if the operand
2733                    we are supposed to match can be fixed with reloads.  */
2734                 badop = 0;
2735                 this_alternative[i] = this_alternative[c];
2736
2737                 /* If we have to reload this operand and some previous
2738                    operand also had to match the same thing as this
2739                    operand, we don't know how to do that.  So reject this
2740                    alternative.  */
2741                 if (! win || force_reload)
2742                   for (j = 0; j < i; j++)
2743                     if (this_alternative_matches[j]
2744                         == this_alternative_matches[i])
2745                       badop = 1;
2746
2747                 break;
2748
2749               case 'p':
2750                 /* All necessary reloads for an address_operand
2751                    were handled in find_reloads_address.  */
2752                 this_alternative[i] = (int) BASE_REG_CLASS;
2753                 win = 1;
2754                 break;
2755
2756               case 'm':
2757                 if (force_reload)
2758                   break;
2759                 if (GET_CODE (operand) == MEM
2760                     || (GET_CODE (operand) == REG
2761                         && REGNO (operand) >= FIRST_PSEUDO_REGISTER
2762                         && reg_renumber[REGNO (operand)] < 0))
2763                   win = 1;
2764                 if (CONSTANT_P (operand))
2765                   badop = 0;
2766                 constmemok = 1;
2767                 break;
2768
2769               case '<':
2770                 if (GET_CODE (operand) == MEM
2771                     && ! address_reloaded[i]
2772                     && (GET_CODE (XEXP (operand, 0)) == PRE_DEC
2773                         || GET_CODE (XEXP (operand, 0)) == POST_DEC))
2774                   win = 1;
2775                 break;
2776
2777               case '>':
2778                 if (GET_CODE (operand) == MEM
2779                     && ! address_reloaded[i]
2780                     && (GET_CODE (XEXP (operand, 0)) == PRE_INC
2781                         || GET_CODE (XEXP (operand, 0)) == POST_INC))
2782                   win = 1;
2783                 break;
2784
2785                 /* Memory operand whose address is not offsettable.  */
2786               case 'V':
2787                 if (force_reload)
2788                   break;
2789                 if (GET_CODE (operand) == MEM
2790                     && ! (ind_levels ? offsettable_memref_p (operand)
2791                           : offsettable_nonstrict_memref_p (operand))
2792                     /* Certain mem addresses will become offsettable
2793                        after they themselves are reloaded.  This is important;
2794                        we don't want our own handling of unoffsettables
2795                        to override the handling of reg_equiv_address.  */
2796                     && !(GET_CODE (XEXP (operand, 0)) == REG
2797                          && (ind_levels == 0
2798                              || reg_equiv_address[REGNO (XEXP (operand, 0))] != 0)))
2799                   win = 1;
2800                 break;
2801
2802                 /* Memory operand whose address is offsettable.  */
2803               case 'o':
2804                 if (force_reload)
2805                   break;
2806                 if ((GET_CODE (operand) == MEM
2807                      /* If IND_LEVELS, find_reloads_address won't reload a
2808                         pseudo that didn't get a hard reg, so we have to
2809                         reject that case.  */
2810                      && (ind_levels ? offsettable_memref_p (operand)
2811                          : offsettable_nonstrict_memref_p (operand)))
2812                     /* A reloaded auto-increment address is offsettable,
2813                        because it is now just a simple register indirect.  */
2814                     || (GET_CODE (operand) == MEM
2815                         && address_reloaded[i]
2816                         && (GET_CODE (XEXP (operand, 0)) == PRE_INC
2817                             || GET_CODE (XEXP (operand, 0)) == PRE_DEC
2818                             || GET_CODE (XEXP (operand, 0)) == POST_INC
2819                             || GET_CODE (XEXP (operand, 0)) == POST_DEC))
2820                     /* Certain mem addresses will become offsettable
2821                        after they themselves are reloaded.  This is important;
2822                        we don't want our own handling of unoffsettables
2823                        to override the handling of reg_equiv_address.  */
2824                     || (GET_CODE (operand) == MEM
2825                         && GET_CODE (XEXP (operand, 0)) == REG
2826                         && (ind_levels == 0
2827                             || reg_equiv_address[REGNO (XEXP (operand, 0))] != 0))
2828                     || (GET_CODE (operand) == REG
2829                         && REGNO (operand) >= FIRST_PSEUDO_REGISTER
2830                         && reg_renumber[REGNO (operand)] < 0
2831                         /* If reg_equiv_address is nonzero, we will be
2832                            loading it into a register; hence it will be
2833                            offsettable, but we cannot say that reg_equiv_mem
2834                            is offsettable without checking.  */
2835                         && ((reg_equiv_mem[REGNO (operand)] != 0
2836                              && offsettable_memref_p (reg_equiv_mem[REGNO (operand)]))
2837                             || (reg_equiv_address[REGNO (operand)] != 0))))
2838                   win = 1;
2839                 if (CONSTANT_P (operand) || GET_CODE (operand) == MEM)
2840                   badop = 0;
2841                 constmemok = 1;
2842                 offmemok = 1;
2843                 break;
2844
2845               case '&':
2846                 /* Output operand that is stored before the need for the
2847                    input operands (and their index registers) is over.  */
2848                 earlyclobber = 1, this_earlyclobber = 1;
2849                 break;
2850
2851               case 'E':
2852                 /* Match any floating double constant, but only if
2853                    we can examine the bits of it reliably.  */
2854                 if ((HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
2855                      || HOST_BITS_PER_WIDE_INT != BITS_PER_WORD)
2856                     && GET_MODE (operand) != VOIDmode && ! flag_pretend_float)
2857                   break;
2858                 if (GET_CODE (operand) == CONST_DOUBLE)
2859                   win = 1;
2860                 break;
2861
2862               case 'F':
2863                 if (GET_CODE (operand) == CONST_DOUBLE)
2864                   win = 1;
2865                 break;
2866
2867               case 'G':
2868               case 'H':
2869                 if (GET_CODE (operand) == CONST_DOUBLE
2870                     && CONST_DOUBLE_OK_FOR_LETTER_P (operand, c))
2871                   win = 1;
2872                 break;
2873
2874               case 's':
2875                 if (GET_CODE (operand) == CONST_INT
2876                     || (GET_CODE (operand) == CONST_DOUBLE
2877                         && GET_MODE (operand) == VOIDmode))
2878                   break;
2879               case 'i':
2880                 if (CONSTANT_P (operand)
2881 #ifdef LEGITIMATE_PIC_OPERAND_P
2882                     && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand))
2883 #endif
2884                     )
2885                   win = 1;
2886                 break;
2887
2888               case 'n':
2889                 if (GET_CODE (operand) == CONST_INT
2890                     || (GET_CODE (operand) == CONST_DOUBLE
2891                         && GET_MODE (operand) == VOIDmode))
2892                   win = 1;
2893                 break;
2894
2895               case 'I':
2896               case 'J':
2897               case 'K':
2898               case 'L':
2899               case 'M':
2900               case 'N':
2901               case 'O':
2902               case 'P':
2903                 if (GET_CODE (operand) == CONST_INT
2904                     && CONST_OK_FOR_LETTER_P (INTVAL (operand), c))
2905                   win = 1;
2906                 break;
2907
2908               case 'X':
2909                 win = 1;
2910                 break;
2911
2912               case 'g':
2913                 if (! force_reload
2914                     /* A PLUS is never a valid operand, but reload can make
2915                        it from a register when eliminating registers.  */
2916                     && GET_CODE (operand) != PLUS
2917                     /* A SCRATCH is not a valid operand.  */
2918                     && GET_CODE (operand) != SCRATCH
2919 #ifdef LEGITIMATE_PIC_OPERAND_P
2920                     && (! CONSTANT_P (operand) 
2921                         || ! flag_pic 
2922                         || LEGITIMATE_PIC_OPERAND_P (operand))
2923 #endif
2924                     && (GENERAL_REGS == ALL_REGS
2925                         || GET_CODE (operand) != REG
2926                         || (REGNO (operand) >= FIRST_PSEUDO_REGISTER
2927                             && reg_renumber[REGNO (operand)] < 0)))
2928                   win = 1;
2929                 /* Drop through into 'r' case */
2930
2931               case 'r':
2932                 this_alternative[i]
2933                   = (int) reg_class_subunion[this_alternative[i]][(int) GENERAL_REGS];
2934                 goto reg;
2935
2936 #ifdef EXTRA_CONSTRAINT
2937               case 'Q':
2938               case 'R':
2939               case 'S':
2940               case 'T':
2941               case 'U':
2942                 if (EXTRA_CONSTRAINT (operand, c))
2943                   win = 1;
2944                 break;
2945 #endif
2946   
2947               default:
2948                 this_alternative[i]
2949                   = (int) reg_class_subunion[this_alternative[i]][(int) REG_CLASS_FROM_LETTER (c)];
2950                 
2951               reg:
2952                 if (GET_MODE (operand) == BLKmode)
2953                   break;
2954                 winreg = 1;
2955                 if (GET_CODE (operand) == REG
2956                     && reg_fits_class_p (operand, this_alternative[i],
2957                                          offset, GET_MODE (recog_operand[i])))
2958                   win = 1;
2959                 break;
2960               }
2961
2962           constraints[i] = p;
2963
2964           /* If this operand could be handled with a reg,
2965              and some reg is allowed, then this operand can be handled.  */
2966           if (winreg && this_alternative[i] != (int) NO_REGS)
2967             badop = 0;
2968
2969           /* Record which operands fit this alternative.  */
2970           this_alternative_earlyclobber[i] = earlyclobber;
2971           if (win && ! force_reload)
2972             this_alternative_win[i] = 1;
2973           else
2974             {
2975               int const_to_mem = 0;
2976
2977               this_alternative_offmemok[i] = offmemok;
2978               losers++;
2979               if (badop)
2980                 bad = 1;
2981               /* Alternative loses if it has no regs for a reg operand.  */
2982               if (GET_CODE (operand) == REG
2983                   && this_alternative[i] == (int) NO_REGS
2984                   && this_alternative_matches[i] < 0)
2985                 bad = 1;
2986
2987               /* Alternative loses if it requires a type of reload not
2988                  permitted for this insn.  We can always reload SCRATCH
2989                  and objects with a REG_UNUSED note.  */
2990               if (GET_CODE (operand) != SCRATCH
2991                   && modified[i] != RELOAD_READ && no_output_reloads
2992                   && ! find_reg_note (insn, REG_UNUSED, operand))
2993                 bad = 1;
2994               else if (modified[i] != RELOAD_WRITE && no_input_reloads)
2995                 bad = 1;
2996
2997               /* If this is a constant that is reloaded into the desired
2998                  class by copying it to memory first, count that as another
2999                  reload.  This is consistent with other code and is
3000                  required to avoid chosing another alternative when
3001                  the constant is moved into memory by this function on
3002                  an early reload pass.  Note that the test here is 
3003                  precisely the same as in the code below that calls
3004                  force_const_mem.  */
3005               if (CONSTANT_P (operand)
3006                   /* force_const_mem does not accept HIGH.  */
3007                   && GET_CODE (operand) != HIGH
3008                   && (PREFERRED_RELOAD_CLASS (operand,
3009                                               (enum reg_class) this_alternative[i])
3010                       == NO_REGS)
3011                   && operand_mode[i] != VOIDmode)
3012                 {
3013                   const_to_mem = 1;
3014                   if (this_alternative[i] != (int) NO_REGS)
3015                     losers++;
3016                 }
3017
3018               /* If we can't reload this value at all, reject this
3019                  alternative.  Note that we could also lose due to
3020                  LIMIT_RELOAD_RELOAD_CLASS, but we don't check that
3021                  here.  */
3022
3023               if (! CONSTANT_P (operand)
3024                   && (enum reg_class) this_alternative[i] != NO_REGS
3025                   && (PREFERRED_RELOAD_CLASS (operand,
3026                                               (enum reg_class) this_alternative[i])
3027                       == NO_REGS))
3028                 bad = 1;
3029
3030               /* We prefer to reload pseudos over reloading other things,
3031                  since such reloads may be able to be eliminated later.
3032                  If we are reloading a SCRATCH, we won't be generating any
3033                  insns, just using a register, so it is also preferred. 
3034                  So bump REJECT in other cases.  Don't do this in the
3035                  case where we are forcing a constant into memory and
3036                  it will then win since we don't want to have a different
3037                  alternative match then.  */
3038               if (! (GET_CODE (operand) == REG
3039                      && REGNO (operand) >= FIRST_PSEUDO_REGISTER)
3040                   && GET_CODE (operand) != SCRATCH
3041                   && ! (const_to_mem && constmemok))
3042                 reject++;
3043             }
3044
3045           /* If this operand is a pseudo register that didn't get a hard 
3046              reg and this alternative accepts some register, see if the
3047              class that we want is a subset of the preferred class for this
3048              register.  If not, but it intersects that class, use the
3049              preferred class instead.  If it does not intersect the preferred
3050              class, show that usage of this alternative should be discouraged;
3051              it will be discouraged more still if the register is `preferred
3052              or nothing'.  We do this because it increases the chance of
3053              reusing our spill register in a later insn and avoiding a pair
3054              of memory stores and loads.
3055
3056              Don't bother with this if this alternative will accept this
3057              operand.
3058
3059              Don't do this for a multiword operand, since it is only a
3060              small win and has the risk of requiring more spill registers,
3061              which could cause a large loss.
3062
3063              Don't do this if the preferred class has only one register
3064              because we might otherwise exhaust the class.  */
3065
3066
3067           if (! win && this_alternative[i] != (int) NO_REGS
3068               && GET_MODE_SIZE (operand_mode[i]) <= UNITS_PER_WORD
3069               && reg_class_size[(int) preferred_class[i]] > 1)
3070             {
3071               if (! reg_class_subset_p (this_alternative[i],
3072                                         preferred_class[i]))
3073                 {
3074                   /* Since we don't have a way of forming the intersection,
3075                      we just do something special if the preferred class
3076                      is a subset of the class we have; that's the most 
3077                      common case anyway.  */
3078                   if (reg_class_subset_p (preferred_class[i],
3079                                           this_alternative[i]))
3080                     this_alternative[i] = (int) preferred_class[i];
3081                   else
3082                     reject += (1 + pref_or_nothing[i]);
3083                 }
3084             }
3085         }
3086
3087       /* Now see if any output operands that are marked "earlyclobber"
3088          in this alternative conflict with any input operands
3089          or any memory addresses.  */
3090
3091       for (i = 0; i < noperands; i++)
3092         if (this_alternative_earlyclobber[i]
3093             && this_alternative_win[i])
3094           {
3095             struct decomposition early_data; 
3096
3097             early_data = decompose (recog_operand[i]);
3098
3099             if (modified[i] == RELOAD_READ)
3100               {
3101                 if (this_insn_is_asm)
3102                   warning_for_asm (this_insn,
3103                                    "`&' constraint used with input operand");
3104                 else
3105                   abort ();
3106                 continue;
3107               }
3108             
3109             if (this_alternative[i] == NO_REGS)
3110               {
3111                 this_alternative_earlyclobber[i] = 0;
3112                 if (this_insn_is_asm)
3113                   error_for_asm (this_insn,
3114                                  "`&' constraint used with no register class");
3115                 else
3116                   abort ();
3117               }
3118
3119             for (j = 0; j < noperands; j++)
3120               /* Is this an input operand or a memory ref?  */
3121               if ((GET_CODE (recog_operand[j]) == MEM
3122                    || modified[j] != RELOAD_WRITE)
3123                   && j != i
3124                   /* Ignore things like match_operator operands.  */
3125                   && *constraints1[j] != 0
3126                   /* Don't count an input operand that is constrained to match
3127                      the early clobber operand.  */
3128                   && ! (this_alternative_matches[j] == i
3129                         && rtx_equal_p (recog_operand[i], recog_operand[j]))
3130                   /* Is it altered by storing the earlyclobber operand?  */
3131                   && !immune_p (recog_operand[j], recog_operand[i], early_data))
3132                 {
3133                   /* If the output is in a single-reg class,
3134                      it's costly to reload it, so reload the input instead.  */
3135                   if (reg_class_size[this_alternative[i]] == 1
3136                       && (GET_CODE (recog_operand[j]) == REG
3137                           || GET_CODE (recog_operand[j]) == SUBREG))
3138                     {
3139                       losers++;
3140                       this_alternative_win[j] = 0;
3141                     }
3142                   else
3143                     break;
3144                 }
3145             /* If an earlyclobber operand conflicts with something,
3146                it must be reloaded, so request this and count the cost.  */
3147             if (j != noperands)
3148               {
3149                 losers++;
3150                 this_alternative_win[i] = 0;
3151                 for (j = 0; j < noperands; j++)
3152                   if (this_alternative_matches[j] == i
3153                       && this_alternative_win[j])
3154                     {
3155                       this_alternative_win[j] = 0;
3156                       losers++;
3157                     }
3158               }
3159           }
3160
3161       /* If one alternative accepts all the operands, no reload required,
3162          choose that alternative; don't consider the remaining ones.  */
3163       if (losers == 0)
3164         {
3165           /* Unswap these so that they are never swapped at `finish'.  */
3166           if (commutative >= 0)
3167             {
3168               recog_operand[commutative] = substed_operand[commutative];
3169               recog_operand[commutative + 1]
3170                 = substed_operand[commutative + 1];
3171             }
3172           for (i = 0; i < noperands; i++)
3173             {
3174               goal_alternative_win[i] = 1;
3175               goal_alternative[i] = this_alternative[i];
3176               goal_alternative_offmemok[i] = this_alternative_offmemok[i];
3177               goal_alternative_matches[i] = this_alternative_matches[i];
3178               goal_alternative_earlyclobber[i]
3179                 = this_alternative_earlyclobber[i];
3180             }
3181           goal_alternative_number = this_alternative_number;
3182           goal_alternative_swapped = swapped;
3183           goal_earlyclobber = this_earlyclobber;
3184           goto finish;
3185         }
3186
3187       /* REJECT, set by the ! and ? constraint characters and when a register
3188          would be reloaded into a non-preferred class, discourages the use of
3189          this alternative for a reload goal.  REJECT is incremented by three
3190          for each ? and one for each non-preferred class.  */
3191       losers = losers * 3 + reject;
3192
3193       /* If this alternative can be made to work by reloading,
3194          and it needs less reloading than the others checked so far,
3195          record it as the chosen goal for reloading.  */
3196       if (! bad && best > losers)
3197         {
3198           for (i = 0; i < noperands; i++)
3199             {
3200               goal_alternative[i] = this_alternative[i];
3201               goal_alternative_win[i] = this_alternative_win[i];
3202               goal_alternative_offmemok[i] = this_alternative_offmemok[i];
3203               goal_alternative_matches[i] = this_alternative_matches[i];
3204               goal_alternative_earlyclobber[i]
3205                 = this_alternative_earlyclobber[i];
3206             }
3207           goal_alternative_swapped = swapped;
3208           best = losers;
3209           goal_alternative_number = this_alternative_number;
3210           goal_earlyclobber = this_earlyclobber;
3211         }
3212     }
3213
3214   /* If insn is commutative (it's safe to exchange a certain pair of operands)
3215      then we need to try each alternative twice,
3216      the second time matching those two operands
3217      as if we had exchanged them.
3218      To do this, really exchange them in operands.
3219
3220      If we have just tried the alternatives the second time,
3221      return operands to normal and drop through.  */
3222
3223   if (commutative >= 0)
3224     {
3225       swapped = !swapped;
3226       if (swapped)
3227         {
3228           register enum reg_class tclass;
3229           register int t;
3230
3231           recog_operand[commutative] = substed_operand[commutative + 1];
3232           recog_operand[commutative + 1] = substed_operand[commutative];
3233
3234           tclass = preferred_class[commutative];
3235           preferred_class[commutative] = preferred_class[commutative + 1];
3236           preferred_class[commutative + 1] = tclass;
3237
3238           t = pref_or_nothing[commutative];
3239           pref_or_nothing[commutative] = pref_or_nothing[commutative + 1];
3240           pref_or_nothing[commutative + 1] = t;
3241
3242           bcopy ((char *) constraints1, (char *) constraints,
3243                  noperands * sizeof (char *));
3244           goto try_swapped;
3245         }
3246       else
3247         {
3248           recog_operand[commutative] = substed_operand[commutative];
3249           recog_operand[commutative + 1] = substed_operand[commutative + 1];
3250         }
3251     }
3252
3253   /* The operands don't meet the constraints.
3254      goal_alternative describes the alternative
3255      that we could reach by reloading the fewest operands.
3256      Reload so as to fit it.  */
3257
3258   if (best == MAX_RECOG_OPERANDS + 300)
3259     {
3260       /* No alternative works with reloads??  */
3261       if (insn_code_number >= 0)
3262         abort ();
3263       error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3264       /* Avoid further trouble with this insn.  */
3265       PATTERN (insn) = gen_rtx (USE, VOIDmode, const0_rtx);
3266       n_reloads = 0;
3267       return;
3268     }
3269
3270   /* Jump to `finish' from above if all operands are valid already.
3271      In that case, goal_alternative_win is all 1.  */
3272  finish:
3273
3274   /* Right now, for any pair of operands I and J that are required to match,
3275      with I < J,
3276      goal_alternative_matches[J] is I.
3277      Set up goal_alternative_matched as the inverse function:
3278      goal_alternative_matched[I] = J.  */
3279
3280   for (i = 0; i < noperands; i++)
3281     goal_alternative_matched[i] = -1;
3282
3283   for (i = 0; i < noperands; i++)
3284     if (! goal_alternative_win[i]
3285         && goal_alternative_matches[i] >= 0)
3286       goal_alternative_matched[goal_alternative_matches[i]] = i;
3287
3288   /* If the best alternative is with operands 1 and 2 swapped,
3289      consider them swapped before reporting the reloads.  Update the
3290      operand numbers of any reloads already pushed.  */
3291
3292   if (goal_alternative_swapped)
3293     {
3294       register rtx tem;
3295
3296       tem = substed_operand[commutative];
3297       substed_operand[commutative] = substed_operand[commutative + 1];
3298       substed_operand[commutative + 1] = tem;
3299       tem = recog_operand[commutative];
3300       recog_operand[commutative] = recog_operand[commutative + 1];
3301       recog_operand[commutative + 1] = tem;
3302
3303       for (i = 0; i < n_reloads; i++)
3304         {
3305           if (reload_opnum[i] == commutative)
3306             reload_opnum[i] = commutative + 1;
3307           else if (reload_opnum[i] == commutative + 1)
3308             reload_opnum[i] = commutative;
3309         }
3310     }
3311
3312   /* Perform whatever substitutions on the operands we are supposed
3313      to make due to commutativity or replacement of registers
3314      with equivalent constants or memory slots.  */
3315
3316   for (i = 0; i < noperands; i++)
3317     {
3318       *recog_operand_loc[i] = substed_operand[i];
3319       /* While we are looping on operands, initialize this.  */
3320       operand_reloadnum[i] = -1;
3321
3322       /* If this is an earlyclobber operand, we need to widen the scope.
3323          The reload must remain valid from the start of the insn being
3324          reloaded until after the operand is stored into its destination.
3325          We approximate this with RELOAD_OTHER even though we know that we
3326          do not conflict with RELOAD_FOR_INPUT_ADDRESS reloads.
3327
3328          One special case that is worth checking is when we have an
3329          output that is earlyclobber but isn't used past the insn (typically
3330          a SCRATCH).  In this case, we only need have the reload live 
3331          through the insn itself, but not for any of our input or output
3332          reloads. 
3333
3334          In any case, anything needed to address this operand can remain
3335          however they were previously categorized.  */
3336
3337       if (goal_alternative_earlyclobber[i])
3338         operand_type[i]
3339           = (find_reg_note (insn, REG_UNUSED, recog_operand[i])
3340              ? RELOAD_FOR_INSN : RELOAD_OTHER);
3341     }
3342
3343   /* Any constants that aren't allowed and can't be reloaded
3344      into registers are here changed into memory references.  */
3345   for (i = 0; i < noperands; i++)
3346     if (! goal_alternative_win[i]
3347         && CONSTANT_P (recog_operand[i])
3348         /* force_const_mem does not accept HIGH.  */
3349         && GET_CODE (recog_operand[i]) != HIGH
3350         && (PREFERRED_RELOAD_CLASS (recog_operand[i],
3351                                     (enum reg_class) goal_alternative[i])
3352             == NO_REGS)
3353         && operand_mode[i] != VOIDmode)
3354       {
3355         *recog_operand_loc[i] = recog_operand[i]
3356           = find_reloads_toplev (force_const_mem (operand_mode[i],
3357                                                   recog_operand[i]),
3358                                  i, address_type[i], ind_levels, 0);
3359         if (alternative_allows_memconst (constraints1[i],
3360                                          goal_alternative_number))
3361           goal_alternative_win[i] = 1;
3362       }
3363
3364   /* Record the values of the earlyclobber operands for the caller.  */
3365   if (goal_earlyclobber)
3366     for (i = 0; i < noperands; i++)
3367       if (goal_alternative_earlyclobber[i])
3368         reload_earlyclobbers[n_earlyclobbers++] = recog_operand[i];
3369
3370   /* Now record reloads for all the operands that need them.  */
3371   for (i = 0; i < noperands; i++)
3372     if (! goal_alternative_win[i])
3373       {
3374         /* Operands that match previous ones have already been handled.  */
3375         if (goal_alternative_matches[i] >= 0)
3376           ;
3377         /* Handle an operand with a nonoffsettable address
3378            appearing where an offsettable address will do
3379            by reloading the address into a base register.
3380
3381            ??? We can also do this when the operand is a register and
3382            reg_equiv_mem is not offsettable, but this is a bit tricky,
3383            so we don't bother with it.  It may not be worth doing.  */
3384         else if (goal_alternative_matched[i] == -1
3385                  && goal_alternative_offmemok[i]
3386                  && GET_CODE (recog_operand[i]) == MEM)
3387           {
3388             operand_reloadnum[i]
3389               = push_reload (XEXP (recog_operand[i], 0), NULL_RTX,
3390                              &XEXP (recog_operand[i], 0), NULL_PTR,
3391                              BASE_REG_CLASS, GET_MODE (XEXP (recog_operand[i], 0)),
3392                              VOIDmode, 0, 0, i, RELOAD_FOR_INPUT);
3393             reload_inc[operand_reloadnum[i]]
3394               = GET_MODE_SIZE (GET_MODE (recog_operand[i]));
3395
3396             /* If this operand is an output, we will have made any
3397                reloads for its address as RELOAD_FOR_OUTPUT_ADDRESS, but
3398                now we are treating part of the operand as an input, so
3399                we must change these to RELOAD_FOR_INPUT_ADDRESS.  */
3400
3401             if (modified[i] == RELOAD_WRITE)
3402               for (j = 0; j < n_reloads; j++)
3403                 if (reload_opnum[j] == i
3404                     && reload_when_needed[j] == RELOAD_FOR_OUTPUT_ADDRESS)
3405                   reload_when_needed[j] = RELOAD_FOR_INPUT_ADDRESS;
3406           }
3407         else if (goal_alternative_matched[i] == -1)
3408           operand_reloadnum[i] =
3409             push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0,
3410                          modified[i] != RELOAD_READ ? recog_operand[i] : 0,
3411                          (modified[i] != RELOAD_WRITE ?
3412                           recog_operand_loc[i] : 0),
3413                          modified[i] != RELOAD_READ ? recog_operand_loc[i] : 0,
3414                          (enum reg_class) goal_alternative[i],
3415                          (modified[i] == RELOAD_WRITE
3416                           ? VOIDmode : operand_mode[i]),
3417                          (modified[i] == RELOAD_READ
3418                           ? VOIDmode : operand_mode[i]),
3419                          (insn_code_number < 0 ? 0
3420                           : insn_operand_strict_low[insn_code_number][i]),
3421                          0, i, operand_type[i]);
3422         /* In a matching pair of operands, one must be input only
3423            and the other must be output only.
3424            Pass the input operand as IN and the other as OUT.  */
3425         else if (modified[i] == RELOAD_READ
3426                  && modified[goal_alternative_matched[i]] == RELOAD_WRITE)
3427           {
3428             operand_reloadnum[i]
3429               = push_reload (recog_operand[i],
3430                              recog_operand[goal_alternative_matched[i]],
3431                              recog_operand_loc[i],
3432                              recog_operand_loc[goal_alternative_matched[i]],
3433                              (enum reg_class) goal_alternative[i],
3434                              operand_mode[i],
3435                              operand_mode[goal_alternative_matched[i]],
3436                              0, 0, i, RELOAD_OTHER);
3437             operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum;
3438           }
3439         else if (modified[i] == RELOAD_WRITE
3440                  && modified[goal_alternative_matched[i]] == RELOAD_READ)
3441           {
3442             operand_reloadnum[goal_alternative_matched[i]]
3443               = push_reload (recog_operand[goal_alternative_matched[i]],
3444                              recog_operand[i],
3445                              recog_operand_loc[goal_alternative_matched[i]],
3446                              recog_operand_loc[i],
3447                              (enum reg_class) goal_alternative[i],
3448                              operand_mode[goal_alternative_matched[i]],
3449                              operand_mode[i],
3450                              0, 0, i, RELOAD_OTHER);
3451             operand_reloadnum[i] = output_reloadnum;
3452           }
3453         else if (insn_code_number >= 0)
3454           abort ();
3455         else
3456           {
3457             error_for_asm (insn, "inconsistent operand constraints in an `asm'");
3458             /* Avoid further trouble with this insn.  */
3459             PATTERN (insn) = gen_rtx (USE, VOIDmode, const0_rtx);
3460             n_reloads = 0;
3461             return;
3462           }
3463       }
3464     else if (goal_alternative_matched[i] < 0
3465              && goal_alternative_matches[i] < 0
3466              && optimize)
3467       {
3468         /* For each non-matching operand that's a MEM or a pseudo-register 
3469            that didn't get a hard register, make an optional reload.
3470            This may get done even if the insn needs no reloads otherwise.  */
3471
3472         rtx operand = recog_operand[i];
3473
3474         while (GET_CODE (operand) == SUBREG)
3475           operand = XEXP (operand, 0);
3476         if ((GET_CODE (operand) == MEM
3477              || (GET_CODE (operand) == REG
3478                  && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
3479             && (enum reg_class) goal_alternative[i] != NO_REGS
3480             && ! no_input_reloads
3481             /* Optional output reloads don't do anything and we mustn't
3482                make in-out reloads on insns that are not permitted output
3483                reloads.  */
3484             && (modified[i] == RELOAD_READ
3485                 || (modified[i] == RELOAD_READ_WRITE && ! no_output_reloads)))
3486           operand_reloadnum[i]
3487             = push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0,
3488                            modified[i] != RELOAD_READ ? recog_operand[i] : 0,
3489                            (modified[i] != RELOAD_WRITE
3490                             ? recog_operand_loc[i] : 0),
3491                            (modified[i] != RELOAD_READ
3492                             ? recog_operand_loc[i] : 0),
3493                            (enum reg_class) goal_alternative[i],
3494                            (modified[i] == RELOAD_WRITE
3495                             ? VOIDmode : operand_mode[i]),
3496                            (modified[i] == RELOAD_READ
3497                             ? VOIDmode : operand_mode[i]),
3498                            (insn_code_number < 0 ? 0
3499                             : insn_operand_strict_low[insn_code_number][i]),
3500                            1, i, operand_type[i]);
3501       }
3502     else if (goal_alternative_matches[i] >= 0
3503              && goal_alternative_win[goal_alternative_matches[i]]
3504              && modified[i] == RELOAD_READ
3505              && modified[goal_alternative_matches[i]] == RELOAD_WRITE
3506              && ! no_input_reloads && ! no_output_reloads
3507              && optimize)
3508       {
3509         /* Similarly, make an optional reload for a pair of matching
3510            objects that are in MEM or a pseudo that didn't get a hard reg.  */
3511
3512         rtx operand = recog_operand[i];
3513
3514         while (GET_CODE (operand) == SUBREG)
3515           operand = XEXP (operand, 0);
3516         if ((GET_CODE (operand) == MEM
3517              || (GET_CODE (operand) == REG
3518                  && REGNO (operand) >= FIRST_PSEUDO_REGISTER))
3519             && ((enum reg_class) goal_alternative[goal_alternative_matches[i]]
3520                 != NO_REGS))
3521           operand_reloadnum[i] = operand_reloadnum[goal_alternative_matches[i]]
3522             = push_reload (recog_operand[goal_alternative_matches[i]],
3523                            recog_operand[i],
3524                            recog_operand_loc[goal_alternative_matches[i]],
3525                            recog_operand_loc[i],
3526                            (enum reg_class) goal_alternative[goal_alternative_matches[i]],
3527                            operand_mode[goal_alternative_matches[i]],
3528                            operand_mode[i],
3529                            0, 1, goal_alternative_matches[i], RELOAD_OTHER);
3530       }
3531   
3532   /* If this insn pattern contains any MATCH_DUP's, make sure that
3533      they will be substituted if the operands they match are substituted.
3534      Also do now any substitutions we already did on the operands.
3535
3536      Don't do this if we aren't making replacements because we might be
3537      propagating things allocated by frame pointer elimination into places
3538      it doesn't expect.  */
3539
3540   if (insn_code_number >= 0 && replace)
3541     for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
3542       {
3543         int opno = recog_dup_num[i];
3544         *recog_dup_loc[i] = *recog_operand_loc[opno];
3545         if (operand_reloadnum[opno] >= 0)
3546           push_replacement (recog_dup_loc[i], operand_reloadnum[opno],
3547                             insn_operand_mode[insn_code_number][opno]);
3548       }
3549
3550 #if 0
3551   /* This loses because reloading of prior insns can invalidate the equivalence
3552      (or at least find_equiv_reg isn't smart enough to find it any more),
3553      causing this insn to need more reload regs than it needed before.
3554      It may be too late to make the reload regs available.
3555      Now this optimization is done safely in choose_reload_regs.  */
3556
3557   /* For each reload of a reg into some other class of reg,
3558      search for an existing equivalent reg (same value now) in the right class.
3559      We can use it as long as we don't need to change its contents.  */
3560   for (i = 0; i < n_reloads; i++)
3561     if (reload_reg_rtx[i] == 0
3562         && reload_in[i] != 0
3563         && GET_CODE (reload_in[i]) == REG
3564         && reload_out[i] == 0)
3565       {
3566         reload_reg_rtx[i]
3567           = find_equiv_reg (reload_in[i], insn, reload_reg_class[i], -1,
3568                             static_reload_reg_p, 0, reload_inmode[i]);
3569         /* Prevent generation of insn to load the value
3570            because the one we found already has the value.  */
3571         if (reload_reg_rtx[i])
3572           reload_in[i] = reload_reg_rtx[i];
3573       }
3574 #endif
3575
3576   /* Perhaps an output reload can be combined with another
3577      to reduce needs by one.  */
3578   if (!goal_earlyclobber)
3579     combine_reloads ();
3580
3581   /* If we have a pair of reloads for parts of an address, they are reloading
3582      the same object, the operands themselves were not reloaded, and they
3583      are for two operands that are supposed to match, merge the reloads and
3584      change the type of the surviving reload to RELOAD_FOR_OPERAND_ADDRESS. */
3585
3586   for (i = 0; i < n_reloads; i++)
3587     {
3588       int k;
3589
3590       for (j = i + 1; j < n_reloads; j++)
3591         if ((reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
3592              || reload_when_needed[i] == RELOAD_FOR_OUTPUT_ADDRESS)
3593             && (reload_when_needed[j] == RELOAD_FOR_INPUT_ADDRESS
3594                 || reload_when_needed[j] == RELOAD_FOR_OUTPUT_ADDRESS)
3595             && rtx_equal_p (reload_in[i], reload_in[j])
3596             && (operand_reloadnum[reload_opnum[i]] < 0
3597                 || reload_optional[operand_reloadnum[reload_opnum[i]]])
3598             && (operand_reloadnum[reload_opnum[j]] < 0
3599                 || reload_optional[operand_reloadnum[reload_opnum[j]]])
3600             && (goal_alternative_matches[reload_opnum[i]] == reload_opnum[j]
3601                 || (goal_alternative_matches[reload_opnum[j]]
3602                     == reload_opnum[i])))
3603           {
3604             for (k = 0; k < n_replacements; k++)
3605               if (replacements[k].what == j)
3606                 replacements[k].what = i;
3607
3608             reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS;
3609             reload_in[j] = 0;
3610           }
3611     }
3612
3613   /* Scan all the reloads and update their type. 
3614      If a reload is for the address of an operand and we didn't reload
3615      that operand, change the type.  Similarly, change the operand number
3616      of a reload when two operands match.  If a reload is optional, treat it
3617      as though the operand isn't reloaded.
3618
3619      ??? This latter case is somewhat odd because if we do the optional
3620      reload, it means the object is hanging around.  Thus we need only
3621      do the address reload if the optional reload was NOT done.
3622
3623      Change secondary reloads to be the address type of their operand, not
3624      the normal type.
3625
3626      If an operand's reload is now RELOAD_OTHER, change any
3627      RELOAD_FOR_INPUT_ADDRESS reloads of that operand to
3628      RELOAD_FOR_OTHER_ADDRESS.  */
3629
3630   for (i = 0; i < n_reloads; i++)
3631     {
3632       if (reload_secondary_p[i]
3633           && reload_when_needed[i] == operand_type[reload_opnum[i]])
3634         reload_when_needed[i] = address_type[reload_opnum[i]];
3635
3636       if ((reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
3637            || reload_when_needed[i] == RELOAD_FOR_OUTPUT_ADDRESS)
3638           && (operand_reloadnum[reload_opnum[i]] < 0
3639               || reload_optional[operand_reloadnum[reload_opnum[i]]]))
3640         {
3641           /* If we have a secondary reload to go along with this reload,
3642              change its type to RELOAD_FOR_OPADDR_ADDR. */
3643
3644           if (reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
3645               && reload_secondary_in_reload[i] != -1)
3646             {
3647               int secondary_in_reload = reload_secondary_in_reload[i];
3648
3649               reload_when_needed[secondary_in_reload] = 
3650                 RELOAD_FOR_OPADDR_ADDR;
3651
3652               /* If there's a tertiary reload we have to change it also. */
3653               if (secondary_in_reload > 0
3654                   && reload_secondary_in_reload[secondary_in_reload] != -1)
3655                 reload_when_needed[reload_secondary_in_reload[secondary_in_reload]] 
3656                   = RELOAD_FOR_OPADDR_ADDR;
3657             }
3658
3659           if (reload_when_needed[i] == RELOAD_FOR_OUTPUT_ADDRESS
3660               && reload_secondary_out_reload[i] != -1)
3661             {
3662               int secondary_out_reload = reload_secondary_out_reload[i];
3663
3664               reload_when_needed[secondary_out_reload] = 
3665                 RELOAD_FOR_OPADDR_ADDR;
3666
3667               /* If there's a tertiary reload we have to change it also. */
3668               if (secondary_out_reload
3669                   && reload_secondary_out_reload[secondary_out_reload] != -1)
3670                 reload_when_needed[reload_secondary_out_reload[secondary_out_reload]] 
3671                   = RELOAD_FOR_OPADDR_ADDR;
3672             }
3673           reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS;
3674         }
3675
3676       if (reload_when_needed[i] == RELOAD_FOR_INPUT_ADDRESS
3677           && operand_reloadnum[reload_opnum[i]] >= 0
3678           && (reload_when_needed[operand_reloadnum[reload_opnum[i]]] 
3679               == RELOAD_OTHER))
3680         reload_when_needed[i] = RELOAD_FOR_OTHER_ADDRESS;
3681
3682       if (goal_alternative_matches[reload_opnum[i]] >= 0)
3683         reload_opnum[i] = goal_alternative_matches[reload_opnum[i]];
3684     }
3685
3686   /* See if we have any reloads that are now allowed to be merged
3687      because we've changed when the reload is needed to
3688      RELOAD_FOR_OPERAND_ADDRESS or RELOAD_FOR_OTHER_ADDRESS.  Only
3689      check for the most common cases.  */
3690
3691   for (i = 0; i < n_reloads; i++)
3692     if (reload_in[i] != 0 && reload_out[i] == 0
3693         && (reload_when_needed[i] == RELOAD_FOR_OPERAND_ADDRESS
3694             || reload_when_needed[i] == RELOAD_FOR_OTHER_ADDRESS))
3695       for (j = 0; j < n_reloads; j++)
3696         if (i != j && reload_in[j] != 0 && reload_out[j] == 0
3697             && reload_when_needed[j] == reload_when_needed[i]
3698             && MATCHES (reload_in[i], reload_in[j])
3699             && reload_reg_class[i] == reload_reg_class[j]
3700             && !reload_nocombine[i] && !reload_nocombine[j]
3701             && reload_reg_rtx[i] == reload_reg_rtx[j])
3702           {
3703             reload_opnum[i] = MIN (reload_opnum[i], reload_opnum[j]);
3704             transfer_replacements (i, j);
3705             reload_in[j] = 0;
3706           }
3707
3708 #else /* no REGISTER_CONSTRAINTS */
3709   int noperands;
3710   int insn_code_number;
3711   int goal_earlyclobber = 0; /* Always 0, to make combine_reloads happen.  */
3712   register int i;
3713   rtx body = PATTERN (insn);
3714
3715   n_reloads = 0;
3716   n_replacements = 0;
3717   n_earlyclobbers = 0;
3718   replace_reloads = replace;
3719   this_insn = insn;
3720
3721   /* Find what kind of insn this is.  NOPERANDS gets number of operands.
3722      Store the operand values in RECOG_OPERAND and the locations
3723      of the words in the insn that point to them in RECOG_OPERAND_LOC.
3724      Return if the insn needs no reload processing.  */
3725
3726   switch (GET_CODE (body))
3727     {
3728     case USE:
3729     case CLOBBER:
3730     case ASM_INPUT:
3731     case ADDR_VEC:
3732     case ADDR_DIFF_VEC:
3733       return;
3734
3735     case PARALLEL:
3736     case SET:
3737       noperands = asm_noperands (body);
3738       if (noperands >= 0)
3739         {
3740           /* This insn is an `asm' with operands.
3741              First, find out how many operands, and allocate space.  */
3742
3743           insn_code_number = -1;
3744           /* ??? This is a bug! ???
3745              Give up and delete this insn if it has too many operands.  */
3746           if (noperands > MAX_RECOG_OPERANDS)
3747             abort ();
3748
3749           /* Now get the operand values out of the insn.  */
3750
3751           decode_asm_operands (body, recog_operand, recog_operand_loc,
3752                                NULL_PTR, NULL_PTR);
3753           break;
3754         }
3755
3756     default:
3757       /* Ordinary insn: recognize it, allocate space for operands and
3758          constraints, and get them out via insn_extract.  */
3759
3760       insn_code_number = recog_memoized (insn);
3761       noperands = insn_n_operands[insn_code_number];
3762       insn_extract (insn);
3763     }
3764
3765   if (noperands == 0)
3766     return;
3767
3768   for (i = 0; i < noperands; i++)
3769     {
3770       register RTX_CODE code = GET_CODE (recog_operand[i]);
3771       int is_set_dest = GET_CODE (body) == SET && (i == 0);
3772
3773       if (insn_code_number >= 0)
3774         if (insn_operand_address_p[insn_code_number][i])
3775           find_reloads_address (VOIDmode, NULL_PTR,
3776                                 recog_operand[i], recog_operand_loc[i],
3777                                 i, RELOAD_FOR_INPUT, ind_levels);
3778
3779       /* In these cases, we can't tell if the operand is an input
3780          or an output, so be conservative.  In practice it won't be
3781          problem.  */
3782
3783       if (code == MEM)
3784         find_reloads_address (GET_MODE (recog_operand[i]),
3785                               recog_operand_loc[i],
3786                               XEXP (recog_operand[i], 0),
3787                               &XEXP (recog_operand[i], 0),
3788                               i, RELOAD_OTHER, ind_levels);
3789       if (code == SUBREG)
3790         recog_operand[i] = *recog_operand_loc[i]
3791           = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
3792                                  ind_levels, is_set_dest);
3793       if (code == REG)
3794         {
3795           register int regno = REGNO (recog_operand[i]);
3796           if (reg_equiv_constant[regno] != 0 && !is_set_dest)
3797             recog_operand[i] = *recog_operand_loc[i]
3798               = reg_equiv_constant[regno];
3799 #if 0 /* This might screw code in reload1.c to delete prior output-reload
3800          that feeds this insn.  */
3801           if (reg_equiv_mem[regno] != 0)
3802             recog_operand[i] = *recog_operand_loc[i]
3803               = reg_equiv_mem[regno];
3804 #endif
3805         }
3806     }
3807
3808   /* Perhaps an output reload can be combined with another
3809      to reduce needs by one.  */
3810   if (!goal_earlyclobber)
3811     combine_reloads ();
3812 #endif /* no REGISTER_CONSTRAINTS */
3813 }
3814
3815 /* Return 1 if alternative number ALTNUM in constraint-string CONSTRAINT
3816    accepts a memory operand with constant address.  */
3817
3818 static int
3819 alternative_allows_memconst (constraint, altnum)
3820      char *constraint;
3821      int altnum;
3822 {
3823   register int c;
3824   /* Skip alternatives before the one requested.  */
3825   while (altnum > 0)
3826     {
3827       while (*constraint++ != ',');
3828       altnum--;
3829     }
3830   /* Scan the requested alternative for 'm' or 'o'.
3831      If one of them is present, this alternative accepts memory constants.  */
3832   while ((c = *constraint++) && c != ',' && c != '#')
3833     if (c == 'm' || c == 'o')
3834       return 1;
3835   return 0;
3836 }
3837 \f
3838 /* Scan X for memory references and scan the addresses for reloading.
3839    Also checks for references to "constant" regs that we want to eliminate
3840    and replaces them with the values they stand for.
3841    We may alter X destructively if it contains a reference to such.
3842    If X is just a constant reg, we return the equivalent value
3843    instead of X.
3844
3845    IND_LEVELS says how many levels of indirect addressing this machine
3846    supports.
3847
3848    OPNUM and TYPE identify the purpose of the reload.
3849
3850    IS_SET_DEST is true if X is the destination of a SET, which is not
3851    appropriate to be replaced by a constant.  */
3852
3853 static rtx
3854 find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest)
3855      rtx x;
3856      int opnum;
3857      enum reload_type type;
3858      int ind_levels;
3859      int is_set_dest;
3860 {
3861   register RTX_CODE code = GET_CODE (x);
3862
3863   register char *fmt = GET_RTX_FORMAT (code);
3864   register int i;
3865
3866   if (code == REG)
3867     {
3868       /* This code is duplicated for speed in find_reloads.  */
3869       register int regno = REGNO (x);
3870       if (reg_equiv_constant[regno] != 0 && !is_set_dest)
3871         x = reg_equiv_constant[regno];
3872 #if 0
3873 /*  This creates (subreg (mem...)) which would cause an unnecessary
3874     reload of the mem.  */
3875       else if (reg_equiv_mem[regno] != 0)
3876         x = reg_equiv_mem[regno];
3877 #endif
3878       else if (reg_equiv_address[regno] != 0)
3879         {
3880           /* If reg_equiv_address varies, it may be shared, so copy it.  */
3881           rtx addr = reg_equiv_address[regno];
3882
3883           if (rtx_varies_p (addr))
3884             addr = copy_rtx (addr);
3885
3886           x = gen_rtx (MEM, GET_MODE (x), addr);
3887           RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
3888           find_reloads_address (GET_MODE (x), NULL_PTR,
3889                                 XEXP (x, 0),
3890                                 &XEXP (x, 0), opnum, type, ind_levels);
3891         }
3892       return x;
3893     }
3894   if (code == MEM)
3895     {
3896       rtx tem = x;
3897       find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
3898                             opnum, type, ind_levels);
3899       return tem;
3900     }
3901
3902   if (code == SUBREG && GET_CODE (SUBREG_REG (x)) == REG)
3903     {
3904       /* Check for SUBREG containing a REG that's equivalent to a constant. 
3905          If the constant has a known value, truncate it right now.
3906          Similarly if we are extracting a single-word of a multi-word
3907          constant.  If the constant is symbolic, allow it to be substituted
3908          normally.  push_reload will strip the subreg later.  If the
3909          constant is VOIDmode, abort because we will lose the mode of
3910          the register (this should never happen because one of the cases
3911          above should handle it).  */
3912
3913       register int regno = REGNO (SUBREG_REG (x));
3914       rtx tem;
3915
3916       if (subreg_lowpart_p (x)
3917           && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
3918           && reg_equiv_constant[regno] != 0
3919           && (tem = gen_lowpart_common (GET_MODE (x),
3920                                         reg_equiv_constant[regno])) != 0)
3921         return tem;
3922
3923       if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
3924           && regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
3925           && reg_equiv_constant[regno] != 0
3926           && (tem = operand_subword (reg_equiv_constant[regno],
3927                                      SUBREG_WORD (x), 0,
3928                                      GET_MODE (SUBREG_REG (x)))) != 0)
3929         return tem;
3930
3931       if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
3932           && reg_equiv_constant[regno] != 0
3933           && GET_MODE (reg_equiv_constant[regno]) == VOIDmode)
3934         abort ();
3935
3936       /* If the subreg contains a reg that will be converted to a mem,
3937          convert the subreg to a narrower memref now.
3938          Otherwise, we would get (subreg (mem ...) ...),
3939          which would force reload of the mem.
3940
3941          We also need to do this if there is an equivalent MEM that is
3942          not offsettable.  In that case, alter_subreg would produce an
3943          invalid address on big-endian machines.
3944
3945          For machines that extend byte loads, we must not reload using
3946          a wider mode if we have a paradoxical SUBREG.  find_reloads will
3947          force a reload in that case.  So we should not do anything here.  */
3948
3949       else if (regno >= FIRST_PSEUDO_REGISTER
3950 #ifdef LOAD_EXTEND_OP
3951                && (GET_MODE_SIZE (GET_MODE (x))
3952                    <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
3953 #endif
3954                && (reg_equiv_address[regno] != 0
3955                    || (reg_equiv_mem[regno] != 0
3956                        && (! strict_memory_address_p (GET_MODE (x), 
3957                                                       XEXP (reg_equiv_mem[regno], 0))
3958                            || ! offsettable_memref_p (reg_equiv_mem[regno])))))
3959         {
3960           int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
3961           rtx addr = (reg_equiv_address[regno] ? reg_equiv_address[regno]
3962                       : XEXP (reg_equiv_mem[regno], 0));
3963           if (BYTES_BIG_ENDIAN)
3964             {
3965               int size;
3966               size = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
3967               offset += MIN (size, UNITS_PER_WORD);
3968               size = GET_MODE_SIZE (GET_MODE (x));
3969               offset -= MIN (size, UNITS_PER_WORD);
3970             }
3971           addr = plus_constant (addr, offset);
3972           x = gen_rtx (MEM, GET_MODE (x), addr);
3973           RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
3974           find_reloads_address (GET_MODE (x), NULL_PTR,
3975                                 XEXP (x, 0),
3976                                 &XEXP (x, 0), opnum, type, ind_levels);
3977         }
3978
3979     }
3980
3981   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
3982     {
3983       if (fmt[i] == 'e')
3984         XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
3985                                            ind_levels, is_set_dest);
3986     }
3987   return x;
3988 }
3989
3990 /* Return a mem ref for the memory equivalent of reg REGNO.
3991    This mem ref is not shared with anything.  */
3992
3993 static rtx
3994 make_memloc (ad, regno)
3995      rtx ad;
3996      int regno;
3997 {
3998   register int i;
3999   rtx tem = reg_equiv_address[regno];
4000
4001 #if 0 /* We cannot safely reuse a memloc made here;
4002          if the pseudo appears twice, and its mem needs a reload,
4003          it gets two separate reloads assigned, but it only
4004          gets substituted with the second of them;
4005          then it can get used before that reload reg gets loaded up.  */
4006   for (i = 0; i < n_memlocs; i++)
4007     if (rtx_equal_p (tem, XEXP (memlocs[i], 0)))
4008       return memlocs[i];
4009 #endif
4010
4011   /* If TEM might contain a pseudo, we must copy it to avoid
4012      modifying it when we do the substitution for the reload.  */
4013   if (rtx_varies_p (tem))
4014     tem = copy_rtx (tem);
4015
4016   tem = gen_rtx (MEM, GET_MODE (ad), tem);
4017   RTX_UNCHANGING_P (tem) = RTX_UNCHANGING_P (regno_reg_rtx[regno]);
4018   memlocs[n_memlocs++] = tem;
4019   return tem;
4020 }
4021
4022 /* Record all reloads needed for handling memory address AD
4023    which appears in *LOC in a memory reference to mode MODE
4024    which itself is found in location  *MEMREFLOC.
4025    Note that we take shortcuts assuming that no multi-reg machine mode
4026    occurs as part of an address.
4027
4028    OPNUM and TYPE specify the purpose of this reload.
4029
4030    IND_LEVELS says how many levels of indirect addressing this machine
4031    supports.
4032
4033    Value is nonzero if this address is reloaded or replaced as a whole.
4034    This is interesting to the caller if the address is an autoincrement.
4035
4036    Note that there is no verification that the address will be valid after
4037    this routine does its work.  Instead, we rely on the fact that the address
4038    was valid when reload started.  So we need only undo things that reload
4039    could have broken.  These are wrong register types, pseudos not allocated
4040    to a hard register, and frame pointer elimination.  */
4041
4042 static int
4043 find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels)
4044      enum machine_mode mode;
4045      rtx *memrefloc;
4046      rtx ad;
4047      rtx *loc;
4048      int opnum;
4049      enum reload_type type;
4050      int ind_levels;
4051 {
4052   register int regno;
4053   rtx tem;
4054
4055   /* If the address is a register, see if it is a legitimate address and
4056      reload if not.  We first handle the cases where we need not reload
4057      or where we must reload in a non-standard way.  */
4058
4059   if (GET_CODE (ad) == REG)
4060     {
4061       regno = REGNO (ad);
4062
4063       if (reg_equiv_constant[regno] != 0
4064           && strict_memory_address_p (mode, reg_equiv_constant[regno]))
4065         {
4066           *loc = ad = reg_equiv_constant[regno];
4067           return 1;
4068         }
4069
4070       else if (reg_equiv_address[regno] != 0)
4071         {
4072           tem = make_memloc (ad, regno);
4073           find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
4074                                 &XEXP (tem, 0), opnum, type, ind_levels);
4075           push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
4076                        GET_MODE (ad), VOIDmode, 0, 0,
4077                        opnum, type);
4078           return 1;
4079         }
4080
4081       /* We can avoid a reload if the register's equivalent memory expression
4082          is valid as an indirect memory address.
4083          But not all addresses are valid in a mem used as an indirect address:
4084          only reg or reg+constant.  */
4085
4086       else if (reg_equiv_mem[regno] != 0 && ind_levels > 0
4087                && strict_memory_address_p (mode, reg_equiv_mem[regno])
4088                && (GET_CODE (XEXP (reg_equiv_mem[regno], 0)) == REG
4089                    || (GET_CODE (XEXP (reg_equiv_mem[regno], 0)) == PLUS
4090                        && GET_CODE (XEXP (XEXP (reg_equiv_mem[regno], 0), 0)) == REG
4091                        && CONSTANT_P (XEXP (XEXP (reg_equiv_mem[regno], 0), 1)))))
4092         return 0;
4093
4094       /* The only remaining case where we can avoid a reload is if this is a
4095          hard register that is valid as a base register and which is not the
4096          subject of a CLOBBER in this insn.  */
4097
4098       else if (regno < FIRST_PSEUDO_REGISTER && REGNO_OK_FOR_BASE_P (regno)
4099                && ! regno_clobbered_p (regno, this_insn))
4100         return 0;
4101
4102       /* If we do not have one of the cases above, we must do the reload.  */
4103       push_reload (ad, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
4104                    GET_MODE (ad), VOIDmode, 0, 0, opnum, type);
4105       return 1;
4106     }
4107
4108   if (strict_memory_address_p (mode, ad))
4109     {
4110       /* The address appears valid, so reloads are not needed.
4111          But the address may contain an eliminable register.
4112          This can happen because a machine with indirect addressing
4113          may consider a pseudo register by itself a valid address even when
4114          it has failed to get a hard reg.
4115          So do a tree-walk to find and eliminate all such regs.  */
4116
4117       /* But first quickly dispose of a common case.  */
4118       if (GET_CODE (ad) == PLUS
4119           && GET_CODE (XEXP (ad, 1)) == CONST_INT
4120           && GET_CODE (XEXP (ad, 0)) == REG
4121           && reg_equiv_constant[REGNO (XEXP (ad, 0))] == 0)
4122         return 0;
4123
4124       subst_reg_equivs_changed = 0;
4125       *loc = subst_reg_equivs (ad);
4126
4127       if (! subst_reg_equivs_changed)
4128         return 0;
4129
4130       /* Check result for validity after substitution.  */
4131       if (strict_memory_address_p (mode, ad))
4132         return 0;
4133     }
4134
4135   /* The address is not valid.  We have to figure out why.  One possibility
4136      is that it is itself a MEM.  This can happen when the frame pointer is
4137      being eliminated, a pseudo is not allocated to a hard register, and the
4138      offset between the frame and stack pointers is not its initial value.
4139      In that case the pseudo will have been replaced by a MEM referring to
4140      the stack pointer.  */
4141   if (GET_CODE (ad) == MEM)
4142     {
4143       /* First ensure that the address in this MEM is valid.  Then, unless
4144          indirect addresses are valid, reload the MEM into a register.  */
4145       tem = ad;
4146       find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
4147                             opnum, type, ind_levels == 0 ? 0 : ind_levels - 1);
4148
4149       /* If tem was changed, then we must create a new memory reference to
4150          hold it and store it back into memrefloc.  */
4151       if (tem != ad && memrefloc)
4152         {
4153           *memrefloc = copy_rtx (*memrefloc);
4154           copy_replacements (tem, XEXP (*memrefloc, 0));
4155           loc = &XEXP (*memrefloc, 0);
4156         }
4157
4158       /* Check similar cases as for indirect addresses as above except
4159          that we can allow pseudos and a MEM since they should have been
4160          taken care of above.  */
4161
4162       if (ind_levels == 0
4163           || (GET_CODE (XEXP (tem, 0)) == SYMBOL_REF && ! indirect_symref_ok)
4164           || GET_CODE (XEXP (tem, 0)) == MEM
4165           || ! (GET_CODE (XEXP (tem, 0)) == REG
4166                 || (GET_CODE (XEXP (tem, 0)) == PLUS
4167                     && GET_CODE (XEXP (XEXP (tem, 0), 0)) == REG
4168                     && GET_CODE (XEXP (XEXP (tem, 0), 1)) == CONST_INT)))
4169         {
4170           /* Must use TEM here, not AD, since it is the one that will
4171              have any subexpressions reloaded, if needed.  */
4172           push_reload (tem, NULL_RTX, loc, NULL_PTR,
4173                        BASE_REG_CLASS, GET_MODE (tem), VOIDmode, 0,
4174                        0, opnum, type);
4175           return 1;
4176         }
4177       else
4178         return 0;
4179     }
4180
4181   /* If we have address of a stack slot but it's not valid
4182      (displacement is too large), compute the sum in a register.  */
4183   else if (GET_CODE (ad) == PLUS
4184            && (XEXP (ad, 0) == frame_pointer_rtx
4185 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
4186                || XEXP (ad, 0) == hard_frame_pointer_rtx
4187 #endif
4188 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4189                || XEXP (ad, 0) == arg_pointer_rtx
4190 #endif
4191                || XEXP (ad, 0) == stack_pointer_rtx)
4192            && GET_CODE (XEXP (ad, 1)) == CONST_INT)
4193     {
4194       /* Unshare the MEM rtx so we can safely alter it.  */
4195       if (memrefloc)
4196         {
4197           *memrefloc = copy_rtx (*memrefloc);
4198           loc = &XEXP (*memrefloc, 0);
4199         }
4200       if (double_reg_address_ok)
4201         {
4202           /* Unshare the sum as well.  */
4203           *loc = ad = copy_rtx (ad);
4204           /* Reload the displacement into an index reg.
4205              We assume the frame pointer or arg pointer is a base reg.  */
4206           find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1),
4207                                      INDEX_REG_CLASS, GET_MODE (ad), opnum,
4208                                      type, ind_levels);
4209         }
4210       else
4211         {
4212           /* If the sum of two regs is not necessarily valid,
4213              reload the sum into a base reg.
4214              That will at least work.  */
4215           find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode,
4216                                      opnum, type, ind_levels);
4217         }
4218       return 1;
4219     }
4220
4221   /* If we have an indexed stack slot, there are three possible reasons why
4222      it might be invalid: The index might need to be reloaded, the address
4223      might have been made by frame pointer elimination and hence have a
4224      constant out of range, or both reasons might apply.  
4225
4226      We can easily check for an index needing reload, but even if that is the
4227      case, we might also have an invalid constant.  To avoid making the
4228      conservative assumption and requiring two reloads, we see if this address
4229      is valid when not interpreted strictly.  If it is, the only problem is
4230      that the index needs a reload and find_reloads_address_1 will take care
4231      of it.
4232
4233      There is still a case when we might generate an extra reload,
4234      however.  In certain cases eliminate_regs will return a MEM for a REG
4235      (see the code there for details).  In those cases, memory_address_p
4236      applied to our address will return 0 so we will think that our offset
4237      must be too large.  But it might indeed be valid and the only problem
4238      is that a MEM is present where a REG should be.  This case should be
4239      very rare and there doesn't seem to be any way to avoid it.
4240
4241      If we decide to do something here, it must be that
4242      `double_reg_address_ok' is true and that this address rtl was made by
4243      eliminate_regs.  We generate a reload of the fp/sp/ap + constant and
4244      rework the sum so that the reload register will be added to the index.
4245      This is safe because we know the address isn't shared.
4246
4247      We check for fp/ap/sp as both the first and second operand of the
4248      innermost PLUS.  */
4249
4250   else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
4251            && GET_CODE (XEXP (ad, 0)) == PLUS
4252            && (XEXP (XEXP (ad, 0), 0) == frame_pointer_rtx
4253 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
4254                || XEXP (XEXP (ad, 0), 0) == hard_frame_pointer_rtx
4255 #endif
4256 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4257                || XEXP (XEXP (ad, 0), 0) == arg_pointer_rtx
4258 #endif
4259                || XEXP (XEXP (ad, 0), 0) == stack_pointer_rtx)
4260            && ! memory_address_p (mode, ad))
4261     {
4262       *loc = ad = gen_rtx (PLUS, GET_MODE (ad),
4263                            plus_constant (XEXP (XEXP (ad, 0), 0),
4264                                           INTVAL (XEXP (ad, 1))),
4265                            XEXP (XEXP (ad, 0), 1));
4266       find_reloads_address_part (XEXP (ad, 0), &XEXP (ad, 0), BASE_REG_CLASS,
4267                                  GET_MODE (ad), opnum, type, ind_levels);
4268       find_reloads_address_1 (XEXP (ad, 1), 1, &XEXP (ad, 1), opnum, type, 0);
4269
4270       return 1;
4271     }
4272                            
4273   else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
4274            && GET_CODE (XEXP (ad, 0)) == PLUS
4275            && (XEXP (XEXP (ad, 0), 1) == frame_pointer_rtx
4276 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
4277                || XEXP (XEXP (ad, 0), 1) == hard_frame_pointer_rtx
4278 #endif
4279 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
4280                || XEXP (XEXP (ad, 0), 1) == arg_pointer_rtx
4281 #endif
4282                || XEXP (XEXP (ad, 0), 1) == stack_pointer_rtx)
4283            && ! memory_address_p (mode, ad))
4284     {
4285       *loc = ad = gen_rtx (PLUS, GET_MODE (ad),
4286                            XEXP (XEXP (ad, 0), 0),
4287                            plus_constant (XEXP (XEXP (ad, 0), 1),
4288                                           INTVAL (XEXP (ad, 1))));
4289       find_reloads_address_part (XEXP (ad, 1), &XEXP (ad, 1), BASE_REG_CLASS,
4290                                  GET_MODE (ad), opnum, type, ind_levels);
4291       find_reloads_address_1 (XEXP (ad, 0), 1, &XEXP (ad, 0), opnum, type, 0);
4292
4293       return 1;
4294     }
4295                            
4296   /* See if address becomes valid when an eliminable register
4297      in a sum is replaced.  */
4298
4299   tem = ad;
4300   if (GET_CODE (ad) == PLUS)
4301     tem = subst_indexed_address (ad);
4302   if (tem != ad && strict_memory_address_p (mode, tem))
4303     {
4304       /* Ok, we win that way.  Replace any additional eliminable
4305          registers.  */
4306
4307       subst_reg_equivs_changed = 0;
4308       tem = subst_reg_equivs (tem);
4309
4310       /* Make sure that didn't make the address invalid again.  */
4311
4312       if (! subst_reg_equivs_changed || strict_memory_address_p (mode, tem))
4313         {
4314           *loc = tem;
4315           return 0;
4316         }
4317     }
4318
4319   /* If constants aren't valid addresses, reload the constant address
4320      into a register.  */
4321   if (CONSTANT_P (ad) && ! strict_memory_address_p (mode, ad))
4322     {
4323       /* If AD is in address in the constant pool, the MEM rtx may be shared.
4324          Unshare it so we can safely alter it.  */
4325       if (memrefloc && GET_CODE (ad) == SYMBOL_REF
4326           && CONSTANT_POOL_ADDRESS_P (ad))
4327         {
4328           *memrefloc = copy_rtx (*memrefloc);
4329           loc = &XEXP (*memrefloc, 0);
4330         }
4331
4332       find_reloads_address_part (ad, loc, BASE_REG_CLASS, Pmode, opnum, type,
4333                                  ind_levels);
4334       return 1;
4335     }
4336
4337   return find_reloads_address_1 (ad, 0, loc, opnum, type, ind_levels);
4338 }
4339 \f
4340 /* Find all pseudo regs appearing in AD
4341    that are eliminable in favor of equivalent values
4342    and do not have hard regs; replace them by their equivalents.  */
4343
4344 static rtx
4345 subst_reg_equivs (ad)
4346      rtx ad;
4347 {
4348   register RTX_CODE code = GET_CODE (ad);
4349   register int i;
4350   register char *fmt;
4351
4352   switch (code)
4353     {
4354     case HIGH:
4355     case CONST_INT:
4356     case CONST:
4357     case CONST_DOUBLE:
4358     case SYMBOL_REF:
4359     case LABEL_REF:
4360     case PC:
4361     case CC0:
4362       return ad;
4363
4364     case REG:
4365       {
4366         register int regno = REGNO (ad);
4367
4368         if (reg_equiv_constant[regno] != 0)
4369           {
4370             subst_reg_equivs_changed = 1;
4371             return reg_equiv_constant[regno];
4372           }
4373       }
4374       return ad;
4375
4376     case PLUS:
4377       /* Quickly dispose of a common case.  */
4378       if (XEXP (ad, 0) == frame_pointer_rtx
4379           && GET_CODE (XEXP (ad, 1)) == CONST_INT)
4380         return ad;
4381     }
4382
4383   fmt = GET_RTX_FORMAT (code);
4384   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4385     if (fmt[i] == 'e')
4386       XEXP (ad, i) = subst_reg_equivs (XEXP (ad, i));
4387   return ad;
4388 }
4389 \f
4390 /* Compute the sum of X and Y, making canonicalizations assumed in an
4391    address, namely: sum constant integers, surround the sum of two
4392    constants with a CONST, put the constant as the second operand, and
4393    group the constant on the outermost sum.
4394
4395    This routine assumes both inputs are already in canonical form.  */
4396
4397 rtx
4398 form_sum (x, y)
4399      rtx x, y;
4400 {
4401   rtx tem;
4402   enum machine_mode mode = GET_MODE (x);
4403
4404   if (mode == VOIDmode)
4405     mode = GET_MODE (y);
4406
4407   if (mode == VOIDmode)
4408     mode = Pmode;
4409
4410   if (GET_CODE (x) == CONST_INT)
4411     return plus_constant (y, INTVAL (x));
4412   else if (GET_CODE (y) == CONST_INT)
4413     return plus_constant (x, INTVAL (y));
4414   else if (CONSTANT_P (x))
4415     tem = x, x = y, y = tem;
4416
4417   if (GET_CODE (x) == PLUS && CONSTANT_P (XEXP (x, 1)))
4418     return form_sum (XEXP (x, 0), form_sum (XEXP (x, 1), y));
4419
4420   /* Note that if the operands of Y are specified in the opposite
4421      order in the recursive calls below, infinite recursion will occur.  */
4422   if (GET_CODE (y) == PLUS && CONSTANT_P (XEXP (y, 1)))
4423     return form_sum (form_sum (x, XEXP (y, 0)), XEXP (y, 1));
4424
4425   /* If both constant, encapsulate sum.  Otherwise, just form sum.  A
4426      constant will have been placed second.  */
4427   if (CONSTANT_P (x) && CONSTANT_P (y))
4428     {
4429       if (GET_CODE (x) == CONST)
4430         x = XEXP (x, 0);
4431       if (GET_CODE (y) == CONST)
4432         y = XEXP (y, 0);
4433
4434       return gen_rtx (CONST, VOIDmode, gen_rtx (PLUS, mode, x, y));
4435     }
4436
4437   return gen_rtx (PLUS, mode, x, y);
4438 }
4439 \f
4440 /* If ADDR is a sum containing a pseudo register that should be
4441    replaced with a constant (from reg_equiv_constant),
4442    return the result of doing so, and also apply the associative
4443    law so that the result is more likely to be a valid address.
4444    (But it is not guaranteed to be one.)
4445
4446    Note that at most one register is replaced, even if more are
4447    replaceable.  Also, we try to put the result into a canonical form
4448    so it is more likely to be a valid address.
4449
4450    In all other cases, return ADDR.  */
4451
4452 static rtx
4453 subst_indexed_address (addr)
4454      rtx addr;
4455 {
4456   rtx op0 = 0, op1 = 0, op2 = 0;
4457   rtx tem;
4458   int regno;
4459
4460   if (GET_CODE (addr) == PLUS)
4461     {
4462       /* Try to find a register to replace.  */
4463       op0 = XEXP (addr, 0), op1 = XEXP (addr, 1), op2 = 0;
4464       if (GET_CODE (op0) == REG
4465           && (regno = REGNO (op0)) >= FIRST_PSEUDO_REGISTER
4466           && reg_renumber[regno] < 0
4467           && reg_equiv_constant[regno] != 0)
4468         op0 = reg_equiv_constant[regno];
4469       else if (GET_CODE (op1) == REG
4470           && (regno = REGNO (op1)) >= FIRST_PSEUDO_REGISTER
4471           && reg_renumber[regno] < 0
4472           && reg_equiv_constant[regno] != 0)
4473         op1 = reg_equiv_constant[regno];
4474       else if (GET_CODE (op0) == PLUS
4475                && (tem = subst_indexed_address (op0)) != op0)
4476         op0 = tem;
4477       else if (GET_CODE (op1) == PLUS
4478                && (tem = subst_indexed_address (op1)) != op1)
4479         op1 = tem;
4480       else
4481         return addr;
4482
4483       /* Pick out up to three things to add.  */
4484       if (GET_CODE (op1) == PLUS)
4485         op2 = XEXP (op1, 1), op1 = XEXP (op1, 0);
4486       else if (GET_CODE (op0) == PLUS)
4487         op2 = op1, op1 = XEXP (op0, 1), op0 = XEXP (op0, 0);
4488
4489       /* Compute the sum.  */
4490       if (op2 != 0)
4491         op1 = form_sum (op1, op2);
4492       if (op1 != 0)
4493         op0 = form_sum (op0, op1);
4494
4495       return op0;
4496     }
4497   return addr;
4498 }
4499 \f
4500 /* Record the pseudo registers we must reload into hard registers
4501    in a subexpression of a would-be memory address, X.
4502    (This function is not called if the address we find is strictly valid.)
4503    CONTEXT = 1 means we are considering regs as index regs,
4504    = 0 means we are considering them as base regs.
4505
4506    OPNUM and TYPE specify the purpose of any reloads made.
4507
4508    IND_LEVELS says how many levels of indirect addressing are
4509    supported at this point in the address.
4510
4511    We return nonzero if X, as a whole, is reloaded or replaced.  */
4512
4513 /* Note that we take shortcuts assuming that no multi-reg machine mode
4514    occurs as part of an address.
4515    Also, this is not fully machine-customizable; it works for machines
4516    such as vaxes and 68000's and 32000's, but other possible machines
4517    could have addressing modes that this does not handle right.  */
4518
4519 static int
4520 find_reloads_address_1 (x, context, loc, opnum, type, ind_levels)
4521      rtx x;
4522      int context;
4523      rtx *loc;
4524      int opnum;
4525      enum reload_type type;
4526      int ind_levels;
4527 {
4528   register RTX_CODE code = GET_CODE (x);
4529
4530   switch (code)
4531     {
4532     case PLUS:
4533       {
4534         register rtx orig_op0 = XEXP (x, 0);
4535         register rtx orig_op1 = XEXP (x, 1);
4536         register RTX_CODE code0 = GET_CODE (orig_op0);
4537         register RTX_CODE code1 = GET_CODE (orig_op1);
4538         register rtx op0 = orig_op0;
4539         register rtx op1 = orig_op1;
4540
4541         if (GET_CODE (op0) == SUBREG)
4542           {
4543             op0 = SUBREG_REG (op0);
4544             code0 = GET_CODE (op0);
4545           }
4546
4547         if (GET_CODE (op1) == SUBREG)
4548           {
4549             op1 = SUBREG_REG (op1);
4550             code1 = GET_CODE (op1);
4551           }
4552
4553         if (code0 == MULT || code0 == SIGN_EXTEND || code0 == TRUNCATE 
4554             || code0 == ZERO_EXTEND || code1 == MEM)
4555           {
4556             find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
4557                                     ind_levels);
4558             find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
4559                                     ind_levels);
4560           }
4561
4562         else if (code1 == MULT || code1 == SIGN_EXTEND || code1 == TRUNCATE
4563                  || code1 == ZERO_EXTEND || code0 == MEM)
4564           {
4565             find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
4566                                     ind_levels);
4567             find_reloads_address_1 (orig_op1, 1, &XEXP (x, 1), opnum, type,
4568                                     ind_levels);
4569           }
4570
4571         else if (code0 == CONST_INT || code0 == CONST
4572                  || code0 == SYMBOL_REF || code0 == LABEL_REF)
4573           find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
4574                                   ind_levels);
4575
4576         else if (code1 == CONST_INT || code1 == CONST
4577                  || code1 == SYMBOL_REF || code1 == LABEL_REF)
4578           find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
4579                                   ind_levels);
4580
4581         else if (code0 == REG && code1 == REG)
4582           {
4583             if (REG_OK_FOR_INDEX_P (op0)
4584                 && REG_OK_FOR_BASE_P (op1))
4585               return 0;
4586             else if (REG_OK_FOR_INDEX_P (op1)
4587                      && REG_OK_FOR_BASE_P (op0))
4588               return 0;
4589             else if (REG_OK_FOR_BASE_P (op1))
4590               find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type, 
4591                                       ind_levels);
4592             else if (REG_OK_FOR_BASE_P (op0))
4593               find_reloads_address_1 (orig_op1, 1, &XEXP (x, 1), opnum, type,
4594                                       ind_levels);
4595             else if (REG_OK_FOR_INDEX_P (op1))
4596               find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
4597                                       ind_levels);
4598             else if (REG_OK_FOR_INDEX_P (op0))
4599             find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
4600                                     ind_levels);
4601             else
4602               {
4603                 find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
4604                                         ind_levels);
4605                 find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
4606                                         ind_levels);
4607               }
4608           }
4609
4610         else if (code0 == REG)
4611           {
4612             find_reloads_address_1 (orig_op0, 1, &XEXP (x, 0), opnum, type,
4613                                     ind_levels);
4614             find_reloads_address_1 (orig_op1, 0, &XEXP (x, 1), opnum, type,
4615                                     ind_levels);
4616           }
4617
4618         else if (code1 == REG)
4619           {
4620             find_reloads_address_1 (orig_op1, 1, &XEXP (x, 1), opnum, type,
4621                                     ind_levels);
4622             find_reloads_address_1 (orig_op0, 0, &XEXP (x, 0), opnum, type,
4623                                     ind_levels);
4624           }
4625       }
4626
4627       return 0;
4628
4629     case POST_INC:
4630     case POST_DEC:
4631     case PRE_INC:
4632     case PRE_DEC:
4633       if (GET_CODE (XEXP (x, 0)) == REG)
4634         {
4635           register int regno = REGNO (XEXP (x, 0));
4636           int value = 0;
4637           rtx x_orig = x;
4638
4639           /* A register that is incremented cannot be constant!  */
4640           if (regno >= FIRST_PSEUDO_REGISTER
4641               && reg_equiv_constant[regno] != 0)
4642             abort ();
4643
4644           /* Handle a register that is equivalent to a memory location
4645              which cannot be addressed directly.  */
4646           if (reg_equiv_address[regno] != 0)
4647             {
4648               rtx tem = make_memloc (XEXP (x, 0), regno);
4649               /* First reload the memory location's address.  */
4650               find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
4651                                     &XEXP (tem, 0), opnum, type, ind_levels);
4652               /* Put this inside a new increment-expression.  */
4653               x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
4654               /* Proceed to reload that, as if it contained a register.  */
4655             }
4656
4657           /* If we have a hard register that is ok as an index,
4658              don't make a reload.  If an autoincrement of a nice register
4659              isn't "valid", it must be that no autoincrement is "valid".
4660              If that is true and something made an autoincrement anyway,
4661              this must be a special context where one is allowed.
4662              (For example, a "push" instruction.)
4663              We can't improve this address, so leave it alone.  */
4664
4665           /* Otherwise, reload the autoincrement into a suitable hard reg
4666              and record how much to increment by.  */
4667
4668           if (reg_renumber[regno] >= 0)
4669             regno = reg_renumber[regno];
4670           if ((regno >= FIRST_PSEUDO_REGISTER
4671                || !(context ? REGNO_OK_FOR_INDEX_P (regno)
4672                     : REGNO_OK_FOR_BASE_P (regno))))
4673             {
4674               register rtx link;
4675
4676               int reloadnum
4677                 = push_reload (x, NULL_RTX, loc, NULL_PTR,
4678                                context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4679                                GET_MODE (x), GET_MODE (x), VOIDmode, 0,
4680                                opnum, type);
4681               reload_inc[reloadnum]
4682                 = find_inc_amount (PATTERN (this_insn), XEXP (x_orig, 0));
4683
4684               value = 1;
4685
4686 #ifdef AUTO_INC_DEC
4687               /* Update the REG_INC notes.  */
4688
4689               for (link = REG_NOTES (this_insn);
4690                    link; link = XEXP (link, 1))
4691                 if (REG_NOTE_KIND (link) == REG_INC
4692                     && REGNO (XEXP (link, 0)) == REGNO (XEXP (x_orig, 0)))
4693                   push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
4694 #endif
4695             }
4696           return value;
4697         }
4698
4699       else if (GET_CODE (XEXP (x, 0)) == MEM)
4700         {
4701           /* This is probably the result of a substitution, by eliminate_regs,
4702              of an equivalent address for a pseudo that was not allocated to a
4703              hard register.  Verify that the specified address is valid and
4704              reload it into a register.  */
4705           rtx tem = XEXP (x, 0);
4706           register rtx link;
4707           int reloadnum;
4708
4709           /* Since we know we are going to reload this item, don't decrement
4710              for the indirection level.
4711
4712              Note that this is actually conservative:  it would be slightly
4713              more efficient to use the value of SPILL_INDIRECT_LEVELS from
4714              reload1.c here.  */
4715           find_reloads_address (GET_MODE (x), &XEXP (x, 0),
4716                                 XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
4717                                 opnum, type, ind_levels);
4718
4719           reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
4720                                    context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4721                                    GET_MODE (x), VOIDmode, 0, 0, opnum, type);
4722           reload_inc[reloadnum]
4723             = find_inc_amount (PATTERN (this_insn), XEXP (x, 0));
4724
4725           link = FIND_REG_INC_NOTE (this_insn, tem);
4726           if (link != 0)
4727             push_replacement (&XEXP (link, 0), reloadnum, VOIDmode);
4728
4729           return 1;
4730         }
4731       return 0;
4732
4733     case MEM:
4734       /* This is probably the result of a substitution, by eliminate_regs, of
4735          an equivalent address for a pseudo that was not allocated to a hard
4736          register.  Verify that the specified address is valid and reload it
4737          into a register.
4738
4739          Since we know we are going to reload this item, don't decrement for
4740          the indirection level.
4741
4742          Note that this is actually conservative:  it would be slightly more
4743          efficient to use the value of SPILL_INDIRECT_LEVELS from
4744          reload1.c here.  */
4745
4746       find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
4747                             opnum, type, ind_levels);
4748       push_reload (*loc, NULL_RTX, loc, NULL_PTR,
4749                    context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4750                    GET_MODE (x), VOIDmode, 0, 0, opnum, type);
4751       return 1;
4752
4753     case REG:
4754       {
4755         register int regno = REGNO (x);
4756
4757         if (reg_equiv_constant[regno] != 0)
4758           {
4759             find_reloads_address_part (reg_equiv_constant[regno], loc, 
4760                                        (context ? INDEX_REG_CLASS
4761                                         : BASE_REG_CLASS),
4762                                        GET_MODE (x), opnum, type, ind_levels);
4763             return 1;
4764           }
4765
4766 #if 0 /* This might screw code in reload1.c to delete prior output-reload
4767          that feeds this insn.  */
4768         if (reg_equiv_mem[regno] != 0)
4769           {
4770             push_reload (reg_equiv_mem[regno], NULL_RTX, loc, NULL_PTR,
4771                          context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4772                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
4773             return 1;
4774           }
4775 #endif
4776
4777         if (reg_equiv_address[regno] != 0)
4778           {
4779             x = make_memloc (x, regno);
4780             find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
4781                                   opnum, type, ind_levels);
4782           }
4783
4784         if (reg_renumber[regno] >= 0)
4785           regno = reg_renumber[regno];
4786
4787         if ((regno >= FIRST_PSEUDO_REGISTER
4788              || !(context ? REGNO_OK_FOR_INDEX_P (regno)
4789                   : REGNO_OK_FOR_BASE_P (regno))))
4790           {
4791             push_reload (x, NULL_RTX, loc, NULL_PTR,
4792                          context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4793                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
4794             return 1;
4795           }
4796
4797         /* If a register appearing in an address is the subject of a CLOBBER
4798            in this insn, reload it into some other register to be safe.
4799            The CLOBBER is supposed to make the register unavailable
4800            from before this insn to after it.  */
4801         if (regno_clobbered_p (regno, this_insn))
4802           {
4803             push_reload (x, NULL_RTX, loc, NULL_PTR,
4804                          context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4805                          GET_MODE (x), VOIDmode, 0, 0, opnum, type);
4806             return 1;
4807           }
4808       }
4809       return 0;
4810
4811     case SUBREG:
4812       /* If this is a SUBREG of a hard register and the resulting register is
4813          of the wrong class, reload the whole SUBREG.  This avoids needless
4814          copies if SUBREG_REG is multi-word.  */
4815       if (GET_CODE (SUBREG_REG (x)) == REG
4816           && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
4817         {
4818           int regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x);
4819
4820           if (! (context ? REGNO_OK_FOR_INDEX_P (regno)
4821                  : REGNO_OK_FOR_BASE_P (regno)))
4822             {
4823               push_reload (x, NULL_RTX, loc, NULL_PTR,
4824                            context ? INDEX_REG_CLASS : BASE_REG_CLASS,
4825                            GET_MODE (x), VOIDmode, 0, 0, opnum, type);
4826               return 1;
4827             }
4828         }
4829       break;
4830     }
4831
4832   {
4833     register char *fmt = GET_RTX_FORMAT (code);
4834     register int i;
4835
4836     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4837       {
4838         if (fmt[i] == 'e')
4839           find_reloads_address_1 (XEXP (x, i), context, &XEXP (x, i),
4840                                   opnum, type, ind_levels);
4841       }
4842   }
4843
4844   return 0;
4845 }
4846 \f
4847 /* X, which is found at *LOC, is a part of an address that needs to be
4848    reloaded into a register of class CLASS.  If X is a constant, or if
4849    X is a PLUS that contains a constant, check that the constant is a
4850    legitimate operand and that we are supposed to be able to load
4851    it into the register.
4852
4853    If not, force the constant into memory and reload the MEM instead.
4854
4855    MODE is the mode to use, in case X is an integer constant.
4856
4857    OPNUM and TYPE describe the purpose of any reloads made.
4858
4859    IND_LEVELS says how many levels of indirect addressing this machine
4860    supports.  */
4861
4862 static void
4863 find_reloads_address_part (x, loc, class, mode, opnum, type, ind_levels)
4864      rtx x;
4865      rtx *loc;
4866      enum reg_class class;
4867      enum machine_mode mode;
4868      int opnum;
4869      enum reload_type type;
4870      int ind_levels;
4871 {
4872   if (CONSTANT_P (x)
4873       && (! LEGITIMATE_CONSTANT_P (x)
4874           || PREFERRED_RELOAD_CLASS (x, class) == NO_REGS))
4875     {
4876       rtx tem = x = force_const_mem (mode, x);
4877       find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
4878                             opnum, type, ind_levels);
4879     }
4880
4881   else if (GET_CODE (x) == PLUS
4882            && CONSTANT_P (XEXP (x, 1))
4883            && (! LEGITIMATE_CONSTANT_P (XEXP (x, 1))
4884                || PREFERRED_RELOAD_CLASS (XEXP (x, 1), class) == NO_REGS))
4885     {
4886       rtx tem = force_const_mem (GET_MODE (x), XEXP (x, 1));
4887
4888       x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
4889       find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
4890                             opnum, type, ind_levels);
4891     }
4892
4893   push_reload (x, NULL_RTX, loc, NULL_PTR, class,
4894                mode, VOIDmode, 0, 0, opnum, type);
4895 }
4896 \f
4897 /* Substitute into the current INSN the registers into which we have reloaded
4898    the things that need reloading.  The array `replacements'
4899    says contains the locations of all pointers that must be changed
4900    and says what to replace them with.
4901
4902    Return the rtx that X translates into; usually X, but modified.  */
4903
4904 void
4905 subst_reloads ()
4906 {
4907   register int i;
4908
4909   for (i = 0; i < n_replacements; i++)
4910     {
4911       register struct replacement *r = &replacements[i];
4912       register rtx reloadreg = reload_reg_rtx[r->what];
4913       if (reloadreg)
4914         {
4915           /* Encapsulate RELOADREG so its machine mode matches what
4916              used to be there.  Note that gen_lowpart_common will
4917              do the wrong thing if RELOADREG is multi-word.  RELOADREG
4918              will always be a REG here.  */
4919           if (GET_MODE (reloadreg) != r->mode && r->mode != VOIDmode)
4920             reloadreg = gen_rtx (REG, r->mode, REGNO (reloadreg));
4921
4922           /* If we are putting this into a SUBREG and RELOADREG is a
4923              SUBREG, we would be making nested SUBREGs, so we have to fix
4924              this up.  Note that r->where == &SUBREG_REG (*r->subreg_loc).  */
4925
4926           if (r->subreg_loc != 0 && GET_CODE (reloadreg) == SUBREG)
4927             {
4928               if (GET_MODE (*r->subreg_loc)
4929                   == GET_MODE (SUBREG_REG (reloadreg)))
4930                 *r->subreg_loc = SUBREG_REG (reloadreg);
4931               else
4932                 {
4933                   *r->where = SUBREG_REG (reloadreg);
4934                   SUBREG_WORD (*r->subreg_loc) += SUBREG_WORD (reloadreg);
4935                 }
4936             }
4937           else
4938             *r->where = reloadreg;
4939         }
4940       /* If reload got no reg and isn't optional, something's wrong.  */
4941       else if (! reload_optional[r->what])
4942         abort ();
4943     }
4944 }
4945 \f
4946 /* Make a copy of any replacements being done into X and move those copies
4947    to locations in Y, a copy of X.  We only look at the highest level of
4948    the RTL.  */
4949
4950 void
4951 copy_replacements (x, y)
4952      rtx x;
4953      rtx y;
4954 {
4955   int i, j;
4956   enum rtx_code code = GET_CODE (x);
4957   char *fmt = GET_RTX_FORMAT (code);
4958   struct replacement *r;
4959
4960   /* We can't support X being a SUBREG because we might then need to know its
4961      location if something inside it was replaced.  */
4962   if (code == SUBREG)
4963     abort ();
4964
4965   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4966     if (fmt[i] == 'e')
4967       for (j = 0; j < n_replacements; j++)
4968         {
4969           if (replacements[j].subreg_loc == &XEXP (x, i))
4970             {
4971               r = &replacements[n_replacements++];
4972               r->where = replacements[j].where;
4973               r->subreg_loc = &XEXP (y, i);
4974               r->what = replacements[j].what;
4975               r->mode = replacements[j].mode;
4976             }
4977           else if (replacements[j].where == &XEXP (x, i))
4978             {
4979               r = &replacements[n_replacements++];
4980               r->where = &XEXP (y, i);
4981               r->subreg_loc = 0;
4982               r->what = replacements[j].what;
4983               r->mode = replacements[j].mode;
4984             }
4985         }
4986 }
4987 \f
4988 /* If LOC was scheduled to be replaced by something, return the replacement.
4989    Otherwise, return *LOC.  */
4990
4991 rtx
4992 find_replacement (loc)
4993      rtx *loc;
4994 {
4995   struct replacement *r;
4996
4997   for (r = &replacements[0]; r < &replacements[n_replacements]; r++)
4998     {
4999       rtx reloadreg = reload_reg_rtx[r->what];
5000
5001       if (reloadreg && r->where == loc)
5002         {
5003           if (r->mode != VOIDmode && GET_MODE (reloadreg) != r->mode)
5004             reloadreg = gen_rtx (REG, r->mode, REGNO (reloadreg));
5005
5006           return reloadreg;
5007         }
5008       else if (reloadreg && r->subreg_loc == loc)
5009         {
5010           /* RELOADREG must be either a REG or a SUBREG.
5011
5012              ??? Is it actually still ever a SUBREG?  If so, why?  */
5013
5014           if (GET_CODE (reloadreg) == REG)
5015             return gen_rtx (REG, GET_MODE (*loc),
5016                             REGNO (reloadreg) + SUBREG_WORD (*loc));
5017           else if (GET_MODE (reloadreg) == GET_MODE (*loc))
5018             return reloadreg;
5019           else
5020             return gen_rtx (SUBREG, GET_MODE (*loc), SUBREG_REG (reloadreg),
5021                             SUBREG_WORD (reloadreg) + SUBREG_WORD (*loc));
5022         }
5023     }
5024
5025   return *loc;
5026 }
5027 \f
5028 /* Return nonzero if register in range [REGNO, ENDREGNO)
5029    appears either explicitly or implicitly in X
5030    other than being stored into (except for earlyclobber operands).
5031
5032    References contained within the substructure at LOC do not count.
5033    LOC may be zero, meaning don't ignore anything.
5034
5035    This is similar to refers_to_regno_p in rtlanal.c except that we
5036    look at equivalences for pseudos that didn't get hard registers.  */
5037
5038 int
5039 refers_to_regno_for_reload_p (regno, endregno, x, loc)
5040      int regno, endregno;
5041      rtx x;
5042      rtx *loc;
5043 {
5044   register int i;
5045   register RTX_CODE code;
5046   register char *fmt;
5047
5048   if (x == 0)
5049     return 0;
5050
5051  repeat:
5052   code = GET_CODE (x);
5053
5054   switch (code)
5055     {
5056     case REG:
5057       i = REGNO (x);
5058
5059       /* If this is a pseudo, a hard register must not have been allocated.
5060          X must therefore either be a constant or be in memory.  */
5061       if (i >= FIRST_PSEUDO_REGISTER)
5062         {
5063           if (reg_equiv_memory_loc[i])
5064             return refers_to_regno_for_reload_p (regno, endregno,
5065                                                  reg_equiv_memory_loc[i],
5066                                                  NULL_PTR);
5067
5068           if (reg_equiv_constant[i])
5069             return 0;
5070
5071           abort ();
5072         }
5073
5074       return (endregno > i
5075               && regno < i + (i < FIRST_PSEUDO_REGISTER 
5076                               ? HARD_REGNO_NREGS (i, GET_MODE (x))
5077                               : 1));
5078
5079     case SUBREG:
5080       /* If this is a SUBREG of a hard reg, we can see exactly which
5081          registers are being modified.  Otherwise, handle normally.  */
5082       if (GET_CODE (SUBREG_REG (x)) == REG
5083           && REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER)
5084         {
5085           int inner_regno = REGNO (SUBREG_REG (x)) + SUBREG_WORD (x);
5086           int inner_endregno
5087             = inner_regno + (inner_regno < FIRST_PSEUDO_REGISTER
5088                              ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
5089
5090           return endregno > inner_regno && regno < inner_endregno;
5091         }
5092       break;
5093
5094     case CLOBBER:
5095     case SET:
5096       if (&SET_DEST (x) != loc
5097           /* Note setting a SUBREG counts as referring to the REG it is in for
5098              a pseudo but not for hard registers since we can
5099              treat each word individually.  */
5100           && ((GET_CODE (SET_DEST (x)) == SUBREG
5101                && loc != &SUBREG_REG (SET_DEST (x))
5102                && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
5103                && REGNO (SUBREG_REG (SET_DEST (x))) >= FIRST_PSEUDO_REGISTER
5104                && refers_to_regno_for_reload_p (regno, endregno,
5105                                                 SUBREG_REG (SET_DEST (x)),
5106                                                 loc))
5107               /* If the ouput is an earlyclobber operand, this is
5108                  a conflict.  */
5109               || ((GET_CODE (SET_DEST (x)) != REG
5110                    || earlyclobber_operand_p (SET_DEST (x)))
5111                   && refers_to_regno_for_reload_p (regno, endregno,
5112                                                    SET_DEST (x), loc))))
5113         return 1;
5114
5115       if (code == CLOBBER || loc == &SET_SRC (x))
5116         return 0;
5117       x = SET_SRC (x);
5118       goto repeat;
5119     }
5120
5121   /* X does not match, so try its subexpressions.  */
5122
5123   fmt = GET_RTX_FORMAT (code);
5124   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5125     {
5126       if (fmt[i] == 'e' && loc != &XEXP (x, i))
5127         {
5128           if (i == 0)
5129             {
5130               x = XEXP (x, 0);
5131               goto repeat;
5132             }
5133           else
5134             if (refers_to_regno_for_reload_p (regno, endregno,
5135                                               XEXP (x, i), loc))
5136               return 1;
5137         }
5138       else if (fmt[i] == 'E')
5139         {
5140           register int j;
5141           for (j = XVECLEN (x, i) - 1; j >=0; j--)
5142             if (loc != &XVECEXP (x, i, j)
5143                 && refers_to_regno_for_reload_p (regno, endregno,
5144                                                  XVECEXP (x, i, j), loc))
5145               return 1;
5146         }
5147     }
5148   return 0;
5149 }
5150
5151 /* Nonzero if modifying X will affect IN.  If X is a register or a SUBREG,
5152    we check if any register number in X conflicts with the relevant register
5153    numbers.  If X is a constant, return 0.  If X is a MEM, return 1 iff IN
5154    contains a MEM (we don't bother checking for memory addresses that can't
5155    conflict because we expect this to be a rare case. 
5156
5157    This function is similar to reg_overlap_mention_p in rtlanal.c except
5158    that we look at equivalences for pseudos that didn't get hard registers.  */
5159
5160 int
5161 reg_overlap_mentioned_for_reload_p (x, in)
5162      rtx x, in;
5163 {
5164   int regno, endregno;
5165
5166   if (GET_CODE (x) == SUBREG)
5167     {
5168       regno = REGNO (SUBREG_REG (x));
5169       if (regno < FIRST_PSEUDO_REGISTER)
5170         regno += SUBREG_WORD (x);
5171     }
5172   else if (GET_CODE (x) == REG)
5173     {
5174       regno = REGNO (x);
5175
5176       /* If this is a pseudo, it must not have been assigned a hard register.
5177          Therefore, it must either be in memory or be a constant.  */
5178
5179       if (regno >= FIRST_PSEUDO_REGISTER)
5180         {
5181           if (reg_equiv_memory_loc[regno])
5182             return refers_to_mem_for_reload_p (in);
5183           else if (reg_equiv_constant[regno])
5184             return 0;
5185           abort ();
5186         }
5187     }
5188   else if (CONSTANT_P (x))
5189     return 0;
5190   else if (GET_CODE (x) == MEM)
5191     return refers_to_mem_for_reload_p (in);
5192   else if (GET_CODE (x) == SCRATCH || GET_CODE (x) == PC
5193            || GET_CODE (x) == CC0)
5194     return reg_mentioned_p (x, in);
5195   else
5196     abort ();
5197
5198   endregno = regno + (regno < FIRST_PSEUDO_REGISTER
5199                       ? HARD_REGNO_NREGS (regno, GET_MODE (x)) : 1);
5200
5201   return refers_to_regno_for_reload_p (regno, endregno, in, NULL_PTR);
5202 }
5203
5204 /* Return nonzero if anything in X contains a MEM.  Look also for pseudo
5205    registers.  */
5206
5207 int
5208 refers_to_mem_for_reload_p (x)
5209      rtx x;
5210 {
5211   char *fmt;
5212   int i;
5213
5214   if (GET_CODE (x) == MEM)
5215     return 1;
5216
5217   if (GET_CODE (x) == REG)
5218     return (REGNO (x) >= FIRST_PSEUDO_REGISTER
5219             && reg_equiv_memory_loc[REGNO (x)]);
5220                         
5221   fmt = GET_RTX_FORMAT (GET_CODE (x));
5222   for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
5223     if (fmt[i] == 'e'
5224         && (GET_CODE (XEXP (x, i)) == MEM
5225             || refers_to_mem_for_reload_p (XEXP (x, i))))
5226       return 1;
5227   
5228   return 0;
5229 }
5230 \f
5231 /* Check the insns before INSN to see if there is a suitable register
5232    containing the same value as GOAL.
5233    If OTHER is -1, look for a register in class CLASS.
5234    Otherwise, just see if register number OTHER shares GOAL's value.
5235
5236    Return an rtx for the register found, or zero if none is found.
5237
5238    If RELOAD_REG_P is (short *)1,
5239    we reject any hard reg that appears in reload_reg_rtx
5240    because such a hard reg is also needed coming into this insn.
5241
5242    If RELOAD_REG_P is any other nonzero value,
5243    it is a vector indexed by hard reg number
5244    and we reject any hard reg whose element in the vector is nonnegative
5245    as well as any that appears in reload_reg_rtx.
5246
5247    If GOAL is zero, then GOALREG is a register number; we look
5248    for an equivalent for that register.
5249
5250    MODE is the machine mode of the value we want an equivalence for.
5251    If GOAL is nonzero and not VOIDmode, then it must have mode MODE.
5252
5253    This function is used by jump.c as well as in the reload pass.
5254
5255    If GOAL is the sum of the stack pointer and a constant, we treat it
5256    as if it were a constant except that sp is required to be unchanging.  */
5257
5258 rtx
5259 find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
5260      register rtx goal;
5261      rtx insn;
5262      enum reg_class class;
5263      register int other;
5264      short *reload_reg_p;
5265      int goalreg;
5266      enum machine_mode mode;
5267 {
5268   register rtx p = insn;
5269   rtx goaltry, valtry, value, where;
5270   register rtx pat;
5271   register int regno = -1;
5272   int valueno;
5273   int goal_mem = 0;
5274   int goal_const = 0;
5275   int goal_mem_addr_varies = 0;
5276   int need_stable_sp = 0;
5277   int nregs;
5278   int valuenregs;
5279
5280   if (goal == 0)
5281     regno = goalreg;
5282   else if (GET_CODE (goal) == REG)
5283     regno = REGNO (goal);
5284   else if (GET_CODE (goal) == MEM)
5285     {
5286       enum rtx_code code = GET_CODE (XEXP (goal, 0));
5287       if (MEM_VOLATILE_P (goal))
5288         return 0;
5289       if (flag_float_store && GET_MODE_CLASS (GET_MODE (goal)) == MODE_FLOAT)
5290         return 0;
5291       /* An address with side effects must be reexecuted.  */
5292       switch (code)
5293         {
5294         case POST_INC:
5295         case PRE_INC:
5296         case POST_DEC:
5297         case PRE_DEC:
5298           return 0;
5299         }
5300       goal_mem = 1;
5301     }
5302   else if (CONSTANT_P (goal))
5303     goal_const = 1;
5304   else if (GET_CODE (goal) == PLUS
5305            && XEXP (goal, 0) == stack_pointer_rtx
5306            && CONSTANT_P (XEXP (goal, 1)))
5307     goal_const = need_stable_sp = 1;
5308   else
5309     return 0;
5310
5311   /* On some machines, certain regs must always be rejected
5312      because they don't behave the way ordinary registers do.  */
5313   
5314 #ifdef OVERLAPPING_REGNO_P
5315    if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
5316        && OVERLAPPING_REGNO_P (regno))
5317      return 0;
5318 #endif      
5319
5320   /* Scan insns back from INSN, looking for one that copies
5321      a value into or out of GOAL.
5322      Stop and give up if we reach a label.  */
5323
5324   while (1)
5325     {
5326       p = PREV_INSN (p);
5327       if (p == 0 || GET_CODE (p) == CODE_LABEL)
5328         return 0;
5329       if (GET_CODE (p) == INSN
5330           /* If we don't want spill regs ... */
5331           && (! (reload_reg_p != 0
5332                  && reload_reg_p != (short *) (HOST_WIDE_INT) 1)
5333           /* ... then ignore insns introduced by reload; they aren't useful
5334              and can cause results in reload_as_needed to be different
5335              from what they were when calculating the need for spills.
5336              If we notice an input-reload insn here, we will reject it below,
5337              but it might hide a usable equivalent.  That makes bad code.
5338              It may even abort: perhaps no reg was spilled for this insn
5339              because it was assumed we would find that equivalent.  */
5340               || INSN_UID (p) < reload_first_uid))
5341         {
5342           rtx tem;
5343           pat = single_set (p);
5344           /* First check for something that sets some reg equal to GOAL.  */
5345           if (pat != 0
5346               && ((regno >= 0
5347                    && true_regnum (SET_SRC (pat)) == regno
5348                    && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
5349                   ||
5350                   (regno >= 0
5351                    && true_regnum (SET_DEST (pat)) == regno
5352                    && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0)
5353                   ||
5354                   (goal_const && rtx_equal_p (SET_SRC (pat), goal)
5355                    && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
5356                   || (goal_mem
5357                       && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0
5358                       && rtx_renumbered_equal_p (goal, SET_SRC (pat)))
5359                   || (goal_mem
5360                       && (valueno = true_regnum (valtry = SET_SRC (pat))) >= 0
5361                       && rtx_renumbered_equal_p (goal, SET_DEST (pat)))
5362                   /* If we are looking for a constant,
5363                      and something equivalent to that constant was copied
5364                      into a reg, we can use that reg.  */
5365                   || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
5366                                                           NULL_RTX))
5367                       && rtx_equal_p (XEXP (tem, 0), goal)
5368                       && (valueno = true_regnum (valtry = SET_DEST (pat))) >= 0)
5369                   || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
5370                                                           NULL_RTX))
5371                       && GET_CODE (SET_DEST (pat)) == REG
5372                       && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
5373                       && GET_MODE_CLASS (GET_MODE (XEXP (tem, 0))) == MODE_FLOAT
5374                       && GET_CODE (goal) == CONST_INT
5375                       && 0 != (goaltry = operand_subword (XEXP (tem, 0), 0, 0,
5376                                                           VOIDmode))
5377                       && rtx_equal_p (goal, goaltry)
5378                       && (valtry = operand_subword (SET_DEST (pat), 0, 0,
5379                                                     VOIDmode))
5380                       && (valueno = true_regnum (valtry)) >= 0)
5381                   || (goal_const && (tem = find_reg_note (p, REG_EQUIV,
5382                                                           NULL_RTX))
5383                       && GET_CODE (SET_DEST (pat)) == REG
5384                       && GET_CODE (XEXP (tem, 0)) == CONST_DOUBLE
5385                       && GET_MODE_CLASS (GET_MODE (XEXP (tem, 0))) == MODE_FLOAT
5386                       && GET_CODE (goal) == CONST_INT
5387                       && 0 != (goaltry = operand_subword (XEXP (tem, 0), 1, 0,
5388                                                           VOIDmode))
5389                       && rtx_equal_p (goal, goaltry)
5390                       && (valtry
5391                           = operand_subword (SET_DEST (pat), 1, 0, VOIDmode))
5392                       && (valueno = true_regnum (valtry)) >= 0)))
5393             if (other >= 0
5394                 ? valueno == other
5395                 : ((unsigned) valueno < FIRST_PSEUDO_REGISTER
5396                    && TEST_HARD_REG_BIT (reg_class_contents[(int) class],
5397                                          valueno)))
5398               {
5399                 value = valtry;
5400                 where = p;
5401                 break;
5402               }
5403         }
5404     }
5405
5406   /* We found a previous insn copying GOAL into a suitable other reg VALUE
5407      (or copying VALUE into GOAL, if GOAL is also a register).
5408      Now verify that VALUE is really valid.  */
5409
5410   /* VALUENO is the register number of VALUE; a hard register.  */
5411
5412   /* Don't try to re-use something that is killed in this insn.  We want
5413      to be able to trust REG_UNUSED notes.  */
5414   if (find_reg_note (where, REG_UNUSED, value))
5415     return 0;
5416
5417   /* If we propose to get the value from the stack pointer or if GOAL is
5418      a MEM based on the stack pointer, we need a stable SP.  */
5419   if (valueno == STACK_POINTER_REGNUM
5420       || (goal_mem && reg_overlap_mentioned_for_reload_p (stack_pointer_rtx,
5421                                                           goal)))
5422     need_stable_sp = 1;
5423
5424   /* Reject VALUE if the copy-insn moved the wrong sort of datum.  */
5425   if (GET_MODE (value) != mode)
5426     return 0;
5427
5428   /* Reject VALUE if it was loaded from GOAL
5429      and is also a register that appears in the address of GOAL.  */
5430
5431   if (goal_mem && value == SET_DEST (PATTERN (where))
5432       && refers_to_regno_for_reload_p (valueno,
5433                                        (valueno
5434                                         + HARD_REGNO_NREGS (valueno, mode)),
5435                                        goal, NULL_PTR))
5436     return 0;
5437
5438   /* Reject registers that overlap GOAL.  */
5439
5440   if (!goal_mem && !goal_const
5441       && regno + HARD_REGNO_NREGS (regno, mode) > valueno
5442       && regno < valueno + HARD_REGNO_NREGS (valueno, mode))
5443     return 0;
5444
5445   /* Reject VALUE if it is one of the regs reserved for reloads.
5446      Reload1 knows how to reuse them anyway, and it would get
5447      confused if we allocated one without its knowledge.
5448      (Now that insns introduced by reload are ignored above,
5449      this case shouldn't happen, but I'm not positive.)  */
5450
5451   if (reload_reg_p != 0 && reload_reg_p != (short *) (HOST_WIDE_INT) 1
5452       && reload_reg_p[valueno] >= 0)
5453     return 0;
5454
5455   /* On some machines, certain regs must always be rejected
5456      because they don't behave the way ordinary registers do.  */
5457   
5458 #ifdef OVERLAPPING_REGNO_P
5459   if (OVERLAPPING_REGNO_P (valueno))
5460     return 0;
5461 #endif      
5462
5463   nregs = HARD_REGNO_NREGS (regno, mode);
5464   valuenregs = HARD_REGNO_NREGS (valueno, mode);
5465
5466   /* Reject VALUE if it is a register being used for an input reload
5467      even if it is not one of those reserved.  */
5468
5469   if (reload_reg_p != 0)
5470     {
5471       int i;
5472       for (i = 0; i < n_reloads; i++)
5473         if (reload_reg_rtx[i] != 0 && reload_in[i])
5474           {
5475             int regno1 = REGNO (reload_reg_rtx[i]);
5476             int nregs1 = HARD_REGNO_NREGS (regno1,
5477                                            GET_MODE (reload_reg_rtx[i]));
5478             if (regno1 < valueno + valuenregs
5479                 && regno1 + nregs1 > valueno)
5480               return 0;
5481           }
5482     }
5483
5484   if (goal_mem)
5485     /* We must treat frame pointer as varying here,
5486        since it can vary--in a nonlocal goto as generated by expand_goto.  */
5487     goal_mem_addr_varies = !CONSTANT_ADDRESS_P (XEXP (goal, 0));
5488
5489   /* Now verify that the values of GOAL and VALUE remain unaltered
5490      until INSN is reached.  */
5491
5492   p = insn;
5493   while (1)
5494     {
5495       p = PREV_INSN (p);
5496       if (p == where)
5497         return value;
5498
5499       /* Don't trust the conversion past a function call
5500          if either of the two is in a call-clobbered register, or memory.  */
5501       if (GET_CODE (p) == CALL_INSN
5502           && ((regno >= 0 && regno < FIRST_PSEUDO_REGISTER
5503                && call_used_regs[regno])
5504               ||
5505               (valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER
5506                && call_used_regs[valueno])
5507               ||
5508               goal_mem
5509               || need_stable_sp))
5510         return 0;
5511
5512 #ifdef INSN_CLOBBERS_REGNO_P
5513       if ((valueno >= 0 && valueno < FIRST_PSEUDO_REGISTER
5514           && INSN_CLOBBERS_REGNO_P (p, valueno))
5515           || (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
5516           && INSN_CLOBBERS_REGNO_P (p, regno)))
5517         return 0;
5518 #endif
5519
5520       if (GET_RTX_CLASS (GET_CODE (p)) == 'i')
5521         {
5522           /* If this insn P stores in either GOAL or VALUE, return 0.
5523              If GOAL is a memory ref and this insn writes memory, return 0.
5524              If GOAL is a memory ref and its address is not constant,
5525              and this insn P changes a register used in GOAL, return 0.  */
5526
5527           pat = PATTERN (p);
5528           if (GET_CODE (pat) == SET || GET_CODE (pat) == CLOBBER)
5529             {
5530               register rtx dest = SET_DEST (pat);
5531               while (GET_CODE (dest) == SUBREG
5532                      || GET_CODE (dest) == ZERO_EXTRACT
5533                      || GET_CODE (dest) == SIGN_EXTRACT
5534                      || GET_CODE (dest) == STRICT_LOW_PART)
5535                 dest = XEXP (dest, 0);
5536               if (GET_CODE (dest) == REG)
5537                 {
5538                   register int xregno = REGNO (dest);
5539                   int xnregs;
5540                   if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
5541                     xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
5542                   else
5543                     xnregs = 1;
5544                   if (xregno < regno + nregs && xregno + xnregs > regno)
5545                     return 0;
5546                   if (xregno < valueno + valuenregs
5547                       && xregno + xnregs > valueno)
5548                     return 0;
5549                   if (goal_mem_addr_varies
5550                       && reg_overlap_mentioned_for_reload_p (dest, goal))
5551                     return 0;
5552                 }
5553               else if (goal_mem && GET_CODE (dest) == MEM
5554                        && ! push_operand (dest, GET_MODE (dest)))
5555                 return 0;
5556               else if (need_stable_sp && push_operand (dest, GET_MODE (dest)))
5557                 return 0;
5558             }
5559           else if (GET_CODE (pat) == PARALLEL)
5560             {
5561               register int i;
5562               for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)
5563                 {
5564                   register rtx v1 = XVECEXP (pat, 0, i);
5565                   if (GET_CODE (v1) == SET || GET_CODE (v1) == CLOBBER)
5566                     {
5567                       register rtx dest = SET_DEST (v1);
5568                       while (GET_CODE (dest) == SUBREG
5569                              || GET_CODE (dest) == ZERO_EXTRACT
5570                              || GET_CODE (dest) == SIGN_EXTRACT
5571                              || GET_CODE (dest) == STRICT_LOW_PART)
5572                         dest = XEXP (dest, 0);
5573                       if (GET_CODE (dest) == REG)
5574                         {
5575                           register int xregno = REGNO (dest);
5576                           int xnregs;
5577                           if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
5578                             xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
5579                           else
5580                             xnregs = 1;
5581                           if (xregno < regno + nregs
5582                               && xregno + xnregs > regno)
5583                             return 0;
5584                           if (xregno < valueno + valuenregs
5585                               && xregno + xnregs > valueno)
5586                             return 0;
5587                           if (goal_mem_addr_varies
5588                               && reg_overlap_mentioned_for_reload_p (dest,
5589                                                                      goal))
5590                             return 0;
5591                         }
5592                       else if (goal_mem && GET_CODE (dest) == MEM
5593                                && ! push_operand (dest, GET_MODE (dest)))
5594                         return 0;
5595                       else if (need_stable_sp
5596                                && push_operand (dest, GET_MODE (dest)))
5597                         return 0;
5598                     }
5599                 }
5600             }
5601
5602           if (GET_CODE (p) == CALL_INSN && CALL_INSN_FUNCTION_USAGE (p))
5603             {
5604               rtx link;
5605
5606               for (link = CALL_INSN_FUNCTION_USAGE (p); XEXP (link, 1) != 0;
5607                    link = XEXP (link, 1))
5608                 {
5609                   pat = XEXP (link, 0);
5610                   if (GET_CODE (pat) == CLOBBER)
5611                     {
5612                       register rtx dest = SET_DEST (pat);
5613                       while (GET_CODE (dest) == SUBREG
5614                              || GET_CODE (dest) == ZERO_EXTRACT
5615                              || GET_CODE (dest) == SIGN_EXTRACT
5616                              || GET_CODE (dest) == STRICT_LOW_PART)
5617                         dest = XEXP (dest, 0);
5618                       if (GET_CODE (dest) == REG)
5619                         {
5620                           register int xregno = REGNO (dest);
5621                           int xnregs;
5622                           if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
5623                             xnregs = HARD_REGNO_NREGS (xregno, GET_MODE (dest));
5624                           else
5625                             xnregs = 1;
5626                           if (xregno < regno + nregs
5627                               && xregno + xnregs > regno)
5628                             return 0;
5629                           if (xregno < valueno + valuenregs
5630                               && xregno + xnregs > valueno)
5631                             return 0;
5632                           if (goal_mem_addr_varies
5633                               && reg_overlap_mentioned_for_reload_p (dest,
5634                                                                      goal))
5635                             return 0;
5636                         }
5637                       else if (goal_mem && GET_CODE (dest) == MEM
5638                                && ! push_operand (dest, GET_MODE (dest)))
5639                         return 0;
5640                       else if (need_stable_sp
5641                                && push_operand (dest, GET_MODE (dest)))
5642                         return 0;
5643                     }
5644                 }
5645             }
5646
5647 #ifdef AUTO_INC_DEC
5648           /* If this insn auto-increments or auto-decrements
5649              either regno or valueno, return 0 now.
5650              If GOAL is a memory ref and its address is not constant,
5651              and this insn P increments a register used in GOAL, return 0.  */
5652           {
5653             register rtx link;
5654
5655             for (link = REG_NOTES (p); link; link = XEXP (link, 1))
5656               if (REG_NOTE_KIND (link) == REG_INC
5657                   && GET_CODE (XEXP (link, 0)) == REG)
5658                 {
5659                   register int incno = REGNO (XEXP (link, 0));
5660                   if (incno < regno + nregs && incno >= regno)
5661                     return 0;
5662                   if (incno < valueno + valuenregs && incno >= valueno)
5663                     return 0;
5664                   if (goal_mem_addr_varies
5665                       && reg_overlap_mentioned_for_reload_p (XEXP (link, 0),
5666                                                              goal))
5667                     return 0;
5668                 }
5669           }
5670 #endif
5671         }
5672     }
5673 }
5674 \f
5675 /* Find a place where INCED appears in an increment or decrement operator
5676    within X, and return the amount INCED is incremented or decremented by.
5677    The value is always positive.  */
5678
5679 static int
5680 find_inc_amount (x, inced)
5681      rtx x, inced;
5682 {
5683   register enum rtx_code code = GET_CODE (x);
5684   register char *fmt;
5685   register int i;
5686
5687   if (code == MEM)
5688     {
5689       register rtx addr = XEXP (x, 0);
5690       if ((GET_CODE (addr) == PRE_DEC
5691            || GET_CODE (addr) == POST_DEC
5692            || GET_CODE (addr) == PRE_INC
5693            || GET_CODE (addr) == POST_INC)
5694           && XEXP (addr, 0) == inced)
5695         return GET_MODE_SIZE (GET_MODE (x));
5696     }
5697
5698   fmt = GET_RTX_FORMAT (code);
5699   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
5700     {
5701       if (fmt[i] == 'e')
5702         {
5703           register int tem = find_inc_amount (XEXP (x, i), inced);
5704           if (tem != 0)
5705             return tem;
5706         }
5707       if (fmt[i] == 'E')
5708         {
5709           register int j;
5710           for (j = XVECLEN (x, i) - 1; j >= 0; j--)
5711             {
5712               register int tem = find_inc_amount (XVECEXP (x, i, j), inced);
5713               if (tem != 0)
5714                 return tem;
5715             }
5716         }
5717     }
5718
5719   return 0;
5720 }
5721 \f
5722 /* Return 1 if register REGNO is the subject of a clobber in insn INSN.  */
5723
5724 int
5725 regno_clobbered_p (regno, insn)
5726      int regno;
5727      rtx insn;
5728 {
5729   if (GET_CODE (PATTERN (insn)) == CLOBBER
5730       && GET_CODE (XEXP (PATTERN (insn), 0)) == REG)
5731     return REGNO (XEXP (PATTERN (insn), 0)) == regno;
5732
5733   if (GET_CODE (PATTERN (insn)) == PARALLEL)
5734     {
5735       int i = XVECLEN (PATTERN (insn), 0) - 1;
5736
5737       for (; i >= 0; i--)
5738         {
5739           rtx elt = XVECEXP (PATTERN (insn), 0, i);
5740           if (GET_CODE (elt) == CLOBBER && GET_CODE (XEXP (elt, 0)) == REG
5741               && REGNO (XEXP (elt, 0)) == regno)
5742             return 1;
5743         }
5744     }
5745
5746   return 0;
5747 }
5748
5749 static char *reload_when_needed_name[] =
5750 {
5751   "RELOAD_FOR_INPUT", 
5752   "RELOAD_FOR_OUTPUT", 
5753   "RELOAD_FOR_INSN",
5754   "RELOAD_FOR_INPUT_ADDRESS", 
5755   "RELOAD_FOR_OUTPUT_ADDRESS",
5756   "RELOAD_FOR_OPERAND_ADDRESS", 
5757   "RELOAD_FOR_OPADDR_ADDR",
5758   "RELOAD_OTHER", 
5759   "RELOAD_FOR_OTHER_ADDRESS"
5760 };
5761
5762 static char *reg_class_names[] = REG_CLASS_NAMES;
5763
5764 /* This function is used to print the variables set by 'find_reloads' */
5765
5766 void
5767 debug_reload()
5768 {
5769   int r;
5770
5771   fprintf (stderr, "\nn_reloads = %d\n", n_reloads);
5772
5773   for (r = 0; r < n_reloads; r++)
5774     {
5775       fprintf (stderr, "\nRELOAD %d\n", r);
5776
5777       if (reload_in[r])
5778         {
5779           fprintf (stderr, "\nreload_in (%s) = ",
5780                    GET_MODE_NAME (reload_inmode[r]));
5781           debug_rtx (reload_in[r]);
5782         }
5783
5784       if (reload_out[r])
5785         {
5786           fprintf (stderr, "\nreload_out (%s) = ",
5787                    GET_MODE_NAME (reload_outmode[r]));
5788           debug_rtx (reload_out[r]);
5789         }
5790
5791       fprintf (stderr, "%s, ", reg_class_names[(int) reload_reg_class[r]]);
5792
5793       fprintf (stderr, "%s (opnum = %d)",
5794                reload_when_needed_name[(int)reload_when_needed[r]],
5795                reload_opnum[r]);
5796
5797       if (reload_optional[r])
5798         fprintf (stderr, ", optional");
5799
5800       if (reload_in[r])
5801         fprintf (stderr, ", inc by %d\n", reload_inc[r]);
5802
5803       if (reload_nocombine[r])
5804         fprintf (stderr, ", can combine", reload_nocombine[r]);
5805
5806       if (reload_secondary_p[r])
5807         fprintf (stderr, ", secondary_reload_p");
5808
5809       if (reload_in_reg[r])
5810         {
5811           fprintf (stderr, "\nreload_in_reg:\t\t\t");
5812           debug_rtx (reload_in_reg[r]);
5813         }
5814
5815       if (reload_reg_rtx[r])
5816         {
5817           fprintf (stderr, "\nreload_reg_rtx:\t\t\t");
5818           debug_rtx (reload_reg_rtx[r]);
5819         }
5820
5821       if (reload_secondary_in_reload[r] != -1)
5822         {
5823           fprintf (stderr, "\nsecondary_in_reload = ");
5824           fprintf (stderr, "%d ", reload_secondary_in_reload[r]);
5825         }
5826
5827       if (reload_secondary_out_reload[r] != -1)
5828         {
5829           if (reload_secondary_in_reload[r] != -1)
5830             fprintf (stderr, ", secondary_out_reload = ");
5831           else
5832             fprintf (stderr, "\nsecondary_out_reload = ");
5833
5834           fprintf (stderr, "%d", reload_secondary_out_reload[r]);
5835         }
5836
5837
5838       if (reload_secondary_in_icode[r] != CODE_FOR_nothing)
5839         {
5840           fprintf (stderr, "\nsecondary_in_icode = ");
5841           fprintf (stderr, "%s", insn_name[r]);
5842         }
5843
5844       if (reload_secondary_out_icode[r] != CODE_FOR_nothing)
5845         {
5846           if (reload_secondary_in_icode[r] != CODE_FOR_nothing)
5847             fprintf (stderr, ", secondary_out_icode = ");
5848           else
5849             fprintf (stderr, "\nsecondary_out_icode = ");
5850
5851           fprintf (stderr, "%s ", insn_name[r]);
5852         }
5853       fprintf (stderr, "\n");
5854     }
5855
5856   fprintf (stderr, "\n");
5857 }