Create startup files from the GCC sources and drop our versions.
[dragonfly.git] / contrib / gcc-4.0 / gcc / reg-stack.c
1 /* Register to Stack convert for GNU compiler.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4
5    This file is part of GCC.
6
7    GCC is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    GCC is distributed in the hope that it will be useful, but WITHOUT
13    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15    License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GCC; see the file COPYING.  If not, write to the Free
19    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 /* This pass converts stack-like registers from the "flat register
23    file" model that gcc uses, to a stack convention that the 387 uses.
24
25    * The form of the input:
26
27    On input, the function consists of insn that have had their
28    registers fully allocated to a set of "virtual" registers.  Note that
29    the word "virtual" is used differently here than elsewhere in gcc: for
30    each virtual stack reg, there is a hard reg, but the mapping between
31    them is not known until this pass is run.  On output, hard register
32    numbers have been substituted, and various pop and exchange insns have
33    been emitted.  The hard register numbers and the virtual register
34    numbers completely overlap - before this pass, all stack register
35    numbers are virtual, and afterward they are all hard.
36
37    The virtual registers can be manipulated normally by gcc, and their
38    semantics are the same as for normal registers.  After the hard
39    register numbers are substituted, the semantics of an insn containing
40    stack-like regs are not the same as for an insn with normal regs: for
41    instance, it is not safe to delete an insn that appears to be a no-op
42    move.  In general, no insn containing hard regs should be changed
43    after this pass is done.
44
45    * The form of the output:
46
47    After this pass, hard register numbers represent the distance from
48    the current top of stack to the desired register.  A reference to
49    FIRST_STACK_REG references the top of stack, FIRST_STACK_REG + 1,
50    represents the register just below that, and so forth.  Also, REG_DEAD
51    notes indicate whether or not a stack register should be popped.
52
53    A "swap" insn looks like a parallel of two patterns, where each
54    pattern is a SET: one sets A to B, the other B to A.
55
56    A "push" or "load" insn is a SET whose SET_DEST is FIRST_STACK_REG
57    and whose SET_DEST is REG or MEM.  Any other SET_DEST, such as PLUS,
58    will replace the existing stack top, not push a new value.
59
60    A store insn is a SET whose SET_DEST is FIRST_STACK_REG, and whose
61    SET_SRC is REG or MEM.
62
63    The case where the SET_SRC and SET_DEST are both FIRST_STACK_REG
64    appears ambiguous.  As a special case, the presence of a REG_DEAD note
65    for FIRST_STACK_REG differentiates between a load insn and a pop.
66
67    If a REG_DEAD is present, the insn represents a "pop" that discards
68    the top of the register stack.  If there is no REG_DEAD note, then the
69    insn represents a "dup" or a push of the current top of stack onto the
70    stack.
71
72    * Methodology:
73
74    Existing REG_DEAD and REG_UNUSED notes for stack registers are
75    deleted and recreated from scratch.  REG_DEAD is never created for a
76    SET_DEST, only REG_UNUSED.
77
78    * asm_operands:
79
80    There are several rules on the usage of stack-like regs in
81    asm_operands insns.  These rules apply only to the operands that are
82    stack-like regs:
83
84    1. Given a set of input regs that die in an asm_operands, it is
85       necessary to know which are implicitly popped by the asm, and
86       which must be explicitly popped by gcc.
87
88         An input reg that is implicitly popped by the asm must be
89         explicitly clobbered, unless it is constrained to match an
90         output operand.
91
92    2. For any input reg that is implicitly popped by an asm, it is
93       necessary to know how to adjust the stack to compensate for the pop.
94       If any non-popped input is closer to the top of the reg-stack than
95       the implicitly popped reg, it would not be possible to know what the
96       stack looked like - it's not clear how the rest of the stack "slides
97       up".
98
99         All implicitly popped input regs must be closer to the top of
100         the reg-stack than any input that is not implicitly popped.
101
102    3. It is possible that if an input dies in an insn, reload might
103       use the input reg for an output reload.  Consider this example:
104
105                 asm ("foo" : "=t" (a) : "f" (b));
106
107       This asm says that input B is not popped by the asm, and that
108       the asm pushes a result onto the reg-stack, i.e., the stack is one
109       deeper after the asm than it was before.  But, it is possible that
110       reload will think that it can use the same reg for both the input and
111       the output, if input B dies in this insn.
112
113         If any input operand uses the "f" constraint, all output reg
114         constraints must use the "&" earlyclobber.
115
116       The asm above would be written as
117
118                 asm ("foo" : "=&t" (a) : "f" (b));
119
120    4. Some operands need to be in particular places on the stack.  All
121       output operands fall in this category - there is no other way to
122       know which regs the outputs appear in unless the user indicates
123       this in the constraints.
124
125         Output operands must specifically indicate which reg an output
126         appears in after an asm.  "=f" is not allowed: the operand
127         constraints must select a class with a single reg.
128
129    5. Output operands may not be "inserted" between existing stack regs.
130       Since no 387 opcode uses a read/write operand, all output operands
131       are dead before the asm_operands, and are pushed by the asm_operands.
132       It makes no sense to push anywhere but the top of the reg-stack.
133
134         Output operands must start at the top of the reg-stack: output
135         operands may not "skip" a reg.
136
137    6. Some asm statements may need extra stack space for internal
138       calculations.  This can be guaranteed by clobbering stack registers
139       unrelated to the inputs and outputs.
140
141    Here are a couple of reasonable asms to want to write.  This asm
142    takes one input, which is internally popped, and produces two outputs.
143
144         asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
145
146    This asm takes two inputs, which are popped by the fyl2xp1 opcode,
147    and replaces them with one output.  The user must code the "st(1)"
148    clobber for reg-stack.c to know that fyl2xp1 pops both inputs.
149
150         asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
151
152 */
153 \f
154 #include "config.h"
155 #include "system.h"
156 #include "coretypes.h"
157 #include "tm.h"
158 #include "tree.h"
159 #include "rtl.h"
160 #include "tm_p.h"
161 #include "function.h"
162 #include "insn-config.h"
163 #include "regs.h"
164 #include "hard-reg-set.h"
165 #include "flags.h"
166 #include "toplev.h"
167 #include "recog.h"
168 #include "output.h"
169 #include "basic-block.h"
170 #include "varray.h"
171 #include "reload.h"
172 #include "ggc.h"
173
174 /* We use this array to cache info about insns, because otherwise we
175    spend too much time in stack_regs_mentioned_p.
176
177    Indexed by insn UIDs.  A value of zero is uninitialized, one indicates
178    the insn uses stack registers, two indicates the insn does not use
179    stack registers.  */
180 static GTY(()) varray_type stack_regs_mentioned_data;
181
182 #ifdef STACK_REGS
183
184 #define REG_STACK_SIZE (LAST_STACK_REG - FIRST_STACK_REG + 1)
185
186 /* This is the basic stack record.  TOP is an index into REG[] such
187    that REG[TOP] is the top of stack.  If TOP is -1 the stack is empty.
188
189    If TOP is -2, REG[] is not yet initialized.  Stack initialization
190    consists of placing each live reg in array `reg' and setting `top'
191    appropriately.
192
193    REG_SET indicates which registers are live.  */
194
195 typedef struct stack_def
196 {
197   int top;                      /* index to top stack element */
198   HARD_REG_SET reg_set;         /* set of live registers */
199   unsigned char reg[REG_STACK_SIZE];/* register - stack mapping */
200 } *stack;
201
202 /* This is used to carry information about basic blocks.  It is
203    attached to the AUX field of the standard CFG block.  */
204
205 typedef struct block_info_def
206 {
207   struct stack_def stack_in;    /* Input stack configuration.  */
208   struct stack_def stack_out;   /* Output stack configuration.  */
209   HARD_REG_SET out_reg_set;     /* Stack regs live on output.  */
210   int done;                     /* True if block already converted.  */
211   int predecessors;             /* Number of predecessors that needs
212                                    to be visited.  */
213 } *block_info;
214
215 #define BLOCK_INFO(B)   ((block_info) (B)->aux)
216
217 /* Passed to change_stack to indicate where to emit insns.  */
218 enum emit_where
219 {
220   EMIT_AFTER,
221   EMIT_BEFORE
222 };
223
224 /* The block we're currently working on.  */
225 static basic_block current_block;
226
227 /* This is the register file for all register after conversion.  */
228 static rtx
229   FP_mode_reg[LAST_STACK_REG+1-FIRST_STACK_REG][(int) MAX_MACHINE_MODE];
230
231 #define FP_MODE_REG(regno,mode) \
232   (FP_mode_reg[(regno)-FIRST_STACK_REG][(int) (mode)])
233
234 /* Used to initialize uninitialized registers.  */
235 static rtx not_a_num;
236
237 /* Forward declarations */
238
239 static int stack_regs_mentioned_p (rtx pat);
240 static void straighten_stack (rtx, stack);
241 static void pop_stack (stack, int);
242 static rtx *get_true_reg (rtx *);
243
244 static int check_asm_stack_operands (rtx);
245 static int get_asm_operand_n_inputs (rtx);
246 static rtx stack_result (tree);
247 static void replace_reg (rtx *, int);
248 static void remove_regno_note (rtx, enum reg_note, unsigned int);
249 static int get_hard_regnum (stack, rtx);
250 static rtx emit_pop_insn (rtx, stack, rtx, enum emit_where);
251 static void emit_swap_insn (rtx, stack, rtx);
252 static void swap_to_top(rtx, stack, rtx, rtx);
253 static bool move_for_stack_reg (rtx, stack, rtx);
254 static bool move_nan_for_stack_reg (rtx, stack, rtx);
255 static int swap_rtx_condition_1 (rtx);
256 static int swap_rtx_condition (rtx);
257 static void compare_for_stack_reg (rtx, stack, rtx);
258 static bool subst_stack_regs_pat (rtx, stack, rtx);
259 static void subst_asm_stack_regs (rtx, stack);
260 static bool subst_stack_regs (rtx, stack);
261 static void change_stack (rtx, stack, stack, enum emit_where);
262 static int convert_regs_entry (void);
263 static void convert_regs_exit (void);
264 static int convert_regs_1 (FILE *, basic_block);
265 static int convert_regs_2 (FILE *, basic_block);
266 static int convert_regs (FILE *);
267 static void print_stack (FILE *, stack);
268 static rtx next_flags_user (rtx);
269 static bool compensate_edge (edge, FILE *);
270 \f
271 /* Return nonzero if any stack register is mentioned somewhere within PAT.  */
272
273 static int
274 stack_regs_mentioned_p (rtx pat)
275 {
276   const char *fmt;
277   int i;
278
279   if (STACK_REG_P (pat))
280     return 1;
281
282   fmt = GET_RTX_FORMAT (GET_CODE (pat));
283   for (i = GET_RTX_LENGTH (GET_CODE (pat)) - 1; i >= 0; i--)
284     {
285       if (fmt[i] == 'E')
286         {
287           int j;
288
289           for (j = XVECLEN (pat, i) - 1; j >= 0; j--)
290             if (stack_regs_mentioned_p (XVECEXP (pat, i, j)))
291               return 1;
292         }
293       else if (fmt[i] == 'e' && stack_regs_mentioned_p (XEXP (pat, i)))
294         return 1;
295     }
296
297   return 0;
298 }
299
300 /* Return nonzero if INSN mentions stacked registers, else return zero.  */
301
302 int
303 stack_regs_mentioned (rtx insn)
304 {
305   unsigned int uid, max;
306   int test;
307
308   if (! INSN_P (insn) || !stack_regs_mentioned_data)
309     return 0;
310
311   uid = INSN_UID (insn);
312   max = VARRAY_SIZE (stack_regs_mentioned_data);
313   if (uid >= max)
314     {
315       /* Allocate some extra size to avoid too many reallocs, but
316          do not grow too quickly.  */
317       max = uid + uid / 20;
318       VARRAY_GROW (stack_regs_mentioned_data, max);
319     }
320
321   test = VARRAY_CHAR (stack_regs_mentioned_data, uid);
322   if (test == 0)
323     {
324       /* This insn has yet to be examined.  Do so now.  */
325       test = stack_regs_mentioned_p (PATTERN (insn)) ? 1 : 2;
326       VARRAY_CHAR (stack_regs_mentioned_data, uid) = test;
327     }
328
329   return test == 1;
330 }
331 \f
332 static rtx ix86_flags_rtx;
333
334 static rtx
335 next_flags_user (rtx insn)
336 {
337   /* Search forward looking for the first use of this value.
338      Stop at block boundaries.  */
339
340   while (insn != BB_END (current_block))
341     {
342       insn = NEXT_INSN (insn);
343
344       if (INSN_P (insn) && reg_mentioned_p (ix86_flags_rtx, PATTERN (insn)))
345         return insn;
346
347       if (CALL_P (insn))
348         return NULL_RTX;
349     }
350   return NULL_RTX;
351 }
352 \f
353 /* Reorganize the stack into ascending numbers,
354    after this insn.  */
355
356 static void
357 straighten_stack (rtx insn, stack regstack)
358 {
359   struct stack_def temp_stack;
360   int top;
361
362   /* If there is only a single register on the stack, then the stack is
363      already in increasing order and no reorganization is needed.
364
365      Similarly if the stack is empty.  */
366   if (regstack->top <= 0)
367     return;
368
369   COPY_HARD_REG_SET (temp_stack.reg_set, regstack->reg_set);
370
371   for (top = temp_stack.top = regstack->top; top >= 0; top--)
372     temp_stack.reg[top] = FIRST_STACK_REG + temp_stack.top - top;
373
374   change_stack (insn, regstack, &temp_stack, EMIT_AFTER);
375 }
376
377 /* Pop a register from the stack.  */
378
379 static void
380 pop_stack (stack regstack, int regno)
381 {
382   int top = regstack->top;
383
384   CLEAR_HARD_REG_BIT (regstack->reg_set, regno);
385   regstack->top--;
386   /* If regno was not at the top of stack then adjust stack.  */
387   if (regstack->reg [top] != regno)
388     {
389       int i;
390       for (i = regstack->top; i >= 0; i--)
391         if (regstack->reg [i] == regno)
392           {
393             int j;
394             for (j = i; j < top; j++)
395               regstack->reg [j] = regstack->reg [j + 1];
396             break;
397           }
398     }
399 }
400 \f
401 /* Convert register usage from "flat" register file usage to a "stack
402    register file.  FILE is the dump file, if used.
403
404    Construct a CFG and run life analysis.  Then convert each insn one
405    by one.  Run a last cleanup_cfg pass, if optimizing, to eliminate
406    code duplication created when the converter inserts pop insns on
407    the edges.  */
408
409 bool
410 reg_to_stack (FILE *file)
411 {
412   basic_block bb;
413   int i;
414   int max_uid;
415
416   /* Clean up previous run.  */
417   stack_regs_mentioned_data = 0;
418
419   /* See if there is something to do.  Flow analysis is quite
420      expensive so we might save some compilation time.  */
421   for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
422     if (regs_ever_live[i])
423       break;
424   if (i > LAST_STACK_REG)
425     return false;
426
427   /* Ok, floating point instructions exist.  If not optimizing,
428      build the CFG and run life analysis.
429      Also need to rebuild life when superblock scheduling is done
430      as it don't update liveness yet.  */
431   if (!optimize
432       || (flag_sched2_use_superblocks
433           && flag_schedule_insns_after_reload))
434     {
435       count_or_remove_death_notes (NULL, 1);
436       life_analysis (file, PROP_DEATH_NOTES);
437     }
438   mark_dfs_back_edges ();
439
440   /* Set up block info for each basic block.  */
441   alloc_aux_for_blocks (sizeof (struct block_info_def));
442   FOR_EACH_BB_REVERSE (bb)
443     {
444       edge e;
445       edge_iterator ei;
446
447       FOR_EACH_EDGE (e, ei, bb->preds)
448         if (!(e->flags & EDGE_DFS_BACK)
449             && e->src != ENTRY_BLOCK_PTR)
450           BLOCK_INFO (bb)->predecessors++;
451     }
452
453   /* Create the replacement registers up front.  */
454   for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
455     {
456       enum machine_mode mode;
457       for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
458            mode != VOIDmode;
459            mode = GET_MODE_WIDER_MODE (mode))
460         FP_MODE_REG (i, mode) = gen_rtx_REG (mode, i);
461       for (mode = GET_CLASS_NARROWEST_MODE (MODE_COMPLEX_FLOAT);
462            mode != VOIDmode;
463            mode = GET_MODE_WIDER_MODE (mode))
464         FP_MODE_REG (i, mode) = gen_rtx_REG (mode, i);
465     }
466
467   ix86_flags_rtx = gen_rtx_REG (CCmode, FLAGS_REG);
468
469   /* A QNaN for initializing uninitialized variables.
470
471      ??? We can't load from constant memory in PIC mode, because
472      we're inserting these instructions before the prologue and
473      the PIC register hasn't been set up.  In that case, fall back
474      on zero, which we can get from `ldz'.  */
475
476   if (flag_pic)
477     not_a_num = CONST0_RTX (SFmode);
478   else
479     {
480       not_a_num = gen_lowpart (SFmode, GEN_INT (0x7fc00000));
481       not_a_num = force_const_mem (SFmode, not_a_num);
482     }
483
484   /* Allocate a cache for stack_regs_mentioned.  */
485   max_uid = get_max_uid ();
486   VARRAY_CHAR_INIT (stack_regs_mentioned_data, max_uid + 1,
487                     "stack_regs_mentioned cache");
488
489   convert_regs (file);
490
491   free_aux_for_blocks ();
492   return true;
493 }
494
495 \f
496 /* Return a pointer to the REG expression within PAT.  If PAT is not a
497    REG, possible enclosed by a conversion rtx, return the inner part of
498    PAT that stopped the search.  */
499
500 static rtx *
501 get_true_reg (rtx *pat)
502 {
503   for (;;)
504     switch (GET_CODE (*pat))
505       {
506       case SUBREG:
507         /* Eliminate FP subregister accesses in favor of the
508            actual FP register in use.  */
509         {
510           rtx subreg;
511           if (FP_REG_P (subreg = SUBREG_REG (*pat)))
512             {
513               int regno_off = subreg_regno_offset (REGNO (subreg),
514                                                    GET_MODE (subreg),
515                                                    SUBREG_BYTE (*pat),
516                                                    GET_MODE (*pat));
517               *pat = FP_MODE_REG (REGNO (subreg) + regno_off,
518                                   GET_MODE (subreg));
519             default:
520               return pat;
521             }
522         }
523       case FLOAT:
524       case FIX:
525       case FLOAT_EXTEND:
526         pat = & XEXP (*pat, 0);
527         break;
528
529       case FLOAT_TRUNCATE:
530         if (!flag_unsafe_math_optimizations)
531           return pat;
532         pat = & XEXP (*pat, 0);
533         break;
534       }
535 }
536 \f
537 /* Set if we find any malformed asms in a block.  */
538 static bool any_malformed_asm;
539
540 /* There are many rules that an asm statement for stack-like regs must
541    follow.  Those rules are explained at the top of this file: the rule
542    numbers below refer to that explanation.  */
543
544 static int
545 check_asm_stack_operands (rtx insn)
546 {
547   int i;
548   int n_clobbers;
549   int malformed_asm = 0;
550   rtx body = PATTERN (insn);
551
552   char reg_used_as_output[FIRST_PSEUDO_REGISTER];
553   char implicitly_dies[FIRST_PSEUDO_REGISTER];
554   int alt;
555
556   rtx *clobber_reg = 0;
557   int n_inputs, n_outputs;
558
559   /* Find out what the constraints require.  If no constraint
560      alternative matches, this asm is malformed.  */
561   extract_insn (insn);
562   constrain_operands (1);
563   alt = which_alternative;
564
565   preprocess_constraints ();
566
567   n_inputs = get_asm_operand_n_inputs (body);
568   n_outputs = recog_data.n_operands - n_inputs;
569
570   if (alt < 0)
571     {
572       malformed_asm = 1;
573       /* Avoid further trouble with this insn.  */
574       PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
575       return 0;
576     }
577
578   /* Strip SUBREGs here to make the following code simpler.  */
579   for (i = 0; i < recog_data.n_operands; i++)
580     if (GET_CODE (recog_data.operand[i]) == SUBREG
581         && REG_P (SUBREG_REG (recog_data.operand[i])))
582       recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]);
583
584   /* Set up CLOBBER_REG.  */
585
586   n_clobbers = 0;
587
588   if (GET_CODE (body) == PARALLEL)
589     {
590       clobber_reg = alloca (XVECLEN (body, 0) * sizeof (rtx));
591
592       for (i = 0; i < XVECLEN (body, 0); i++)
593         if (GET_CODE (XVECEXP (body, 0, i)) == CLOBBER)
594           {
595             rtx clobber = XVECEXP (body, 0, i);
596             rtx reg = XEXP (clobber, 0);
597
598             if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
599               reg = SUBREG_REG (reg);
600
601             if (STACK_REG_P (reg))
602               {
603                 clobber_reg[n_clobbers] = reg;
604                 n_clobbers++;
605               }
606           }
607     }
608
609   /* Enforce rule #4: Output operands must specifically indicate which
610      reg an output appears in after an asm.  "=f" is not allowed: the
611      operand constraints must select a class with a single reg.
612
613      Also enforce rule #5: Output operands must start at the top of
614      the reg-stack: output operands may not "skip" a reg.  */
615
616   memset (reg_used_as_output, 0, sizeof (reg_used_as_output));
617   for (i = 0; i < n_outputs; i++)
618     if (STACK_REG_P (recog_data.operand[i]))
619       {
620         if (reg_class_size[(int) recog_op_alt[i][alt].cl] != 1)
621           {
622             error_for_asm (insn, "output constraint %d must specify a single register", i);
623             malformed_asm = 1;
624           }
625         else
626           {
627             int j;
628
629             for (j = 0; j < n_clobbers; j++)
630               if (REGNO (recog_data.operand[i]) == REGNO (clobber_reg[j]))
631                 {
632                   error_for_asm (insn, "output constraint %d cannot be specified together with \"%s\" clobber",
633                                  i, reg_names [REGNO (clobber_reg[j])]);
634                   malformed_asm = 1;
635                   break;
636                 }
637             if (j == n_clobbers)
638               reg_used_as_output[REGNO (recog_data.operand[i])] = 1;
639           }
640       }
641
642
643   /* Search for first non-popped reg.  */
644   for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++)
645     if (! reg_used_as_output[i])
646       break;
647
648   /* If there are any other popped regs, that's an error.  */
649   for (; i < LAST_STACK_REG + 1; i++)
650     if (reg_used_as_output[i])
651       break;
652
653   if (i != LAST_STACK_REG + 1)
654     {
655       error_for_asm (insn, "output regs must be grouped at top of stack");
656       malformed_asm = 1;
657     }
658
659   /* Enforce rule #2: All implicitly popped input regs must be closer
660      to the top of the reg-stack than any input that is not implicitly
661      popped.  */
662
663   memset (implicitly_dies, 0, sizeof (implicitly_dies));
664   for (i = n_outputs; i < n_outputs + n_inputs; i++)
665     if (STACK_REG_P (recog_data.operand[i]))
666       {
667         /* An input reg is implicitly popped if it is tied to an
668            output, or if there is a CLOBBER for it.  */
669         int j;
670
671         for (j = 0; j < n_clobbers; j++)
672           if (operands_match_p (clobber_reg[j], recog_data.operand[i]))
673             break;
674
675         if (j < n_clobbers || recog_op_alt[i][alt].matches >= 0)
676           implicitly_dies[REGNO (recog_data.operand[i])] = 1;
677       }
678
679   /* Search for first non-popped reg.  */
680   for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++)
681     if (! implicitly_dies[i])
682       break;
683
684   /* If there are any other popped regs, that's an error.  */
685   for (; i < LAST_STACK_REG + 1; i++)
686     if (implicitly_dies[i])
687       break;
688
689   if (i != LAST_STACK_REG + 1)
690     {
691       error_for_asm (insn,
692                      "implicitly popped regs must be grouped at top of stack");
693       malformed_asm = 1;
694     }
695
696   /* Enforce rule #3: If any input operand uses the "f" constraint, all
697      output constraints must use the "&" earlyclobber.
698
699      ??? Detect this more deterministically by having constrain_asm_operands
700      record any earlyclobber.  */
701
702   for (i = n_outputs; i < n_outputs + n_inputs; i++)
703     if (recog_op_alt[i][alt].matches == -1)
704       {
705         int j;
706
707         for (j = 0; j < n_outputs; j++)
708           if (operands_match_p (recog_data.operand[j], recog_data.operand[i]))
709             {
710               error_for_asm (insn,
711                              "output operand %d must use %<&%> constraint", j);
712               malformed_asm = 1;
713             }
714       }
715
716   if (malformed_asm)
717     {
718       /* Avoid further trouble with this insn.  */
719       PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
720       any_malformed_asm = true;
721       return 0;
722     }
723
724   return 1;
725 }
726 \f
727 /* Calculate the number of inputs and outputs in BODY, an
728    asm_operands.  N_OPERANDS is the total number of operands, and
729    N_INPUTS and N_OUTPUTS are pointers to ints into which the results are
730    placed.  */
731
732 static int
733 get_asm_operand_n_inputs (rtx body)
734 {
735   switch (GET_CODE (body))
736     {
737     case SET:
738       gcc_assert (GET_CODE (SET_SRC (body)) == ASM_OPERANDS);
739       return ASM_OPERANDS_INPUT_LENGTH (SET_SRC (body));
740       
741     case ASM_OPERANDS:
742       return ASM_OPERANDS_INPUT_LENGTH (body);
743       
744     case PARALLEL:
745       return get_asm_operand_n_inputs (XVECEXP (body, 0, 0));
746       
747     default:
748       gcc_unreachable ();
749     }
750 }
751
752 /* If current function returns its result in an fp stack register,
753    return the REG.  Otherwise, return 0.  */
754
755 static rtx
756 stack_result (tree decl)
757 {
758   rtx result;
759
760   /* If the value is supposed to be returned in memory, then clearly
761      it is not returned in a stack register.  */
762   if (aggregate_value_p (DECL_RESULT (decl), decl))
763     return 0;
764
765   result = DECL_RTL_IF_SET (DECL_RESULT (decl));
766   if (result != 0)
767     {
768 #ifdef FUNCTION_OUTGOING_VALUE
769       result
770         = FUNCTION_OUTGOING_VALUE (TREE_TYPE (DECL_RESULT (decl)), decl);
771 #else
772       result = FUNCTION_VALUE (TREE_TYPE (DECL_RESULT (decl)), decl);
773 #endif
774     }
775
776   return result != 0 && STACK_REG_P (result) ? result : 0;
777 }
778 \f
779
780 /*
781  * This section deals with stack register substitution, and forms the second
782  * pass over the RTL.
783  */
784
785 /* Replace REG, which is a pointer to a stack reg RTX, with an RTX for
786    the desired hard REGNO.  */
787
788 static void
789 replace_reg (rtx *reg, int regno)
790 {
791   gcc_assert (regno >= FIRST_STACK_REG);
792   gcc_assert (regno <= LAST_STACK_REG);
793   gcc_assert (STACK_REG_P (*reg));
794
795   gcc_assert (GET_MODE_CLASS (GET_MODE (*reg)) == MODE_FLOAT
796               || GET_MODE_CLASS (GET_MODE (*reg)) == MODE_COMPLEX_FLOAT);
797
798   *reg = FP_MODE_REG (regno, GET_MODE (*reg));
799 }
800
801 /* Remove a note of type NOTE, which must be found, for register
802    number REGNO from INSN.  Remove only one such note.  */
803
804 static void
805 remove_regno_note (rtx insn, enum reg_note note, unsigned int regno)
806 {
807   rtx *note_link, this;
808
809   note_link = &REG_NOTES (insn);
810   for (this = *note_link; this; this = XEXP (this, 1))
811     if (REG_NOTE_KIND (this) == note
812         && REG_P (XEXP (this, 0)) && REGNO (XEXP (this, 0)) == regno)
813       {
814         *note_link = XEXP (this, 1);
815         return;
816       }
817     else
818       note_link = &XEXP (this, 1);
819
820   gcc_unreachable ();
821 }
822
823 /* Find the hard register number of virtual register REG in REGSTACK.
824    The hard register number is relative to the top of the stack.  -1 is
825    returned if the register is not found.  */
826
827 static int
828 get_hard_regnum (stack regstack, rtx reg)
829 {
830   int i;
831
832   gcc_assert (STACK_REG_P (reg));
833
834   for (i = regstack->top; i >= 0; i--)
835     if (regstack->reg[i] == REGNO (reg))
836       break;
837
838   return i >= 0 ? (FIRST_STACK_REG + regstack->top - i) : -1;
839 }
840 \f
841 /* Emit an insn to pop virtual register REG before or after INSN.
842    REGSTACK is the stack state after INSN and is updated to reflect this
843    pop.  WHEN is either emit_insn_before or emit_insn_after.  A pop insn
844    is represented as a SET whose destination is the register to be popped
845    and source is the top of stack.  A death note for the top of stack
846    cases the movdf pattern to pop.  */
847
848 static rtx
849 emit_pop_insn (rtx insn, stack regstack, rtx reg, enum emit_where where)
850 {
851   rtx pop_insn, pop_rtx;
852   int hard_regno;
853
854   /* For complex types take care to pop both halves.  These may survive in
855      CLOBBER and USE expressions.  */
856   if (COMPLEX_MODE_P (GET_MODE (reg)))
857     {
858       rtx reg1 = FP_MODE_REG (REGNO (reg), DFmode);
859       rtx reg2 = FP_MODE_REG (REGNO (reg) + 1, DFmode);
860
861       pop_insn = NULL_RTX;
862       if (get_hard_regnum (regstack, reg1) >= 0)
863         pop_insn = emit_pop_insn (insn, regstack, reg1, where);
864       if (get_hard_regnum (regstack, reg2) >= 0)
865         pop_insn = emit_pop_insn (insn, regstack, reg2, where);
866       gcc_assert (pop_insn);
867       return pop_insn;
868     }
869
870   hard_regno = get_hard_regnum (regstack, reg);
871
872   gcc_assert (hard_regno >= FIRST_STACK_REG);
873
874   pop_rtx = gen_rtx_SET (VOIDmode, FP_MODE_REG (hard_regno, DFmode),
875                          FP_MODE_REG (FIRST_STACK_REG, DFmode));
876
877   if (where == EMIT_AFTER)
878     pop_insn = emit_insn_after (pop_rtx, insn);
879   else
880     pop_insn = emit_insn_before (pop_rtx, insn);
881
882   REG_NOTES (pop_insn)
883     = gen_rtx_EXPR_LIST (REG_DEAD, FP_MODE_REG (FIRST_STACK_REG, DFmode),
884                          REG_NOTES (pop_insn));
885
886   regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)]
887     = regstack->reg[regstack->top];
888   regstack->top -= 1;
889   CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (reg));
890
891   return pop_insn;
892 }
893 \f
894 /* Emit an insn before or after INSN to swap virtual register REG with
895    the top of stack.  REGSTACK is the stack state before the swap, and
896    is updated to reflect the swap.  A swap insn is represented as a
897    PARALLEL of two patterns: each pattern moves one reg to the other.
898
899    If REG is already at the top of the stack, no insn is emitted.  */
900
901 static void
902 emit_swap_insn (rtx insn, stack regstack, rtx reg)
903 {
904   int hard_regno;
905   rtx swap_rtx;
906   int tmp, other_reg;           /* swap regno temps */
907   rtx i1;                       /* the stack-reg insn prior to INSN */
908   rtx i1set = NULL_RTX;         /* the SET rtx within I1 */
909
910   hard_regno = get_hard_regnum (regstack, reg);
911
912   gcc_assert (hard_regno >= FIRST_STACK_REG);
913   if (hard_regno == FIRST_STACK_REG)
914     return;
915
916   other_reg = regstack->top - (hard_regno - FIRST_STACK_REG);
917
918   tmp = regstack->reg[other_reg];
919   regstack->reg[other_reg] = regstack->reg[regstack->top];
920   regstack->reg[regstack->top] = tmp;
921
922   /* Find the previous insn involving stack regs, but don't pass a
923      block boundary.  */
924   i1 = NULL;
925   if (current_block && insn != BB_HEAD (current_block))
926     {
927       rtx tmp = PREV_INSN (insn);
928       rtx limit = PREV_INSN (BB_HEAD (current_block));
929       while (tmp != limit)
930         {
931           if (LABEL_P (tmp)
932               || CALL_P (tmp)
933               || NOTE_INSN_BASIC_BLOCK_P (tmp)
934               || (NOTE_P (tmp)
935                   && NOTE_LINE_NUMBER (tmp) == NOTE_INSN_UNLIKELY_EXECUTED_CODE)
936               || (NONJUMP_INSN_P (tmp)
937                   && stack_regs_mentioned (tmp)))
938             {
939               i1 = tmp;
940               break;
941             }
942           tmp = PREV_INSN (tmp);
943         }
944     }
945
946   if (i1 != NULL_RTX
947       && (i1set = single_set (i1)) != NULL_RTX)
948     {
949       rtx i1src = *get_true_reg (&SET_SRC (i1set));
950       rtx i1dest = *get_true_reg (&SET_DEST (i1set));
951
952       /* If the previous register stack push was from the reg we are to
953          swap with, omit the swap.  */
954
955       if (REG_P (i1dest) && REGNO (i1dest) == FIRST_STACK_REG
956           && REG_P (i1src)
957           && REGNO (i1src) == (unsigned) hard_regno - 1
958           && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX)
959         return;
960
961       /* If the previous insn wrote to the reg we are to swap with,
962          omit the swap.  */
963
964       if (REG_P (i1dest) && REGNO (i1dest) == (unsigned) hard_regno
965           && REG_P (i1src) && REGNO (i1src) == FIRST_STACK_REG
966           && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX)
967         return;
968     }
969
970   swap_rtx = gen_swapxf (FP_MODE_REG (hard_regno, XFmode),
971                          FP_MODE_REG (FIRST_STACK_REG, XFmode));
972
973   if (i1)
974     emit_insn_after (swap_rtx, i1);
975   else if (current_block)
976     emit_insn_before (swap_rtx, BB_HEAD (current_block));
977   else
978     emit_insn_before (swap_rtx, insn);
979 }
980 \f
981 /* Emit an insns before INSN to swap virtual register SRC1 with
982    the top of stack and virtual register SRC2 with second stack
983    slot. REGSTACK is the stack state before the swaps, and
984    is updated to reflect the swaps.  A swap insn is represented as a
985    PARALLEL of two patterns: each pattern moves one reg to the other.
986
987    If SRC1 and/or SRC2 are already at the right place, no swap insn
988    is emitted.  */
989
990 static void
991 swap_to_top (rtx insn, stack regstack, rtx src1, rtx src2)
992 {
993   struct stack_def temp_stack;
994   int regno, j, k, temp;
995
996   temp_stack = *regstack;
997
998   /* Place operand 1 at the top of stack.  */
999   regno = get_hard_regnum (&temp_stack, src1);
1000   gcc_assert (regno >= 0);
1001   if (regno != FIRST_STACK_REG)
1002     {
1003       k = temp_stack.top - (regno - FIRST_STACK_REG);
1004       j = temp_stack.top;
1005
1006       temp = temp_stack.reg[k];
1007       temp_stack.reg[k] = temp_stack.reg[j];
1008       temp_stack.reg[j] = temp;
1009     }
1010
1011   /* Place operand 2 next on the stack.  */
1012   regno = get_hard_regnum (&temp_stack, src2);
1013   gcc_assert (regno >= 0);
1014   if (regno != FIRST_STACK_REG + 1)
1015     {
1016       k = temp_stack.top - (regno - FIRST_STACK_REG);
1017       j = temp_stack.top - 1;
1018
1019       temp = temp_stack.reg[k];
1020       temp_stack.reg[k] = temp_stack.reg[j];
1021       temp_stack.reg[j] = temp;
1022     }
1023
1024   change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
1025 }
1026 \f
1027 /* Handle a move to or from a stack register in PAT, which is in INSN.
1028    REGSTACK is the current stack.  Return whether a control flow insn
1029    was deleted in the process.  */
1030
1031 static bool
1032 move_for_stack_reg (rtx insn, stack regstack, rtx pat)
1033 {
1034   rtx *psrc =  get_true_reg (&SET_SRC (pat));
1035   rtx *pdest = get_true_reg (&SET_DEST (pat));
1036   rtx src, dest;
1037   rtx note;
1038   bool control_flow_insn_deleted = false;
1039
1040   src = *psrc; dest = *pdest;
1041
1042   if (STACK_REG_P (src) && STACK_REG_P (dest))
1043     {
1044       /* Write from one stack reg to another.  If SRC dies here, then
1045          just change the register mapping and delete the insn.  */
1046
1047       note = find_regno_note (insn, REG_DEAD, REGNO (src));
1048       if (note)
1049         {
1050           int i;
1051
1052           /* If this is a no-op move, there must not be a REG_DEAD note.  */
1053           gcc_assert (REGNO (src) != REGNO (dest));
1054
1055           for (i = regstack->top; i >= 0; i--)
1056             if (regstack->reg[i] == REGNO (src))
1057               break;
1058
1059           /* The destination must be dead, or life analysis is borked.  */
1060           gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG);
1061
1062           /* If the source is not live, this is yet another case of
1063              uninitialized variables.  Load up a NaN instead.  */
1064           if (i < 0)
1065             return move_nan_for_stack_reg (insn, regstack, dest);
1066
1067           /* It is possible that the dest is unused after this insn.
1068              If so, just pop the src.  */
1069
1070           if (find_regno_note (insn, REG_UNUSED, REGNO (dest)))
1071             emit_pop_insn (insn, regstack, src, EMIT_AFTER);
1072           else
1073             {
1074               regstack->reg[i] = REGNO (dest);
1075               SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest));
1076               CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src));
1077             }
1078
1079           control_flow_insn_deleted |= control_flow_insn_p (insn);
1080           delete_insn (insn);
1081           return control_flow_insn_deleted;
1082         }
1083
1084       /* The source reg does not die.  */
1085
1086       /* If this appears to be a no-op move, delete it, or else it
1087          will confuse the machine description output patterns. But if
1088          it is REG_UNUSED, we must pop the reg now, as per-insn processing
1089          for REG_UNUSED will not work for deleted insns.  */
1090
1091       if (REGNO (src) == REGNO (dest))
1092         {
1093           if (find_regno_note (insn, REG_UNUSED, REGNO (dest)))
1094             emit_pop_insn (insn, regstack, dest, EMIT_AFTER);
1095
1096           control_flow_insn_deleted |= control_flow_insn_p (insn);
1097           delete_insn (insn);
1098           return control_flow_insn_deleted;
1099         }
1100
1101       /* The destination ought to be dead.  */
1102       gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG);
1103
1104       replace_reg (psrc, get_hard_regnum (regstack, src));
1105
1106       regstack->reg[++regstack->top] = REGNO (dest);
1107       SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest));
1108       replace_reg (pdest, FIRST_STACK_REG);
1109     }
1110   else if (STACK_REG_P (src))
1111     {
1112       /* Save from a stack reg to MEM, or possibly integer reg.  Since
1113          only top of stack may be saved, emit an exchange first if
1114          needs be.  */
1115
1116       emit_swap_insn (insn, regstack, src);
1117
1118       note = find_regno_note (insn, REG_DEAD, REGNO (src));
1119       if (note)
1120         {
1121           replace_reg (&XEXP (note, 0), FIRST_STACK_REG);
1122           regstack->top--;
1123           CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src));
1124         }
1125       else if ((GET_MODE (src) == XFmode)
1126                && regstack->top < REG_STACK_SIZE - 1)
1127         {
1128           /* A 387 cannot write an XFmode value to a MEM without
1129              clobbering the source reg.  The output code can handle
1130              this by reading back the value from the MEM.
1131              But it is more efficient to use a temp register if one is
1132              available.  Push the source value here if the register
1133              stack is not full, and then write the value to memory via
1134              a pop.  */
1135           rtx push_rtx, push_insn;
1136           rtx top_stack_reg = FP_MODE_REG (FIRST_STACK_REG, GET_MODE (src));
1137
1138           push_rtx = gen_movxf (top_stack_reg, top_stack_reg);
1139           push_insn = emit_insn_before (push_rtx, insn);
1140           REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_DEAD, top_stack_reg,
1141                                                 REG_NOTES (insn));
1142         }
1143
1144       replace_reg (psrc, FIRST_STACK_REG);
1145     }
1146   else
1147     {
1148       gcc_assert (STACK_REG_P (dest));
1149
1150       /* Load from MEM, or possibly integer REG or constant, into the
1151          stack regs.  The actual target is always the top of the
1152          stack. The stack mapping is changed to reflect that DEST is
1153          now at top of stack.  */
1154
1155       /* The destination ought to be dead.  */
1156       gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG);
1157
1158       gcc_assert (regstack->top < REG_STACK_SIZE);
1159
1160       regstack->reg[++regstack->top] = REGNO (dest);
1161       SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest));
1162       replace_reg (pdest, FIRST_STACK_REG);
1163     }
1164
1165   return control_flow_insn_deleted;
1166 }
1167
1168 /* A helper function which replaces INSN with a pattern that loads up
1169    a NaN into DEST, then invokes move_for_stack_reg.  */
1170
1171 static bool
1172 move_nan_for_stack_reg (rtx insn, stack regstack, rtx dest)
1173 {
1174   rtx pat;
1175
1176   dest = FP_MODE_REG (REGNO (dest), SFmode);
1177   pat = gen_rtx_SET (VOIDmode, dest, not_a_num);
1178   PATTERN (insn) = pat;
1179   INSN_CODE (insn) = -1;
1180
1181   return move_for_stack_reg (insn, regstack, pat);
1182 }
1183 \f
1184 /* Swap the condition on a branch, if there is one.  Return true if we
1185    found a condition to swap.  False if the condition was not used as
1186    such.  */
1187
1188 static int
1189 swap_rtx_condition_1 (rtx pat)
1190 {
1191   const char *fmt;
1192   int i, r = 0;
1193
1194   if (COMPARISON_P (pat))
1195     {
1196       PUT_CODE (pat, swap_condition (GET_CODE (pat)));
1197       r = 1;
1198     }
1199   else
1200     {
1201       fmt = GET_RTX_FORMAT (GET_CODE (pat));
1202       for (i = GET_RTX_LENGTH (GET_CODE (pat)) - 1; i >= 0; i--)
1203         {
1204           if (fmt[i] == 'E')
1205             {
1206               int j;
1207
1208               for (j = XVECLEN (pat, i) - 1; j >= 0; j--)
1209                 r |= swap_rtx_condition_1 (XVECEXP (pat, i, j));
1210             }
1211           else if (fmt[i] == 'e')
1212             r |= swap_rtx_condition_1 (XEXP (pat, i));
1213         }
1214     }
1215
1216   return r;
1217 }
1218
1219 static int
1220 swap_rtx_condition (rtx insn)
1221 {
1222   rtx pat = PATTERN (insn);
1223
1224   /* We're looking for a single set to cc0 or an HImode temporary.  */
1225
1226   if (GET_CODE (pat) == SET
1227       && REG_P (SET_DEST (pat))
1228       && REGNO (SET_DEST (pat)) == FLAGS_REG)
1229     {
1230       insn = next_flags_user (insn);
1231       if (insn == NULL_RTX)
1232         return 0;
1233       pat = PATTERN (insn);
1234     }
1235
1236   /* See if this is, or ends in, a fnstsw.  If so, we're not doing anything
1237      with the cc value right now.  We may be able to search for one
1238      though.  */
1239
1240   if (GET_CODE (pat) == SET
1241       && GET_CODE (SET_SRC (pat)) == UNSPEC
1242       && XINT (SET_SRC (pat), 1) == UNSPEC_FNSTSW)
1243     {
1244       rtx dest = SET_DEST (pat);
1245
1246       /* Search forward looking for the first use of this value.
1247          Stop at block boundaries.  */
1248       while (insn != BB_END (current_block))
1249         {
1250           insn = NEXT_INSN (insn);
1251           if (INSN_P (insn) && reg_mentioned_p (dest, insn))
1252             break;
1253           if (CALL_P (insn))
1254             return 0;
1255         }
1256
1257       /* We haven't found it.  */
1258       if (insn == BB_END (current_block))
1259         return 0;
1260
1261       /* So we've found the insn using this value.  If it is anything
1262          other than sahf or the value does not die (meaning we'd have
1263          to search further), then we must give up.  */
1264       pat = PATTERN (insn);
1265       if (GET_CODE (pat) != SET
1266           || GET_CODE (SET_SRC (pat)) != UNSPEC
1267           || XINT (SET_SRC (pat), 1) != UNSPEC_SAHF
1268           || ! dead_or_set_p (insn, dest))
1269         return 0;
1270
1271       /* Now we are prepared to handle this as a normal cc0 setter.  */
1272       insn = next_flags_user (insn);
1273       if (insn == NULL_RTX)
1274         return 0;
1275       pat = PATTERN (insn);
1276     }
1277
1278   if (swap_rtx_condition_1 (pat))
1279     {
1280       int fail = 0;
1281       INSN_CODE (insn) = -1;
1282       if (recog_memoized (insn) == -1)
1283         fail = 1;
1284       /* In case the flags don't die here, recurse to try fix
1285          following user too.  */
1286       else if (! dead_or_set_p (insn, ix86_flags_rtx))
1287         {
1288           insn = next_flags_user (insn);
1289           if (!insn || !swap_rtx_condition (insn))
1290             fail = 1;
1291         }
1292       if (fail)
1293         {
1294           swap_rtx_condition_1 (pat);
1295           return 0;
1296         }
1297       return 1;
1298     }
1299   return 0;
1300 }
1301
1302 /* Handle a comparison.  Special care needs to be taken to avoid
1303    causing comparisons that a 387 cannot do correctly, such as EQ.
1304
1305    Also, a pop insn may need to be emitted.  The 387 does have an
1306    `fcompp' insn that can pop two regs, but it is sometimes too expensive
1307    to do this - a `fcomp' followed by a `fstpl %st(0)' may be easier to
1308    set up.  */
1309
1310 static void
1311 compare_for_stack_reg (rtx insn, stack regstack, rtx pat_src)
1312 {
1313   rtx *src1, *src2;
1314   rtx src1_note, src2_note;
1315   rtx flags_user;
1316
1317   src1 = get_true_reg (&XEXP (pat_src, 0));
1318   src2 = get_true_reg (&XEXP (pat_src, 1));
1319   flags_user = next_flags_user (insn);
1320
1321   /* ??? If fxch turns out to be cheaper than fstp, give priority to
1322      registers that die in this insn - move those to stack top first.  */
1323   if ((! STACK_REG_P (*src1)
1324        || (STACK_REG_P (*src2)
1325            && get_hard_regnum (regstack, *src2) == FIRST_STACK_REG))
1326       && swap_rtx_condition (insn))
1327     {
1328       rtx temp;
1329       temp = XEXP (pat_src, 0);
1330       XEXP (pat_src, 0) = XEXP (pat_src, 1);
1331       XEXP (pat_src, 1) = temp;
1332
1333       src1 = get_true_reg (&XEXP (pat_src, 0));
1334       src2 = get_true_reg (&XEXP (pat_src, 1));
1335
1336       INSN_CODE (insn) = -1;
1337     }
1338
1339   /* We will fix any death note later.  */
1340
1341   src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1342
1343   if (STACK_REG_P (*src2))
1344     src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1345   else
1346     src2_note = NULL_RTX;
1347
1348   emit_swap_insn (insn, regstack, *src1);
1349
1350   replace_reg (src1, FIRST_STACK_REG);
1351
1352   if (STACK_REG_P (*src2))
1353     replace_reg (src2, get_hard_regnum (regstack, *src2));
1354
1355   if (src1_note)
1356     {
1357       pop_stack (regstack, REGNO (XEXP (src1_note, 0)));
1358       replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1359     }
1360
1361   /* If the second operand dies, handle that.  But if the operands are
1362      the same stack register, don't bother, because only one death is
1363      needed, and it was just handled.  */
1364
1365   if (src2_note
1366       && ! (STACK_REG_P (*src1) && STACK_REG_P (*src2)
1367             && REGNO (*src1) == REGNO (*src2)))
1368     {
1369       /* As a special case, two regs may die in this insn if src2 is
1370          next to top of stack and the top of stack also dies.  Since
1371          we have already popped src1, "next to top of stack" is really
1372          at top (FIRST_STACK_REG) now.  */
1373
1374       if (get_hard_regnum (regstack, XEXP (src2_note, 0)) == FIRST_STACK_REG
1375           && src1_note)
1376         {
1377           pop_stack (regstack, REGNO (XEXP (src2_note, 0)));
1378           replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG + 1);
1379         }
1380       else
1381         {
1382           /* The 386 can only represent death of the first operand in
1383              the case handled above.  In all other cases, emit a separate
1384              pop and remove the death note from here.  */
1385
1386           /* link_cc0_insns (insn); */
1387
1388           remove_regno_note (insn, REG_DEAD, REGNO (XEXP (src2_note, 0)));
1389
1390           emit_pop_insn (insn, regstack, XEXP (src2_note, 0),
1391                          EMIT_AFTER);
1392         }
1393     }
1394 }
1395 \f
1396 /* Substitute new registers in PAT, which is part of INSN.  REGSTACK
1397    is the current register layout.  Return whether a control flow insn
1398    was deleted in the process.  */
1399
1400 static bool
1401 subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
1402 {
1403   rtx *dest, *src;
1404   bool control_flow_insn_deleted = false;
1405
1406   switch (GET_CODE (pat))
1407     {
1408     case USE:
1409       /* Deaths in USE insns can happen in non optimizing compilation.
1410          Handle them by popping the dying register.  */
1411       src = get_true_reg (&XEXP (pat, 0));
1412       if (STACK_REG_P (*src)
1413           && find_regno_note (insn, REG_DEAD, REGNO (*src)))
1414         {
1415           emit_pop_insn (insn, regstack, *src, EMIT_AFTER);
1416           return control_flow_insn_deleted;
1417         }
1418       /* ??? Uninitialized USE should not happen.  */
1419       else
1420         gcc_assert (get_hard_regnum (regstack, *src) != -1);
1421       break;
1422
1423     case CLOBBER:
1424       {
1425         rtx note;
1426
1427         dest = get_true_reg (&XEXP (pat, 0));
1428         if (STACK_REG_P (*dest))
1429           {
1430             note = find_reg_note (insn, REG_DEAD, *dest);
1431
1432             if (pat != PATTERN (insn))
1433               {
1434                 /* The fix_truncdi_1 pattern wants to be able to allocate
1435                    it's own scratch register.  It does this by clobbering
1436                    an fp reg so that it is assured of an empty reg-stack
1437                    register.  If the register is live, kill it now.
1438                    Remove the DEAD/UNUSED note so we don't try to kill it
1439                    later too.  */
1440
1441                 if (note)
1442                   emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE);
1443                 else
1444                   {
1445                     note = find_reg_note (insn, REG_UNUSED, *dest);
1446                     gcc_assert (note);
1447                   }
1448                 remove_note (insn, note);
1449                 replace_reg (dest, FIRST_STACK_REG + 1);
1450               }
1451             else
1452               {
1453                 /* A top-level clobber with no REG_DEAD, and no hard-regnum
1454                    indicates an uninitialized value.  Because reload removed
1455                    all other clobbers, this must be due to a function
1456                    returning without a value.  Load up a NaN.  */
1457
1458                 if (!note)
1459                   {
1460                     rtx t = *dest;
1461                     if (get_hard_regnum (regstack, t) == -1)
1462                       control_flow_insn_deleted
1463                         |= move_nan_for_stack_reg (insn, regstack, t);
1464                     if (COMPLEX_MODE_P (GET_MODE (t)))
1465                       {
1466                         t = FP_MODE_REG (REGNO (t) + 1, DFmode);
1467                         if (get_hard_regnum (regstack, t) == -1)
1468                           control_flow_insn_deleted
1469                             |= move_nan_for_stack_reg (insn, regstack, t);
1470                       }
1471                   }
1472               }
1473           }
1474         break;
1475       }
1476
1477     case SET:
1478       {
1479         rtx *src1 = (rtx *) 0, *src2;
1480         rtx src1_note, src2_note;
1481         rtx pat_src;
1482
1483         dest = get_true_reg (&SET_DEST (pat));
1484         src  = get_true_reg (&SET_SRC (pat));
1485         pat_src = SET_SRC (pat);
1486
1487         /* See if this is a `movM' pattern, and handle elsewhere if so.  */
1488         if (STACK_REG_P (*src)
1489             || (STACK_REG_P (*dest)
1490                 && (REG_P (*src) || MEM_P (*src)
1491                     || GET_CODE (*src) == CONST_DOUBLE)))
1492           {
1493             control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat);
1494             break;
1495           }
1496
1497         switch (GET_CODE (pat_src))
1498           {
1499           case COMPARE:
1500             compare_for_stack_reg (insn, regstack, pat_src);
1501             break;
1502
1503           case CALL:
1504             {
1505               int count;
1506               for (count = hard_regno_nregs[REGNO (*dest)][GET_MODE (*dest)];
1507                    --count >= 0;)
1508                 {
1509                   regstack->reg[++regstack->top] = REGNO (*dest) + count;
1510                   SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest) + count);
1511                 }
1512             }
1513             replace_reg (dest, FIRST_STACK_REG);
1514             break;
1515
1516           case REG:
1517             /* This is a `tstM2' case.  */
1518             gcc_assert (*dest == cc0_rtx);
1519             src1 = src;
1520
1521             /* Fall through.  */
1522
1523           case FLOAT_TRUNCATE:
1524           case SQRT:
1525           case ABS:
1526           case NEG:
1527             /* These insns only operate on the top of the stack. DEST might
1528                be cc0_rtx if we're processing a tstM pattern. Also, it's
1529                possible that the tstM case results in a REG_DEAD note on the
1530                source.  */
1531
1532             if (src1 == 0)
1533               src1 = get_true_reg (&XEXP (pat_src, 0));
1534
1535             emit_swap_insn (insn, regstack, *src1);
1536
1537             src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1538
1539             if (STACK_REG_P (*dest))
1540               replace_reg (dest, FIRST_STACK_REG);
1541
1542             if (src1_note)
1543               {
1544                 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1545                 regstack->top--;
1546                 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1));
1547               }
1548
1549             replace_reg (src1, FIRST_STACK_REG);
1550             break;
1551
1552           case MINUS:
1553           case DIV:
1554             /* On i386, reversed forms of subM3 and divM3 exist for
1555                MODE_FLOAT, so the same code that works for addM3 and mulM3
1556                can be used.  */
1557           case MULT:
1558           case PLUS:
1559             /* These insns can accept the top of stack as a destination
1560                from a stack reg or mem, or can use the top of stack as a
1561                source and some other stack register (possibly top of stack)
1562                as a destination.  */
1563
1564             src1 = get_true_reg (&XEXP (pat_src, 0));
1565             src2 = get_true_reg (&XEXP (pat_src, 1));
1566
1567             /* We will fix any death note later.  */
1568
1569             if (STACK_REG_P (*src1))
1570               src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1571             else
1572               src1_note = NULL_RTX;
1573             if (STACK_REG_P (*src2))
1574               src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1575             else
1576               src2_note = NULL_RTX;
1577
1578             /* If either operand is not a stack register, then the dest
1579                must be top of stack.  */
1580
1581             if (! STACK_REG_P (*src1) || ! STACK_REG_P (*src2))
1582               emit_swap_insn (insn, regstack, *dest);
1583             else
1584               {
1585                 /* Both operands are REG.  If neither operand is already
1586                    at the top of stack, choose to make the one that is the dest
1587                    the new top of stack.  */
1588
1589                 int src1_hard_regnum, src2_hard_regnum;
1590
1591                 src1_hard_regnum = get_hard_regnum (regstack, *src1);
1592                 src2_hard_regnum = get_hard_regnum (regstack, *src2);
1593                 gcc_assert (src1_hard_regnum != -1);
1594                 gcc_assert (src2_hard_regnum != -1);
1595
1596                 if (src1_hard_regnum != FIRST_STACK_REG
1597                     && src2_hard_regnum != FIRST_STACK_REG)
1598                   emit_swap_insn (insn, regstack, *dest);
1599               }
1600
1601             if (STACK_REG_P (*src1))
1602               replace_reg (src1, get_hard_regnum (regstack, *src1));
1603             if (STACK_REG_P (*src2))
1604               replace_reg (src2, get_hard_regnum (regstack, *src2));
1605
1606             if (src1_note)
1607               {
1608                 rtx src1_reg = XEXP (src1_note, 0);
1609
1610                 /* If the register that dies is at the top of stack, then
1611                    the destination is somewhere else - merely substitute it.
1612                    But if the reg that dies is not at top of stack, then
1613                    move the top of stack to the dead reg, as though we had
1614                    done the insn and then a store-with-pop.  */
1615
1616                 if (REGNO (src1_reg) == regstack->reg[regstack->top])
1617                   {
1618                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1619                     replace_reg (dest, get_hard_regnum (regstack, *dest));
1620                   }
1621                 else
1622                   {
1623                     int regno = get_hard_regnum (regstack, src1_reg);
1624
1625                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1626                     replace_reg (dest, regno);
1627
1628                     regstack->reg[regstack->top - (regno - FIRST_STACK_REG)]
1629                       = regstack->reg[regstack->top];
1630                   }
1631
1632                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1633                                     REGNO (XEXP (src1_note, 0)));
1634                 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1635                 regstack->top--;
1636               }
1637             else if (src2_note)
1638               {
1639                 rtx src2_reg = XEXP (src2_note, 0);
1640                 if (REGNO (src2_reg) == regstack->reg[regstack->top])
1641                   {
1642                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1643                     replace_reg (dest, get_hard_regnum (regstack, *dest));
1644                   }
1645                 else
1646                   {
1647                     int regno = get_hard_regnum (regstack, src2_reg);
1648
1649                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1650                     replace_reg (dest, regno);
1651
1652                     regstack->reg[regstack->top - (regno - FIRST_STACK_REG)]
1653                       = regstack->reg[regstack->top];
1654                   }
1655
1656                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1657                                     REGNO (XEXP (src2_note, 0)));
1658                 replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG);
1659                 regstack->top--;
1660               }
1661             else
1662               {
1663                 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1664                 replace_reg (dest, get_hard_regnum (regstack, *dest));
1665               }
1666
1667             /* Keep operand 1 matching with destination.  */
1668             if (COMMUTATIVE_ARITH_P (pat_src)
1669                 && REG_P (*src1) && REG_P (*src2)
1670                 && REGNO (*src1) != REGNO (*dest))
1671              {
1672                 int tmp = REGNO (*src1);
1673                 replace_reg (src1, REGNO (*src2));
1674                 replace_reg (src2, tmp);
1675              }
1676             break;
1677
1678           case UNSPEC:
1679             switch (XINT (pat_src, 1))
1680               {
1681               case UNSPEC_SIN:
1682               case UNSPEC_COS:
1683               case UNSPEC_FRNDINT:
1684               case UNSPEC_F2XM1:
1685
1686               case UNSPEC_FRNDINT_FLOOR:
1687               case UNSPEC_FRNDINT_CEIL:
1688               case UNSPEC_FRNDINT_TRUNC:
1689               case UNSPEC_FRNDINT_MASK_PM:
1690
1691                 /* These insns only operate on the top of the stack.  */
1692
1693                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1694
1695                 emit_swap_insn (insn, regstack, *src1);
1696
1697                 /* Input should never die, it is
1698                    replaced with output.  */
1699                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1700                 gcc_assert (!src1_note);
1701
1702                 if (STACK_REG_P (*dest))
1703                   replace_reg (dest, FIRST_STACK_REG);
1704
1705                 replace_reg (src1, FIRST_STACK_REG);
1706                 break;
1707
1708               case UNSPEC_FPATAN:
1709               case UNSPEC_FYL2X:
1710               case UNSPEC_FYL2XP1:
1711                 /* These insns operate on the top two stack slots.  */
1712
1713                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1714                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1715
1716                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1717                 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1718
1719                 swap_to_top (insn, regstack, *src1, *src2);
1720
1721                 replace_reg (src1, FIRST_STACK_REG);
1722                 replace_reg (src2, FIRST_STACK_REG + 1);
1723
1724                 if (src1_note)
1725                   replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1726                 if (src2_note)
1727                   replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG + 1);
1728
1729                 /* Pop both input operands from the stack.  */
1730                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1731                                     regstack->reg[regstack->top]);
1732                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1733                                     regstack->reg[regstack->top - 1]);
1734                 regstack->top -= 2;
1735
1736                 /* Push the result back onto the stack.  */
1737                 regstack->reg[++regstack->top] = REGNO (*dest);
1738                 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1739                 replace_reg (dest, FIRST_STACK_REG);
1740                 break;
1741
1742               case UNSPEC_FSCALE_FRACT:
1743               case UNSPEC_FPREM_F:
1744               case UNSPEC_FPREM1_F:
1745                 /* These insns operate on the top two stack slots.
1746                    first part of double input, double output insn.  */
1747
1748                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1749                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1750
1751                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1752                 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1753
1754                 /* Inputs should never die, they are
1755                    replaced with outputs.  */
1756                 gcc_assert (!src1_note);
1757                 gcc_assert (!src2_note);
1758
1759                 swap_to_top (insn, regstack, *src1, *src2);
1760
1761                 /* Push the result back onto stack. Empty stack slot
1762                    will be filled in second part of insn.  */
1763                 if (STACK_REG_P (*dest)) {
1764                   regstack->reg[regstack->top] = REGNO (*dest);
1765                   SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1766                   replace_reg (dest, FIRST_STACK_REG);
1767                 }
1768
1769                 replace_reg (src1, FIRST_STACK_REG);
1770                 replace_reg (src2, FIRST_STACK_REG + 1);
1771                 break;
1772
1773               case UNSPEC_FSCALE_EXP:
1774               case UNSPEC_FPREM_U:
1775               case UNSPEC_FPREM1_U:
1776                 /* These insns operate on the top two stack slots./
1777                    second part of double input, double output insn.  */
1778
1779                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1780                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1781
1782                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1783                 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1784
1785                 /* Inputs should never die, they are
1786                    replaced with outputs.  */
1787                 gcc_assert (!src1_note);
1788                 gcc_assert (!src2_note);
1789
1790                 swap_to_top (insn, regstack, *src1, *src2);
1791
1792                 /* Push the result back onto stack. Fill empty slot from
1793                    first part of insn and fix top of stack pointer.  */
1794                 if (STACK_REG_P (*dest)) {
1795                   regstack->reg[regstack->top - 1] = REGNO (*dest);
1796                   SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1797                   replace_reg (dest, FIRST_STACK_REG + 1);
1798                 }
1799
1800                 replace_reg (src1, FIRST_STACK_REG);
1801                 replace_reg (src2, FIRST_STACK_REG + 1);
1802                 break;
1803
1804               case UNSPEC_SINCOS_COS:
1805               case UNSPEC_TAN_ONE:
1806               case UNSPEC_XTRACT_FRACT:
1807                 /* These insns operate on the top two stack slots,
1808                    first part of one input, double output insn.  */
1809
1810                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1811
1812                 emit_swap_insn (insn, regstack, *src1);
1813
1814                 /* Input should never die, it is
1815                    replaced with output.  */
1816                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1817                 gcc_assert (!src1_note);
1818
1819                 /* Push the result back onto stack. Empty stack slot
1820                    will be filled in second part of insn.  */
1821                 if (STACK_REG_P (*dest)) {
1822                   regstack->reg[regstack->top + 1] = REGNO (*dest);
1823                   SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1824                   replace_reg (dest, FIRST_STACK_REG);
1825                 }
1826
1827                 replace_reg (src1, FIRST_STACK_REG);
1828                 break;
1829
1830               case UNSPEC_SINCOS_SIN:
1831               case UNSPEC_TAN_TAN:
1832               case UNSPEC_XTRACT_EXP:
1833                 /* These insns operate on the top two stack slots,
1834                    second part of one input, double output insn.  */
1835
1836                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1837
1838                 emit_swap_insn (insn, regstack, *src1);
1839
1840                 /* Input should never die, it is
1841                    replaced with output.  */
1842                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1843                 gcc_assert (!src1_note);
1844
1845                 /* Push the result back onto stack. Fill empty slot from
1846                    first part of insn and fix top of stack pointer.  */
1847                 if (STACK_REG_P (*dest)) {
1848                   regstack->reg[regstack->top] = REGNO (*dest);
1849                   SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1850                   replace_reg (dest, FIRST_STACK_REG + 1);
1851
1852                   regstack->top++;
1853                 }
1854
1855                 replace_reg (src1, FIRST_STACK_REG);
1856                 break;
1857
1858               case UNSPEC_SAHF:
1859                 /* (unspec [(unspec [(compare)] UNSPEC_FNSTSW)] UNSPEC_SAHF)
1860                    The combination matches the PPRO fcomi instruction.  */
1861
1862                 pat_src = XVECEXP (pat_src, 0, 0);
1863                 gcc_assert (GET_CODE (pat_src) == UNSPEC);
1864                 gcc_assert (XINT (pat_src, 1) == UNSPEC_FNSTSW);
1865                 /* Fall through.  */
1866
1867               case UNSPEC_FNSTSW:
1868                 /* Combined fcomp+fnstsw generated for doing well with
1869                    CSE.  When optimizing this would have been broken
1870                    up before now.  */
1871
1872                 pat_src = XVECEXP (pat_src, 0, 0);
1873                 gcc_assert (GET_CODE (pat_src) == COMPARE);
1874
1875                 compare_for_stack_reg (insn, regstack, pat_src);
1876                 break;
1877
1878               default:
1879                 gcc_unreachable ();
1880               }
1881             break;
1882
1883           case IF_THEN_ELSE:
1884             /* This insn requires the top of stack to be the destination.  */
1885
1886             src1 = get_true_reg (&XEXP (pat_src, 1));
1887             src2 = get_true_reg (&XEXP (pat_src, 2));
1888
1889             src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1890             src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1891
1892             /* If the comparison operator is an FP comparison operator,
1893                it is handled correctly by compare_for_stack_reg () who
1894                will move the destination to the top of stack. But if the
1895                comparison operator is not an FP comparison operator, we
1896                have to handle it here.  */
1897             if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG
1898                 && REGNO (*dest) != regstack->reg[regstack->top])
1899               {
1900                 /* In case one of operands is the top of stack and the operands
1901                    dies, it is safe to make it the destination operand by
1902                    reversing the direction of cmove and avoid fxch.  */
1903                 if ((REGNO (*src1) == regstack->reg[regstack->top]
1904                      && src1_note)
1905                     || (REGNO (*src2) == regstack->reg[regstack->top]
1906                         && src2_note))
1907                   {
1908                     int idx1 = (get_hard_regnum (regstack, *src1)
1909                                 - FIRST_STACK_REG);
1910                     int idx2 = (get_hard_regnum (regstack, *src2)
1911                                 - FIRST_STACK_REG);
1912
1913                     /* Make reg-stack believe that the operands are already
1914                        swapped on the stack */
1915                     regstack->reg[regstack->top - idx1] = REGNO (*src2);
1916                     regstack->reg[regstack->top - idx2] = REGNO (*src1);
1917
1918                     /* Reverse condition to compensate the operand swap.
1919                        i386 do have comparison always reversible.  */
1920                     PUT_CODE (XEXP (pat_src, 0),
1921                               reversed_comparison_code (XEXP (pat_src, 0), insn));
1922                   }
1923                 else
1924                   emit_swap_insn (insn, regstack, *dest);
1925               }
1926
1927             {
1928               rtx src_note [3];
1929               int i;
1930
1931               src_note[0] = 0;
1932               src_note[1] = src1_note;
1933               src_note[2] = src2_note;
1934
1935               if (STACK_REG_P (*src1))
1936                 replace_reg (src1, get_hard_regnum (regstack, *src1));
1937               if (STACK_REG_P (*src2))
1938                 replace_reg (src2, get_hard_regnum (regstack, *src2));
1939
1940               for (i = 1; i <= 2; i++)
1941                 if (src_note [i])
1942                   {
1943                     int regno = REGNO (XEXP (src_note[i], 0));
1944
1945                     /* If the register that dies is not at the top of
1946                        stack, then move the top of stack to the dead reg.
1947                        Top of stack should never die, as it is the
1948                        destination.  */
1949                     gcc_assert (regno != regstack->reg[regstack->top]);
1950                     remove_regno_note (insn, REG_DEAD, regno);
1951                     emit_pop_insn (insn, regstack, XEXP (src_note[i], 0),
1952                                     EMIT_AFTER);
1953                   }
1954             }
1955
1956             /* Make dest the top of stack.  Add dest to regstack if
1957                not present.  */
1958             if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG)
1959               regstack->reg[++regstack->top] = REGNO (*dest);
1960             SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1961             replace_reg (dest, FIRST_STACK_REG);
1962             break;
1963
1964           default:
1965             gcc_unreachable ();
1966           }
1967         break;
1968       }
1969
1970     default:
1971       break;
1972     }
1973
1974   return control_flow_insn_deleted;
1975 }
1976 \f
1977 /* Substitute hard regnums for any stack regs in INSN, which has
1978    N_INPUTS inputs and N_OUTPUTS outputs.  REGSTACK is the stack info
1979    before the insn, and is updated with changes made here.
1980
1981    There are several requirements and assumptions about the use of
1982    stack-like regs in asm statements.  These rules are enforced by
1983    record_asm_stack_regs; see comments there for details.  Any
1984    asm_operands left in the RTL at this point may be assume to meet the
1985    requirements, since record_asm_stack_regs removes any problem asm.  */
1986
1987 static void
1988 subst_asm_stack_regs (rtx insn, stack regstack)
1989 {
1990   rtx body = PATTERN (insn);
1991   int alt;
1992
1993   rtx *note_reg;                /* Array of note contents */
1994   rtx **note_loc;               /* Address of REG field of each note */
1995   enum reg_note *note_kind;     /* The type of each note */
1996
1997   rtx *clobber_reg = 0;
1998   rtx **clobber_loc = 0;
1999
2000   struct stack_def temp_stack;
2001   int n_notes;
2002   int n_clobbers;
2003   rtx note;
2004   int i;
2005   int n_inputs, n_outputs;
2006
2007   if (! check_asm_stack_operands (insn))
2008     return;
2009
2010   /* Find out what the constraints required.  If no constraint
2011      alternative matches, that is a compiler bug: we should have caught
2012      such an insn in check_asm_stack_operands.  */
2013   extract_insn (insn);
2014   constrain_operands (1);
2015   alt = which_alternative;
2016
2017   preprocess_constraints ();
2018
2019   n_inputs = get_asm_operand_n_inputs (body);
2020   n_outputs = recog_data.n_operands - n_inputs;
2021
2022   gcc_assert (alt >= 0);
2023
2024   /* Strip SUBREGs here to make the following code simpler.  */
2025   for (i = 0; i < recog_data.n_operands; i++)
2026     if (GET_CODE (recog_data.operand[i]) == SUBREG
2027         && REG_P (SUBREG_REG (recog_data.operand[i])))
2028       {
2029         recog_data.operand_loc[i] = & SUBREG_REG (recog_data.operand[i]);
2030         recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]);
2031       }
2032
2033   /* Set up NOTE_REG, NOTE_LOC and NOTE_KIND.  */
2034
2035   for (i = 0, note = REG_NOTES (insn); note; note = XEXP (note, 1))
2036     i++;
2037
2038   note_reg = alloca (i * sizeof (rtx));
2039   note_loc = alloca (i * sizeof (rtx *));
2040   note_kind = alloca (i * sizeof (enum reg_note));
2041
2042   n_notes = 0;
2043   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2044     {
2045       rtx reg = XEXP (note, 0);
2046       rtx *loc = & XEXP (note, 0);
2047
2048       if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
2049         {
2050           loc = & SUBREG_REG (reg);
2051           reg = SUBREG_REG (reg);
2052         }
2053
2054       if (STACK_REG_P (reg)
2055           && (REG_NOTE_KIND (note) == REG_DEAD
2056               || REG_NOTE_KIND (note) == REG_UNUSED))
2057         {
2058           note_reg[n_notes] = reg;
2059           note_loc[n_notes] = loc;
2060           note_kind[n_notes] = REG_NOTE_KIND (note);
2061           n_notes++;
2062         }
2063     }
2064
2065   /* Set up CLOBBER_REG and CLOBBER_LOC.  */
2066
2067   n_clobbers = 0;
2068
2069   if (GET_CODE (body) == PARALLEL)
2070     {
2071       clobber_reg = alloca (XVECLEN (body, 0) * sizeof (rtx));
2072       clobber_loc = alloca (XVECLEN (body, 0) * sizeof (rtx *));
2073
2074       for (i = 0; i < XVECLEN (body, 0); i++)
2075         if (GET_CODE (XVECEXP (body, 0, i)) == CLOBBER)
2076           {
2077             rtx clobber = XVECEXP (body, 0, i);
2078             rtx reg = XEXP (clobber, 0);
2079             rtx *loc = & XEXP (clobber, 0);
2080
2081             if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
2082               {
2083                 loc = & SUBREG_REG (reg);
2084                 reg = SUBREG_REG (reg);
2085               }
2086
2087             if (STACK_REG_P (reg))
2088               {
2089                 clobber_reg[n_clobbers] = reg;
2090                 clobber_loc[n_clobbers] = loc;
2091                 n_clobbers++;
2092               }
2093           }
2094     }
2095
2096   temp_stack = *regstack;
2097
2098   /* Put the input regs into the desired place in TEMP_STACK.  */
2099
2100   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2101     if (STACK_REG_P (recog_data.operand[i])
2102         && reg_class_subset_p (recog_op_alt[i][alt].cl,
2103                                FLOAT_REGS)
2104         && recog_op_alt[i][alt].cl != FLOAT_REGS)
2105       {
2106         /* If an operand needs to be in a particular reg in
2107            FLOAT_REGS, the constraint was either 't' or 'u'.  Since
2108            these constraints are for single register classes, and
2109            reload guaranteed that operand[i] is already in that class,
2110            we can just use REGNO (recog_data.operand[i]) to know which
2111            actual reg this operand needs to be in.  */
2112
2113         int regno = get_hard_regnum (&temp_stack, recog_data.operand[i]);
2114
2115         gcc_assert (regno >= 0);
2116
2117         if ((unsigned int) regno != REGNO (recog_data.operand[i]))
2118           {
2119             /* recog_data.operand[i] is not in the right place.  Find
2120                it and swap it with whatever is already in I's place.
2121                K is where recog_data.operand[i] is now.  J is where it
2122                should be.  */
2123             int j, k, temp;
2124
2125             k = temp_stack.top - (regno - FIRST_STACK_REG);
2126             j = (temp_stack.top
2127                  - (REGNO (recog_data.operand[i]) - FIRST_STACK_REG));
2128
2129             temp = temp_stack.reg[k];
2130             temp_stack.reg[k] = temp_stack.reg[j];
2131             temp_stack.reg[j] = temp;
2132           }
2133       }
2134
2135   /* Emit insns before INSN to make sure the reg-stack is in the right
2136      order.  */
2137
2138   change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
2139
2140   /* Make the needed input register substitutions.  Do death notes and
2141      clobbers too, because these are for inputs, not outputs.  */
2142
2143   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2144     if (STACK_REG_P (recog_data.operand[i]))
2145       {
2146         int regnum = get_hard_regnum (regstack, recog_data.operand[i]);
2147
2148         gcc_assert (regnum >= 0);
2149
2150         replace_reg (recog_data.operand_loc[i], regnum);
2151       }
2152
2153   for (i = 0; i < n_notes; i++)
2154     if (note_kind[i] == REG_DEAD)
2155       {
2156         int regnum = get_hard_regnum (regstack, note_reg[i]);
2157
2158         gcc_assert (regnum >= 0);
2159
2160         replace_reg (note_loc[i], regnum);
2161       }
2162
2163   for (i = 0; i < n_clobbers; i++)
2164     {
2165       /* It's OK for a CLOBBER to reference a reg that is not live.
2166          Don't try to replace it in that case.  */
2167       int regnum = get_hard_regnum (regstack, clobber_reg[i]);
2168
2169       if (regnum >= 0)
2170         {
2171           /* Sigh - clobbers always have QImode.  But replace_reg knows
2172              that these regs can't be MODE_INT and will assert.  Just put
2173              the right reg there without calling replace_reg.  */
2174
2175           *clobber_loc[i] = FP_MODE_REG (regnum, DFmode);
2176         }
2177     }
2178
2179   /* Now remove from REGSTACK any inputs that the asm implicitly popped.  */
2180
2181   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2182     if (STACK_REG_P (recog_data.operand[i]))
2183       {
2184         /* An input reg is implicitly popped if it is tied to an
2185            output, or if there is a CLOBBER for it.  */
2186         int j;
2187
2188         for (j = 0; j < n_clobbers; j++)
2189           if (operands_match_p (clobber_reg[j], recog_data.operand[i]))
2190             break;
2191
2192         if (j < n_clobbers || recog_op_alt[i][alt].matches >= 0)
2193           {
2194             /* recog_data.operand[i] might not be at the top of stack.
2195                But that's OK, because all we need to do is pop the
2196                right number of regs off of the top of the reg-stack.
2197                record_asm_stack_regs guaranteed that all implicitly
2198                popped regs were grouped at the top of the reg-stack.  */
2199
2200             CLEAR_HARD_REG_BIT (regstack->reg_set,
2201                                 regstack->reg[regstack->top]);
2202             regstack->top--;
2203           }
2204       }
2205
2206   /* Now add to REGSTACK any outputs that the asm implicitly pushed.
2207      Note that there isn't any need to substitute register numbers.
2208      ???  Explain why this is true.  */
2209
2210   for (i = LAST_STACK_REG; i >= FIRST_STACK_REG; i--)
2211     {
2212       /* See if there is an output for this hard reg.  */
2213       int j;
2214
2215       for (j = 0; j < n_outputs; j++)
2216         if (STACK_REG_P (recog_data.operand[j])
2217             && REGNO (recog_data.operand[j]) == (unsigned) i)
2218           {
2219             regstack->reg[++regstack->top] = i;
2220             SET_HARD_REG_BIT (regstack->reg_set, i);
2221             break;
2222           }
2223     }
2224
2225   /* Now emit a pop insn for any REG_UNUSED output, or any REG_DEAD
2226      input that the asm didn't implicitly pop.  If the asm didn't
2227      implicitly pop an input reg, that reg will still be live.
2228
2229      Note that we can't use find_regno_note here: the register numbers
2230      in the death notes have already been substituted.  */
2231
2232   for (i = 0; i < n_outputs; i++)
2233     if (STACK_REG_P (recog_data.operand[i]))
2234       {
2235         int j;
2236
2237         for (j = 0; j < n_notes; j++)
2238           if (REGNO (recog_data.operand[i]) == REGNO (note_reg[j])
2239               && note_kind[j] == REG_UNUSED)
2240             {
2241               insn = emit_pop_insn (insn, regstack, recog_data.operand[i],
2242                                     EMIT_AFTER);
2243               break;
2244             }
2245       }
2246
2247   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2248     if (STACK_REG_P (recog_data.operand[i]))
2249       {
2250         int j;
2251
2252         for (j = 0; j < n_notes; j++)
2253           if (REGNO (recog_data.operand[i]) == REGNO (note_reg[j])
2254               && note_kind[j] == REG_DEAD
2255               && TEST_HARD_REG_BIT (regstack->reg_set,
2256                                     REGNO (recog_data.operand[i])))
2257             {
2258               insn = emit_pop_insn (insn, regstack, recog_data.operand[i],
2259                                     EMIT_AFTER);
2260               break;
2261             }
2262       }
2263 }
2264 \f
2265 /* Substitute stack hard reg numbers for stack virtual registers in
2266    INSN.  Non-stack register numbers are not changed.  REGSTACK is the
2267    current stack content.  Insns may be emitted as needed to arrange the
2268    stack for the 387 based on the contents of the insn.  Return whether
2269    a control flow insn was deleted in the process.  */
2270
2271 static bool
2272 subst_stack_regs (rtx insn, stack regstack)
2273 {
2274   rtx *note_link, note;
2275   bool control_flow_insn_deleted = false;
2276   int i;
2277
2278   if (CALL_P (insn))
2279     {
2280       int top = regstack->top;
2281
2282       /* If there are any floating point parameters to be passed in
2283          registers for this call, make sure they are in the right
2284          order.  */
2285
2286       if (top >= 0)
2287         {
2288           straighten_stack (PREV_INSN (insn), regstack);
2289
2290           /* Now mark the arguments as dead after the call.  */
2291
2292           while (regstack->top >= 0)
2293             {
2294               CLEAR_HARD_REG_BIT (regstack->reg_set, FIRST_STACK_REG + regstack->top);
2295               regstack->top--;
2296             }
2297         }
2298     }
2299
2300   /* Do the actual substitution if any stack regs are mentioned.
2301      Since we only record whether entire insn mentions stack regs, and
2302      subst_stack_regs_pat only works for patterns that contain stack regs,
2303      we must check each pattern in a parallel here.  A call_value_pop could
2304      fail otherwise.  */
2305
2306   if (stack_regs_mentioned (insn))
2307     {
2308       int n_operands = asm_noperands (PATTERN (insn));
2309       if (n_operands >= 0)
2310         {
2311           /* This insn is an `asm' with operands.  Decode the operands,
2312              decide how many are inputs, and do register substitution.
2313              Any REG_UNUSED notes will be handled by subst_asm_stack_regs.  */
2314
2315           subst_asm_stack_regs (insn, regstack);
2316           return control_flow_insn_deleted;
2317         }
2318
2319       if (GET_CODE (PATTERN (insn)) == PARALLEL)
2320         for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
2321           {
2322             if (stack_regs_mentioned_p (XVECEXP (PATTERN (insn), 0, i)))
2323               {
2324                 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == CLOBBER)
2325                    XVECEXP (PATTERN (insn), 0, i)
2326                      = shallow_copy_rtx (XVECEXP (PATTERN (insn), 0, i));
2327                 control_flow_insn_deleted
2328                   |= subst_stack_regs_pat (insn, regstack,
2329                                            XVECEXP (PATTERN (insn), 0, i));
2330               }
2331           }
2332       else
2333         control_flow_insn_deleted
2334           |= subst_stack_regs_pat (insn, regstack, PATTERN (insn));
2335     }
2336
2337   /* subst_stack_regs_pat may have deleted a no-op insn.  If so, any
2338      REG_UNUSED will already have been dealt with, so just return.  */
2339
2340   if (NOTE_P (insn) || INSN_DELETED_P (insn))
2341     return control_flow_insn_deleted;
2342
2343   /* If there is a REG_UNUSED note on a stack register on this insn,
2344      the indicated reg must be popped.  The REG_UNUSED note is removed,
2345      since the form of the newly emitted pop insn references the reg,
2346      making it no longer `unset'.  */
2347
2348   note_link = &REG_NOTES (insn);
2349   for (note = *note_link; note; note = XEXP (note, 1))
2350     if (REG_NOTE_KIND (note) == REG_UNUSED && STACK_REG_P (XEXP (note, 0)))
2351       {
2352         *note_link = XEXP (note, 1);
2353         insn = emit_pop_insn (insn, regstack, XEXP (note, 0), EMIT_AFTER);
2354       }
2355     else
2356       note_link = &XEXP (note, 1);
2357
2358   return control_flow_insn_deleted;
2359 }
2360 \f
2361 /* Change the organization of the stack so that it fits a new basic
2362    block.  Some registers might have to be popped, but there can never be
2363    a register live in the new block that is not now live.
2364
2365    Insert any needed insns before or after INSN, as indicated by
2366    WHERE.  OLD is the original stack layout, and NEW is the desired
2367    form.  OLD is updated to reflect the code emitted, i.e., it will be
2368    the same as NEW upon return.
2369
2370    This function will not preserve block_end[].  But that information
2371    is no longer needed once this has executed.  */
2372
2373 static void
2374 change_stack (rtx insn, stack old, stack new, enum emit_where where)
2375 {
2376   int reg;
2377   int update_end = 0;
2378
2379   /* We will be inserting new insns "backwards".  If we are to insert
2380      after INSN, find the next insn, and insert before it.  */
2381
2382   if (where == EMIT_AFTER)
2383     {
2384       if (current_block && BB_END (current_block) == insn)
2385         update_end = 1;
2386       insn = NEXT_INSN (insn);
2387     }
2388
2389   /* Pop any registers that are not needed in the new block.  */
2390
2391   /* If the destination block's stack already has a specified layout
2392      and contains two or more registers, use a more intelligent algorithm
2393      to pop registers that minimizes the number number of fxchs below.  */
2394   if (new->top > 0)
2395     {
2396       bool slots[REG_STACK_SIZE];
2397       int pops[REG_STACK_SIZE];
2398       int next, dest, topsrc;
2399
2400       /* First pass to determine the free slots.  */
2401       for (reg = 0; reg <= new->top; reg++)
2402         slots[reg] = TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]);
2403
2404       /* Second pass to allocate preferred slots.  */
2405       topsrc = -1;
2406       for (reg = old->top; reg > new->top; reg--)
2407         if (TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]))
2408           {
2409             dest = -1;
2410             for (next = 0; next <= new->top; next++)
2411               if (!slots[next] && new->reg[next] == old->reg[reg])
2412                 {
2413                   /* If this is a preference for the new top of stack, record
2414                      the fact by remembering it's old->reg in topsrc.  */
2415                   if (next == new->top)
2416                     topsrc = reg;
2417                   slots[next] = true;
2418                   dest = next;
2419                   break;
2420                 }
2421             pops[reg] = dest;
2422           }
2423         else
2424           pops[reg] = reg;
2425
2426       /* Intentionally, avoid placing the top of stack in it's correct
2427          location, if we still need to permute the stack below and we
2428          can usefully place it somewhere else.  This is the case if any
2429          slot is still unallocated, in which case we should place the
2430          top of stack there.  */
2431       if (topsrc != -1)
2432         for (reg = 0; reg < new->top; reg++)
2433           if (!slots[reg])
2434             {
2435               pops[topsrc] = reg;
2436               slots[new->top] = false;
2437               slots[reg] = true;
2438               break;
2439             }
2440
2441       /* Third pass allocates remaining slots and emits pop insns.  */
2442       next = new->top;
2443       for (reg = old->top; reg > new->top; reg--)
2444         {
2445           dest = pops[reg];
2446           if (dest == -1)
2447             {
2448               /* Find next free slot.  */
2449               while (slots[next])
2450                 next--;
2451               dest = next--;
2452             }
2453           emit_pop_insn (insn, old, FP_MODE_REG (old->reg[dest], DFmode),
2454                          EMIT_BEFORE);
2455         }
2456     }
2457   else
2458     {
2459       /* The following loop attempts to maximize the number of times we
2460          pop the top of the stack, as this permits the use of the faster
2461          ffreep instruction on platforms that support it.  */
2462       int live, next;
2463
2464       live = 0;
2465       for (reg = 0; reg <= old->top; reg++)
2466         if (TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]))
2467           live++;
2468
2469       next = live;
2470       while (old->top >= live)
2471         if (TEST_HARD_REG_BIT (new->reg_set, old->reg[old->top]))
2472           {
2473             while (TEST_HARD_REG_BIT (new->reg_set, old->reg[next]))
2474               next--;
2475             emit_pop_insn (insn, old, FP_MODE_REG (old->reg[next], DFmode),
2476                            EMIT_BEFORE);
2477           }
2478         else
2479           emit_pop_insn (insn, old, FP_MODE_REG (old->reg[old->top], DFmode),
2480                          EMIT_BEFORE);
2481     }
2482
2483   if (new->top == -2)
2484     {
2485       /* If the new block has never been processed, then it can inherit
2486          the old stack order.  */
2487
2488       new->top = old->top;
2489       memcpy (new->reg, old->reg, sizeof (new->reg));
2490     }
2491   else
2492     {
2493       /* This block has been entered before, and we must match the
2494          previously selected stack order.  */
2495
2496       /* By now, the only difference should be the order of the stack,
2497          not their depth or liveliness.  */
2498
2499       GO_IF_HARD_REG_EQUAL (old->reg_set, new->reg_set, win);
2500       gcc_unreachable ();
2501     win:
2502       gcc_assert (old->top == new->top);
2503
2504       /* If the stack is not empty (new->top != -1), loop here emitting
2505          swaps until the stack is correct.
2506
2507          The worst case number of swaps emitted is N + 2, where N is the
2508          depth of the stack.  In some cases, the reg at the top of
2509          stack may be correct, but swapped anyway in order to fix
2510          other regs.  But since we never swap any other reg away from
2511          its correct slot, this algorithm will converge.  */
2512
2513       if (new->top != -1)
2514         do
2515           {
2516             /* Swap the reg at top of stack into the position it is
2517                supposed to be in, until the correct top of stack appears.  */
2518
2519             while (old->reg[old->top] != new->reg[new->top])
2520               {
2521                 for (reg = new->top; reg >= 0; reg--)
2522                   if (new->reg[reg] == old->reg[old->top])
2523                     break;
2524
2525                 gcc_assert (reg != -1);
2526
2527                 emit_swap_insn (insn, old,
2528                                 FP_MODE_REG (old->reg[reg], DFmode));
2529               }
2530
2531             /* See if any regs remain incorrect.  If so, bring an
2532              incorrect reg to the top of stack, and let the while loop
2533              above fix it.  */
2534
2535             for (reg = new->top; reg >= 0; reg--)
2536               if (new->reg[reg] != old->reg[reg])
2537                 {
2538                   emit_swap_insn (insn, old,
2539                                   FP_MODE_REG (old->reg[reg], DFmode));
2540                   break;
2541                 }
2542           } while (reg >= 0);
2543
2544       /* At this point there must be no differences.  */
2545
2546       for (reg = old->top; reg >= 0; reg--)
2547         gcc_assert (old->reg[reg] == new->reg[reg]);
2548     }
2549
2550   if (update_end)
2551     BB_END (current_block) = PREV_INSN (insn);
2552 }
2553 \f
2554 /* Print stack configuration.  */
2555
2556 static void
2557 print_stack (FILE *file, stack s)
2558 {
2559   if (! file)
2560     return;
2561
2562   if (s->top == -2)
2563     fprintf (file, "uninitialized\n");
2564   else if (s->top == -1)
2565     fprintf (file, "empty\n");
2566   else
2567     {
2568       int i;
2569       fputs ("[ ", file);
2570       for (i = 0; i <= s->top; ++i)
2571         fprintf (file, "%d ", s->reg[i]);
2572       fputs ("]\n", file);
2573     }
2574 }
2575 \f
2576 /* This function was doing life analysis.  We now let the regular live
2577    code do it's job, so we only need to check some extra invariants
2578    that reg-stack expects.  Primary among these being that all registers
2579    are initialized before use.
2580
2581    The function returns true when code was emitted to CFG edges and
2582    commit_edge_insertions needs to be called.  */
2583
2584 static int
2585 convert_regs_entry (void)
2586 {
2587   int inserted = 0;
2588   edge e;
2589   edge_iterator ei;
2590   basic_block block;
2591
2592   FOR_EACH_BB_REVERSE (block)
2593     {
2594       block_info bi = BLOCK_INFO (block);
2595       int reg;
2596
2597       /* Set current register status at last instruction `uninitialized'.  */
2598       bi->stack_in.top = -2;
2599
2600       /* Copy live_at_end and live_at_start into temporaries.  */
2601       for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; reg++)
2602         {
2603           if (REGNO_REG_SET_P (block->global_live_at_end, reg))
2604             SET_HARD_REG_BIT (bi->out_reg_set, reg);
2605           if (REGNO_REG_SET_P (block->global_live_at_start, reg))
2606             SET_HARD_REG_BIT (bi->stack_in.reg_set, reg);
2607         }
2608     }
2609
2610   /* Load something into each stack register live at function entry.
2611      Such live registers can be caused by uninitialized variables or
2612      functions not returning values on all paths.  In order to keep
2613      the push/pop code happy, and to not scrog the register stack, we
2614      must put something in these registers.  Use a QNaN.
2615
2616      Note that we are inserting converted code here.  This code is
2617      never seen by the convert_regs pass.  */
2618
2619   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
2620     {
2621       basic_block block = e->dest;
2622       block_info bi = BLOCK_INFO (block);
2623       int reg, top = -1;
2624
2625       for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg)
2626         if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg))
2627           {
2628             rtx init;
2629
2630             bi->stack_in.reg[++top] = reg;
2631
2632             init = gen_rtx_SET (VOIDmode,
2633                                 FP_MODE_REG (FIRST_STACK_REG, SFmode),
2634                                 not_a_num);
2635             insert_insn_on_edge (init, e);
2636             inserted = 1;
2637           }
2638
2639       bi->stack_in.top = top;
2640     }
2641
2642   return inserted;
2643 }
2644
2645 /* Construct the desired stack for function exit.  This will either
2646    be `empty', or the function return value at top-of-stack.  */
2647
2648 static void
2649 convert_regs_exit (void)
2650 {
2651   int value_reg_low, value_reg_high;
2652   stack output_stack;
2653   rtx retvalue;
2654
2655   retvalue = stack_result (current_function_decl);
2656   value_reg_low = value_reg_high = -1;
2657   if (retvalue)
2658     {
2659       value_reg_low = REGNO (retvalue);
2660       value_reg_high = value_reg_low
2661         + hard_regno_nregs[value_reg_low][GET_MODE (retvalue)] - 1;
2662     }
2663
2664   output_stack = &BLOCK_INFO (EXIT_BLOCK_PTR)->stack_in;
2665   if (value_reg_low == -1)
2666     output_stack->top = -1;
2667   else
2668     {
2669       int reg;
2670
2671       output_stack->top = value_reg_high - value_reg_low;
2672       for (reg = value_reg_low; reg <= value_reg_high; ++reg)
2673         {
2674           output_stack->reg[value_reg_high - reg] = reg;
2675           SET_HARD_REG_BIT (output_stack->reg_set, reg);
2676         }
2677     }
2678 }
2679
2680 /* Adjust the stack of this block on exit to match the stack of the
2681    target block, or copy stack info into the stack of the successor
2682    of the successor hasn't been processed yet.  */
2683 static bool
2684 compensate_edge (edge e, FILE *file)
2685 {
2686   basic_block block = e->src, target = e->dest;
2687   block_info bi = BLOCK_INFO (block);
2688   struct stack_def regstack, tmpstack;
2689   stack target_stack = &BLOCK_INFO (target)->stack_in;
2690   int reg;
2691
2692   current_block = block;
2693   regstack = bi->stack_out;
2694   if (file)
2695     fprintf (file, "Edge %d->%d: ", block->index, target->index);
2696
2697   if (target_stack->top == -2)
2698     {
2699       /* The target block hasn't had a stack order selected.
2700          We need merely ensure that no pops are needed.  */
2701       for (reg = regstack.top; reg >= 0; --reg)
2702         if (!TEST_HARD_REG_BIT (target_stack->reg_set, regstack.reg[reg]))
2703           break;
2704
2705       if (reg == -1)
2706         {
2707           if (file)
2708             fprintf (file, "new block; copying stack position\n");
2709
2710           /* change_stack kills values in regstack.  */
2711           tmpstack = regstack;
2712
2713           change_stack (BB_END (block), &tmpstack, target_stack, EMIT_AFTER);
2714           return false;
2715         }
2716
2717       if (file)
2718         fprintf (file, "new block; pops needed\n");
2719     }
2720   else
2721     {
2722       if (target_stack->top == regstack.top)
2723         {
2724           for (reg = target_stack->top; reg >= 0; --reg)
2725             if (target_stack->reg[reg] != regstack.reg[reg])
2726               break;
2727
2728           if (reg == -1)
2729             {
2730               if (file)
2731                 fprintf (file, "no changes needed\n");
2732               return false;
2733             }
2734         }
2735
2736       if (file)
2737         {
2738           fprintf (file, "correcting stack to ");
2739           print_stack (file, target_stack);
2740         }
2741     }
2742
2743   /* Care for non-call EH edges specially.  The normal return path have
2744      values in registers.  These will be popped en masse by the unwind
2745      library.  */
2746   if ((e->flags & (EDGE_EH | EDGE_ABNORMAL_CALL)) == EDGE_EH)
2747     target_stack->top = -1;
2748
2749   /* Other calls may appear to have values live in st(0), but the
2750      abnormal return path will not have actually loaded the values.  */
2751   else if (e->flags & EDGE_ABNORMAL_CALL)
2752     {
2753       /* Assert that the lifetimes are as we expect -- one value
2754          live at st(0) on the end of the source block, and no
2755          values live at the beginning of the destination block.  */
2756       HARD_REG_SET tmp;
2757
2758       CLEAR_HARD_REG_SET (tmp);
2759       GO_IF_HARD_REG_EQUAL (target_stack->reg_set, tmp, eh1);
2760       gcc_unreachable ();
2761     eh1:
2762
2763       /* We are sure that there is st(0) live, otherwise we won't compensate.
2764          For complex return values, we may have st(1) live as well.  */
2765       SET_HARD_REG_BIT (tmp, FIRST_STACK_REG);
2766       if (TEST_HARD_REG_BIT (regstack.reg_set, FIRST_STACK_REG + 1))
2767         SET_HARD_REG_BIT (tmp, FIRST_STACK_REG + 1);
2768       GO_IF_HARD_REG_EQUAL (regstack.reg_set, tmp, eh2);
2769       gcc_unreachable ();
2770     eh2:
2771
2772       target_stack->top = -1;
2773     }
2774
2775   /* It is better to output directly to the end of the block
2776      instead of to the edge, because emit_swap can do minimal
2777      insn scheduling.  We can do this when there is only one
2778      edge out, and it is not abnormal.  */
2779   else if (EDGE_COUNT (block->succs) == 1 && !(e->flags & EDGE_ABNORMAL))
2780     {
2781       /* change_stack kills values in regstack.  */
2782       tmpstack = regstack;
2783
2784       change_stack (BB_END (block), &tmpstack, target_stack,
2785                     (JUMP_P (BB_END (block))
2786                      ? EMIT_BEFORE : EMIT_AFTER));
2787     }
2788   else
2789     {
2790       rtx seq, after;
2791
2792       /* We don't support abnormal edges.  Global takes care to
2793          avoid any live register across them, so we should never
2794          have to insert instructions on such edges.  */
2795       gcc_assert (!(e->flags & EDGE_ABNORMAL));
2796
2797       current_block = NULL;
2798       start_sequence ();
2799
2800       /* ??? change_stack needs some point to emit insns after.  */
2801       after = emit_note (NOTE_INSN_DELETED);
2802
2803       tmpstack = regstack;
2804       change_stack (after, &tmpstack, target_stack, EMIT_BEFORE);
2805
2806       seq = get_insns ();
2807       end_sequence ();
2808
2809       insert_insn_on_edge (seq, e);
2810       return true;
2811     }
2812   return false;
2813 }
2814
2815 /* Convert stack register references in one block.  */
2816
2817 static int
2818 convert_regs_1 (FILE *file, basic_block block)
2819 {
2820   struct stack_def regstack;
2821   block_info bi = BLOCK_INFO (block);
2822   int deleted, inserted, reg;
2823   rtx insn, next;
2824   edge e, beste = NULL;
2825   bool control_flow_insn_deleted = false;
2826   edge_iterator ei;
2827
2828   inserted = 0;
2829   deleted = 0;
2830   any_malformed_asm = false;
2831
2832   /* Find the edge we will copy stack from.  It should be the most frequent
2833      one as it will get cheapest after compensation code is generated,
2834      if multiple such exists, take one with largest count, prefer critical
2835      one (as splitting critical edges is more expensive), or one with lowest
2836      index, to avoid random changes with different orders of the edges.  */
2837   FOR_EACH_EDGE (e, ei, block->preds)
2838     {
2839       if (e->flags & EDGE_DFS_BACK)
2840         ;
2841       else if (! beste)
2842         beste = e;
2843       else if (EDGE_FREQUENCY (beste) < EDGE_FREQUENCY (e))
2844         beste = e;
2845       else if (EDGE_FREQUENCY (beste) > EDGE_FREQUENCY (e))
2846         ;
2847       else if (beste->count < e->count)
2848         beste = e;
2849       else if (beste->count > e->count)
2850         ;
2851       else if ((EDGE_CRITICAL_P (e) != 0)
2852                != (EDGE_CRITICAL_P (beste) != 0))
2853         {
2854           if (EDGE_CRITICAL_P (e))
2855             beste = e;
2856         }
2857       else if (e->src->index < beste->src->index)
2858         beste = e;
2859     }
2860
2861   /* Initialize stack at block entry.  */
2862   if (bi->stack_in.top == -2)
2863     {
2864       if (beste)
2865         inserted |= compensate_edge (beste, file);
2866       else
2867         {
2868           /* No predecessors.  Create an arbitrary input stack.  */
2869           int reg;
2870
2871           bi->stack_in.top = -1;
2872           for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg)
2873             if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg))
2874               bi->stack_in.reg[++bi->stack_in.top] = reg;
2875         }
2876     }
2877   else
2878     /* Entry blocks do have stack already initialized.  */
2879     beste = NULL;
2880
2881   current_block = block;
2882
2883   if (file)
2884     {
2885       fprintf (file, "\nBasic block %d\nInput stack: ", block->index);
2886       print_stack (file, &bi->stack_in);
2887     }
2888
2889   /* Process all insns in this block.  Keep track of NEXT so that we
2890      don't process insns emitted while substituting in INSN.  */
2891   next = BB_HEAD (block);
2892   regstack = bi->stack_in;
2893   do
2894     {
2895       insn = next;
2896       next = NEXT_INSN (insn);
2897
2898       /* Ensure we have not missed a block boundary.  */
2899       gcc_assert (next);
2900       if (insn == BB_END (block))
2901         next = NULL;
2902
2903       /* Don't bother processing unless there is a stack reg
2904          mentioned or if it's a CALL_INSN.  */
2905       if (stack_regs_mentioned (insn)
2906           || CALL_P (insn))
2907         {
2908           if (file)
2909             {
2910               fprintf (file, "  insn %d input stack: ",
2911                        INSN_UID (insn));
2912               print_stack (file, &regstack);
2913             }
2914           control_flow_insn_deleted |= subst_stack_regs (insn, &regstack);
2915         }
2916     }
2917   while (next);
2918
2919   if (file)
2920     {
2921       fprintf (file, "Expected live registers [");
2922       for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; ++reg)
2923         if (TEST_HARD_REG_BIT (bi->out_reg_set, reg))
2924           fprintf (file, " %d", reg);
2925       fprintf (file, " ]\nOutput stack: ");
2926       print_stack (file, &regstack);
2927     }
2928
2929   insn = BB_END (block);
2930   if (JUMP_P (insn))
2931     insn = PREV_INSN (insn);
2932
2933   /* If the function is declared to return a value, but it returns one
2934      in only some cases, some registers might come live here.  Emit
2935      necessary moves for them.  */
2936
2937   for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; ++reg)
2938     {
2939       if (TEST_HARD_REG_BIT (bi->out_reg_set, reg)
2940           && ! TEST_HARD_REG_BIT (regstack.reg_set, reg))
2941         {
2942           rtx set;
2943
2944           if (file)
2945             fprintf (file, "Emitting insn initializing reg %d\n", reg);
2946
2947           set = gen_rtx_SET (VOIDmode, FP_MODE_REG (reg, SFmode), not_a_num);
2948           insn = emit_insn_after (set, insn);
2949           control_flow_insn_deleted |= subst_stack_regs (insn, &regstack);
2950         }
2951     }
2952   
2953   /* Amongst the insns possibly deleted during the substitution process above,
2954      might have been the only trapping insn in the block.  We purge the now
2955      possibly dead EH edges here to avoid an ICE from fixup_abnormal_edges,
2956      called at the end of convert_regs.  The order in which we process the
2957      blocks ensures that we never delete an already processed edge.
2958
2959      Note that, at this point, the CFG may have been damaged by the emission
2960      of instructions after an abnormal call, which moves the basic block end
2961      (and is the reason why we call fixup_abnormal_edges later).  So we must
2962      be sure that the trapping insn has been deleted before trying to purge
2963      dead edges, otherwise we risk purging valid edges.
2964
2965      ??? We are normally supposed not to delete trapping insns, so we pretend
2966      that the insns deleted above don't actually trap.  It would have been
2967      better to detect this earlier and avoid creating the EH edge in the first
2968      place, still, but we don't have enough information at that time.  */
2969
2970   if (control_flow_insn_deleted)
2971     purge_dead_edges (block);
2972
2973   /* Something failed if the stack lives don't match.  If we had malformed
2974      asms, we zapped the instruction itself, but that didn't produce the
2975      same pattern of register kills as before.  */
2976   GO_IF_HARD_REG_EQUAL (regstack.reg_set, bi->out_reg_set, win);
2977   gcc_assert (any_malformed_asm);
2978  win:
2979   bi->stack_out = regstack;
2980
2981   /* Compensate the back edges, as those wasn't visited yet.  */
2982   FOR_EACH_EDGE (e, ei, block->succs)
2983     {
2984       if (e->flags & EDGE_DFS_BACK
2985           || (e->dest == EXIT_BLOCK_PTR))
2986         {
2987           gcc_assert (BLOCK_INFO (e->dest)->done
2988                       || e->dest == block);
2989           inserted |= compensate_edge (e, file);
2990         }
2991     }
2992   FOR_EACH_EDGE (e, ei, block->preds)
2993     {
2994       if (e != beste && !(e->flags & EDGE_DFS_BACK)
2995           && e->src != ENTRY_BLOCK_PTR)
2996         {
2997           gcc_assert (BLOCK_INFO (e->src)->done);
2998           inserted |= compensate_edge (e, file);
2999         }
3000     }
3001
3002   return inserted;
3003 }
3004
3005 /* Convert registers in all blocks reachable from BLOCK.  */
3006
3007 static int
3008 convert_regs_2 (FILE *file, basic_block block)
3009 {
3010   basic_block *stack, *sp;
3011   int inserted;
3012
3013   /* We process the blocks in a top-down manner, in a way such that one block
3014      is only processed after all its predecessors.  The number of predecessors
3015      of every block has already been computed.  */ 
3016
3017   stack = xmalloc (sizeof (*stack) * n_basic_blocks);
3018   sp = stack;
3019
3020   *sp++ = block;
3021
3022   inserted = 0;
3023   do
3024     {
3025       edge e;
3026       edge_iterator ei;
3027
3028       block = *--sp;
3029
3030       /* Processing BLOCK is achieved by convert_regs_1, which may purge
3031          some dead EH outgoing edge after the deletion of the trapping
3032          insn inside the block.  Since the number of predecessors of
3033          BLOCK's successors was computed based on the initial edge set,
3034          we check the necessity to process some of these successors
3035          before such an edge deletion may happen.  However, there is
3036          a pitfall: if BLOCK is the only predecessor of a successor and
3037          the edge between them happens to be deleted, the successor
3038          becomes unreachable and should not be processed.  The problem
3039          is that there is no way to preventively detect this case so we
3040          stack the successor in all cases and hand over the task of
3041          fixing up the discrepancy to convert_regs_1.  */
3042
3043       FOR_EACH_EDGE (e, ei, block->succs)
3044         if (! (e->flags & EDGE_DFS_BACK))
3045           {
3046             BLOCK_INFO (e->dest)->predecessors--;
3047             if (!BLOCK_INFO (e->dest)->predecessors)
3048               *sp++ = e->dest;
3049           }
3050
3051       inserted |= convert_regs_1 (file, block);
3052       BLOCK_INFO (block)->done = 1;
3053     }
3054   while (sp != stack);
3055
3056   free (stack);
3057
3058   return inserted;
3059 }
3060
3061 /* Traverse all basic blocks in a function, converting the register
3062    references in each insn from the "flat" register file that gcc uses,
3063    to the stack-like registers the 387 uses.  */
3064
3065 static int
3066 convert_regs (FILE *file)
3067 {
3068   int inserted;
3069   basic_block b;
3070   edge e;
3071   edge_iterator ei;
3072
3073   /* Initialize uninitialized registers on function entry.  */
3074   inserted = convert_regs_entry ();
3075
3076   /* Construct the desired stack for function exit.  */
3077   convert_regs_exit ();
3078   BLOCK_INFO (EXIT_BLOCK_PTR)->done = 1;
3079
3080   /* ??? Future: process inner loops first, and give them arbitrary
3081      initial stacks which emit_swap_insn can modify.  This ought to
3082      prevent double fxch that often appears at the head of a loop.  */
3083
3084   /* Process all blocks reachable from all entry points.  */
3085   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
3086     inserted |= convert_regs_2 (file, e->dest);
3087
3088   /* ??? Process all unreachable blocks.  Though there's no excuse
3089      for keeping these even when not optimizing.  */
3090   FOR_EACH_BB (b)
3091     {
3092       block_info bi = BLOCK_INFO (b);
3093
3094       if (! bi->done)
3095         inserted |= convert_regs_2 (file, b);
3096     }
3097   clear_aux_for_blocks ();
3098
3099   fixup_abnormal_edges ();
3100   if (inserted)
3101     commit_edge_insertions ();
3102
3103   if (file)
3104     fputc ('\n', file);
3105
3106   return inserted;
3107 }
3108 #endif /* STACK_REGS */
3109
3110 #include "gt-reg-stack.h"