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