NetBSD/gnu/usr.bin/gcc2/arch/hp300/insn-output.c

7823 lines
145 KiB
C

/* Generated automatically by the program `genoutput'
from the machine description file `md'. */
#include "config.h"
#include "rtl.h"
#include "regs.h"
#include "hard-reg-set.h"
#include "real.h"
#include "insn-config.h"
#include "conditions.h"
#include "insn-flags.h"
#include "insn-attr.h"
#include "insn-codes.h"
#include "recog.h"
#include <stdio.h>
#include "output.h"
static char *
output_0 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[1]))
return "fmove%.d %f1,%0";
if (FPA_REG_P (operands[1]))
return "fpmove%.d %1, %x0";
return output_move_double (operands);
}
}
static char *
output_1 (operands, insn)
rtx *operands;
rtx insn;
{
{
return output_move_double (operands);
}
}
static char *
output_2 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef ISI_OV
/* ISI's assembler fails to handle tstl a0. */
if (! ADDRESS_REG_P (operands[0]))
#else
if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
#endif
return "tst%.l %0";
/* If you think that the 68020 does not support tstl a0,
reread page B-167 of the 68020 manual more carefully. */
/* On an address reg, cmpw may replace cmpl. */
#ifdef SGS_CMP_ORDER
return "cmp%.w %0,%#0";
#else
return "cmp%.w %#0,%0";
#endif
}
}
static char *
output_7 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags = CC_IN_68881;
if (FP_REG_P (operands[0]))
return "ftst%.x %0";
return "ftst%.s %0";
}
}
static char *
output_10 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags = CC_IN_68881;
if (FP_REG_P (operands[0]))
return "ftst%.x %0";
return "ftst%.d %0";
}
}
static char *
output_11 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
return "cmpm%.l %1,%0";
if (REG_P (operands[1])
|| (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
{ cc_status.flags |= CC_REVERSED;
#ifdef SGS_CMP_ORDER
return "cmp%.l %d1,%d0";
#else
return "cmp%.l %d0,%d1";
#endif
}
#ifdef SGS_CMP_ORDER
return "cmp%.l %d0,%d1";
#else
return "cmp%.l %d1,%d0";
#endif
}
}
static char *
output_12 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
return "cmpm%.w %1,%0";
if ((REG_P (operands[1]) && !ADDRESS_REG_P (operands[1]))
|| (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
{ cc_status.flags |= CC_REVERSED;
#ifdef SGS_CMP_ORDER
return "cmp%.w %d1,%d0";
#else
return "cmp%.w %d0,%d1";
#endif
}
#ifdef SGS_CMP_ORDER
return "cmp%.w %d0,%d1";
#else
return "cmp%.w %d1,%d0";
#endif
}
}
static char *
output_13 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
return "cmpm%.b %1,%0";
if (REG_P (operands[1])
|| (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
{ cc_status.flags |= CC_REVERSED;
#ifdef SGS_CMP_ORDER
return "cmp%.b %d1,%d0";
#else
return "cmp%.b %d0,%d1";
#endif
}
#ifdef SGS_CMP_ORDER
return "cmp%.b %d0,%d1";
#else
return "cmp%.b %d1,%d0";
#endif
}
}
static char *
output_16 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags = CC_IN_68881;
#ifdef SGS_CMP_ORDER
if (REG_P (operands[0]))
{
if (REG_P (operands[1]))
return "fcmp%.x %0,%1";
else
return "fcmp%.d %0,%f1";
}
cc_status.flags |= CC_REVERSED;
return "fcmp%.d %1,%f0";
#else
if (REG_P (operands[0]))
{
if (REG_P (operands[1]))
return "fcmp%.x %1,%0";
else
return "fcmp%.d %f1,%0";
}
cc_status.flags |= CC_REVERSED;
return "fcmp%.d %f0,%1";
#endif
}
}
static char *
output_19 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags = CC_IN_68881;
#ifdef SGS_CMP_ORDER
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "fcmp%.x %0,%1";
else
return "fcmp%.s %0,%f1";
}
cc_status.flags |= CC_REVERSED;
return "fcmp%.s %1,%f0";
#else
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "fcmp%.x %1,%0";
else
return "fcmp%.s %f1,%0";
}
cc_status.flags |= CC_REVERSED;
return "fcmp%.s %f0,%1";
#endif
}
}
static char *
output_20 (operands, insn)
rtx *operands;
rtx insn;
{
{ return output_btst (operands, operands[1], operands[0], insn, 7); }
}
static char *
output_21 (operands, insn)
rtx *operands;
rtx insn;
{
{ return output_btst (operands, operands[1], operands[0], insn, 31); }
}
static char *
output_22 (operands, insn)
rtx *operands;
rtx insn;
{
{ return output_btst (operands, operands[1], operands[0], insn, 7); }
}
static char *
output_23 (operands, insn)
rtx *operands;
rtx insn;
{
{ return output_btst (operands, operands[1], operands[0], insn, 31); }
}
static char *
output_24 (operands, insn)
rtx *operands;
rtx insn;
{
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
return output_btst (operands, operands[1], operands[0], insn, 7);
}
}
static char *
output_25 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == MEM)
{
operands[0] = adj_offsettable_operand (operands[0],
INTVAL (operands[1]) / 8);
operands[1] = gen_rtx (CONST_INT, VOIDmode,
7 - INTVAL (operands[1]) % 8);
return output_btst (operands, operands[1], operands[0], insn, 7);
}
operands[1] = gen_rtx (CONST_INT, VOIDmode,
31 - INTVAL (operands[1]));
return output_btst (operands, operands[1], operands[0], insn, 31);
}
}
static char *
output_26 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (operands[1] == const0_rtx)
return "clr%.l %0";
return "pea %a1";
}
}
static char *
output_27 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (ADDRESS_REG_P (operands[0]))
return "sub%.l %0,%0";
/* moveq is faster on the 68000. */
if (DATA_REG_P (operands[0]) && !TARGET_68020)
#if defined(MOTOROLA) && !defined(CRDS)
return "moveq%.l %#0,%0";
#else
return "moveq %#0,%0";
#endif
return "clr%.l %0";
}
}
static char *
output_29 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (which_alternative == 3)
return "fpmove%.l %x1,fpa0\n\tfpmove%.l fpa0,%x0";
if (FPA_REG_P (operands[1]) || FPA_REG_P (operands[0]))
return "fpmove%.l %x1,%x0";
if (GET_CODE (operands[1]) == CONST_INT)
{
if (operands[1] == const0_rtx
&& (DATA_REG_P (operands[0])
|| GET_CODE (operands[0]) == MEM)
/* clr insns on 68000 read before writing.
This isn't so on the 68010, but we have no alternative for it. */
&& (TARGET_68020
|| !(GET_CODE (operands[0]) == MEM
&& MEM_VOLATILE_P (operands[0]))))
return "clr%.l %0";
else if (DATA_REG_P (operands[0])
&& INTVAL (operands[1]) < 128
&& INTVAL (operands[1]) >= -128)
{
#if defined(MOTOROLA) && !defined(CRDS)
return "moveq%.l %1,%0";
#else
return "moveq %1,%0";
#endif
}
#ifndef NO_ADDSUB_Q
else if (DATA_REG_P (operands[0])
/* Do this with a moveq #N-8, dreg; addq #8,dreg */
&& INTVAL (operands[1]) < 136
&& INTVAL (operands[1]) >= 128)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
#if defined(MOTOROLA) && !defined(CRDS)
return "moveq%.l %1,%0\n\taddq%.w %#8,%0";
#else
return "moveq %1,%0\n\taddq%.w %#8,%0";
#endif
}
else if (DATA_REG_P (operands[0])
/* Do this with a moveq #N+8, dreg; subq #8,dreg */
&& INTVAL (operands[1]) < -128
&& INTVAL (operands[1]) >= -136)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) + 8);
#if defined(MOTOROLA) && !defined(CRDS)
return "moveq%.l %1,%0;subq%.w %#8,%0";
#else
return "moveq %1,%0;subq%.w %#8,%0";
#endif
}
#endif
else if (DATA_REG_P (operands[0])
/* If N is in the right range and is even, then use
moveq #N/2, dreg; addl dreg,dreg */
&& INTVAL (operands[1]) > 127
&& INTVAL (operands[1]) <= 254
&& INTVAL (operands[1]) % 2 == 0)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) / 2);
#if defined(MOTOROLA) && !defined(CRDS)
return "moveq%.l %1,%0\n\tadd%.w %0,%0";
#else
return "moveq %1,%0\n\tadd%.w %0,%0";
#endif
}
else if (ADDRESS_REG_P (operands[0])
&& INTVAL (operands[1]) < 0x8000
&& INTVAL (operands[1]) >= -0x8000)
return "move%.w %1,%0";
else if (push_operand (operands[0], SImode)
&& INTVAL (operands[1]) < 0x8000
&& INTVAL (operands[1]) >= -0x8000)
return "pea %a1";
}
else if ((GET_CODE (operands[1]) == SYMBOL_REF
|| GET_CODE (operands[1]) == CONST)
&& push_operand (operands[0], SImode))
return "pea %a1";
else if ((GET_CODE (operands[1]) == SYMBOL_REF
|| GET_CODE (operands[1]) == CONST)
&& ADDRESS_REG_P (operands[0]))
return "lea %a1,%0";
return "move%.l %1,%0";
}
}
static char *
output_30 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[1]) == CONST_INT)
{
if (operands[1] == const0_rtx
&& (DATA_REG_P (operands[0])
|| GET_CODE (operands[0]) == MEM)
/* clr insns on 68000 read before writing.
This isn't so on the 68010, but we have no alternative for it. */
&& (TARGET_68020
|| !(GET_CODE (operands[0]) == MEM
&& MEM_VOLATILE_P (operands[0]))))
return "clr%.w %0";
else if (DATA_REG_P (operands[0])
&& INTVAL (operands[1]) < 128
&& INTVAL (operands[1]) >= -128)
{
#if defined(MOTOROLA) && !defined(CRDS)
return "moveq%.l %1,%0";
#else
return "moveq %1,%0";
#endif
}
else if (INTVAL (operands[1]) < 0x8000
&& INTVAL (operands[1]) >= -0x8000)
return "move%.w %1,%0";
}
else if (CONSTANT_P (operands[1]))
return "move%.l %1,%0";
#ifndef SGS_NO_LI
/* Recognize the insn before a tablejump, one that refers
to a table of offsets. Such an insn will need to refer
to a label on the insn. So output one. Use the label-number
of the table of offsets to generate this label. */
if (GET_CODE (operands[1]) == MEM
&& GET_CODE (XEXP (operands[1], 0)) == PLUS
&& (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
|| GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == LABEL_REF)
&& GET_CODE (XEXP (XEXP (operands[1], 0), 0)) != PLUS
&& GET_CODE (XEXP (XEXP (operands[1], 0), 1)) != PLUS)
{
rtx labelref;
if (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF)
labelref = XEXP (XEXP (operands[1], 0), 0);
else
labelref = XEXP (XEXP (operands[1], 0), 1);
#if defined (MOTOROLA) && !defined (SGS_SWITCH_TABLES)
#ifdef SGS
asm_fprintf (asm_out_file, "\tset %LLI%d,.+2\n",
CODE_LABEL_NUMBER (XEXP (labelref, 0)));
#else /* not SGS */
asm_fprintf (asm_out_file, "\t.set %LLI%d,.+2\n",
CODE_LABEL_NUMBER (XEXP (labelref, 0)));
#endif /* not SGS */
#else /* SGS_SWITCH_TABLES or not MOTOROLA */
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LI",
CODE_LABEL_NUMBER (XEXP (labelref, 0)));
#ifdef SGS_SWITCH_TABLES
/* Set flag saying we need to define the symbol
LD%n (with value L%n-LI%n) at the end of the switch table. */
switch_table_difference_label_flag = 1;
#endif /* SGS_SWITCH_TABLES */
#endif /* SGS_SWITCH_TABLES or not MOTOROLA */
}
#endif /* SGS_NO_LI */
return "move%.w %1,%0";
}
}
static char *
output_31 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[1]) == CONST_INT)
{
if (operands[1] == const0_rtx
&& (DATA_REG_P (operands[0])
|| GET_CODE (operands[0]) == MEM)
/* clr insns on 68000 read before writing.
This isn't so on the 68010, but we have no alternative for it. */
&& (TARGET_68020
|| !(GET_CODE (operands[0]) == MEM
&& MEM_VOLATILE_P (operands[0]))))
return "clr%.w %0";
}
return "move%.w %1,%0";
}
}
static char *
output_32 (operands, insn)
rtx *operands;
rtx insn;
{
{
rtx xoperands[4];
/* This is probably useless, since it loses for pushing a struct
of several bytes a byte at a time. */
if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == PRE_DEC
&& XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx)
{
xoperands[1] = operands[1];
xoperands[2]
= gen_rtx (MEM, QImode,
gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, const1_rtx));
/* Just pushing a byte puts it in the high byte of the halfword. */
/* We must put it in the low-order, high-numbered byte. */
output_asm_insn ("move%.b %1,%-\n\tmove%.b %@,%2", xoperands);
return "";
}
/* Moving a byte into an address register is not possible. */
/* Use d0 as an intermediate, but don't clobber its contents. */
if (ADDRESS_REG_P (operands[0]) && GET_CODE (operands[1]) == MEM)
{
/* ??? For 2.5, don't allow this choice and use secondary reloads
instead.
See if the address register is used in the address. If it
is, we have to generate a more complex sequence than those below. */
if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
operands[1], NULL_RTX))
{
/* See if the stack pointer is used in the address. If it isn't,
we can push d0 or d1 (the insn can't use both of them) on
the stack, perform our move into d0/d1, copy the byte from d0/1,
and pop d0/1. */
if (! reg_mentioned_p (stack_pointer_rtx, operands[1]))
{
if (refers_to_regno_p (0, 1, operands[1], NULL_RTX))
return "move%.l %/d0,%-\n\tmove%.b %1,%/d0\n\tmove%.l %/d0,%0\n\tmove%.l %+,%/d0";
else
return "move%.l %/d1,%-\n\tmove%.b %1,%/d1\n\tmove%.l %/d1,%0\n\tmove%.l %+,%/d1";
}
else
{
/* Otherwise, we know that d0 cannot be used in the address
(since sp and one address register is). Assume that sp is
being used as a base register and replace the address
register that is our operand[0] with d0. */
rtx reg_map[FIRST_PSEUDO_REGISTER];
int i;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
reg_map[i] = 0;
reg_map[REGNO (operands[0])] = gen_rtx (REG, Pmode, 0);
operands[1] = copy_rtx (operands[1]);
replace_regs (operands[1], reg_map, FIRST_PSEUDO_REGISTER, 0);
return "exg %/d0,%0\n\tmove%.b %1,%/d0\n\texg %/d0,%0";
}
}
/* If the address of operand 1 uses d0, choose d1 as intermediate. */
if (refers_to_regno_p (0, 1, operands[1], NULL_RTX))
return "exg %/d1,%0\n\tmove%.b %1,%/d1\n\texg %/d1,%0";
/* Otherwise d0 is usable.
(An effective address on the 68k can't use two d-regs.) */
else
return "exg %/d0,%0\n\tmove%.b %1,%/d0\n\texg %/d0,%0";
}
/* Likewise for moving from an address reg. */
if (ADDRESS_REG_P (operands[1]) && GET_CODE (operands[0]) == MEM)
{
/* ??? For 2.5, don't allow this choice and use secondary reloads
instead.
See if the address register is used in the address. If it
is, we have to generate a more complex sequence than those below. */
if (refers_to_regno_p (REGNO (operands[1]), REGNO (operands[1]) + 1,
operands[0], NULL_RTX))
{
/* See if the stack pointer is used in the address. If it isn't,
we can push d0 or d1 (the insn can't use both of them) on
the stack, copy the byte to d0/1, perform our move from d0/d1,
and pop d0/1. */
if (! reg_mentioned_p (stack_pointer_rtx, operands[0]))
{
if (refers_to_regno_p (0, 1, operands[0], NULL_RTX))
return "move%.l %/d0,%-\n\tmove%.l %1,%/d0\n\tmove%.b %/d0,%0\n\tmove%.l %+,%/d0";
else
return "move%.l %/d1,%-\n\tmove%.l %1,%/d1\n\tmove%.b %/d1,%0\n\tmove%.l %+,%/d1";
}
else
{
/* Otherwise, we know that d0 cannot be used in the address
(since sp and one address register is). Assume that sp is
being used as a base register and replace the address
register that is our operand[1] with d0. */
rtx reg_map[FIRST_PSEUDO_REGISTER];
int i;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
reg_map[i] = 0;
reg_map[REGNO (operands[1])] = gen_rtx (REG, Pmode, 0);
operands[0] = copy_rtx (operands[0]);
replace_regs (operands[0], reg_map, FIRST_PSEUDO_REGISTER, 0);
return "exg %/d0,%1\n\tmove%.b %/d0,%0\n\texg %/d0,%1";
}
}
if (refers_to_regno_p (0, 1, operands[0], NULL_RTX))
return "exg %/d1,%1\n\tmove%.b %/d1,%0\n\texg %/d1,%1";
else
return "exg %/d0,%1\n\tmove%.b %/d0,%0\n\texg %/d0,%1";
}
/* clr and st insns on 68000 read before writing.
This isn't so on the 68010, but we have no alternative for it. */
if (TARGET_68020
|| !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0])))
{
if (operands[1] == const0_rtx)
return "clr%.b %0";
if (GET_CODE (operands[1]) == CONST_INT
&& INTVAL (operands[1]) == -1)
{
CC_STATUS_INIT;
return "st %0";
}
}
if (GET_CODE (operands[1]) != CONST_INT && CONSTANT_P (operands[1]))
return "move%.l %1,%0";
if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
return "move%.w %1,%0";
return "move%.b %1,%0";
}
}
static char *
output_33 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (operands[1] == const0_rtx
/* clr insns on 68000 read before writing.
This isn't so on the 68010, but we have no alternative for it. */
&& (TARGET_68020
|| !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0]))))
return "clr%.b %0";
return "move%.b %1,%0";
}
}
static char *
output_34 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (which_alternative >= 4)
return "fpmove%.s %1,fpa0\n\tfpmove%.s fpa0,%0";
if (FPA_REG_P (operands[0]))
{
if (FPA_REG_P (operands[1]))
return "fpmove%.s %x1,%x0";
else if (GET_CODE (operands[1]) == CONST_DOUBLE)
return output_move_const_single (operands);
else if (FP_REG_P (operands[1]))
return "fmove%.s %1,sp@-\n\tfpmove%.d sp@+, %0";
return "fpmove%.s %x1,%x0";
}
if (FPA_REG_P (operands[1]))
{
if (FP_REG_P (operands[0]))
return "fpmove%.s %x1,sp@-\n\tfmove%.s sp@+,%0";
else
return "fpmove%.s %x1,%x0";
}
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "f%$move%.x %1,%0";
else if (ADDRESS_REG_P (operands[1]))
return "move%.l %1,%-\n\tf%$move%.s %+,%0";
else if (GET_CODE (operands[1]) == CONST_DOUBLE)
return output_move_const_single (operands);
return "f%$move%.s %f1,%0";
}
if (FP_REG_P (operands[1]))
{
if (ADDRESS_REG_P (operands[0]))
return "fmove%.s %1,%-\n\tmove%.l %+,%0";
return "fmove%.s %f1,%0";
}
return "move%.l %1,%0";
}
}
static char *
output_35 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (which_alternative == 6)
return "fpmove%.d %x1,fpa0\n\tfpmove%.d fpa0,%x0";
if (FPA_REG_P (operands[0]))
{
if (GET_CODE (operands[1]) == CONST_DOUBLE)
return output_move_const_double (operands);
if (FP_REG_P (operands[1]))
return "fmove%.d %1,sp@-\n\tfpmove%.d sp@+,%x0";
return "fpmove%.d %x1,%x0";
}
else if (FPA_REG_P (operands[1]))
{
if (FP_REG_P(operands[0]))
return "fpmove%.d %x1,sp@-\n\tfmoved sp@+,%0";
else
return "fpmove%.d %x1,%x0";
}
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "f%&move%.x %1,%0";
if (REG_P (operands[1]))
{
rtx xoperands[2];
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
output_asm_insn ("move%.l %1,%-", xoperands);
output_asm_insn ("move%.l %1,%-", operands);
return "f%&move%.d %+,%0";
}
if (GET_CODE (operands[1]) == CONST_DOUBLE)
return output_move_const_double (operands);
return "f%&move%.d %f1,%0";
}
else if (FP_REG_P (operands[1]))
{
if (REG_P (operands[0]))
{
output_asm_insn ("fmove%.d %f1,%-\n\tmove%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
return "move%.l %+,%0";
}
else
return "fmove%.d %f1,%0";
}
return output_move_double (operands);
}
}
static char *
output_37 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "fmove%.x %1,%0";
if (REG_P (operands[1]))
{
rtx xoperands[2];
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
output_asm_insn ("move%.l %1,%-", xoperands);
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
output_asm_insn ("move%.l %1,%-", xoperands);
output_asm_insn ("move%.l %1,%-", operands);
return "fmove%.x %+,%0";
}
if (GET_CODE (operands[1]) == CONST_DOUBLE)
return "fmove%.x %1,%0";
return "fmove%.x %f1,%0";
}
if (REG_P (operands[0]))
{
output_asm_insn ("fmove%.x %f1,%-\n\tmove%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
output_asm_insn ("move%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
return "move%.l %+,%0";
}
return "fmove%.x %f1,%0";
}
}
static char *
output_38 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "fmove%.x %1,%0";
if (REG_P (operands[1]))
{
rtx xoperands[2];
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
output_asm_insn ("move%.l %1,%-", xoperands);
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
output_asm_insn ("move%.l %1,%-", xoperands);
output_asm_insn ("move%.l %1,%-", operands);
return "fmove%.x %+,%0";
}
if (GET_CODE (operands[1]) == CONST_DOUBLE)
return "fmove%.x %1,%0";
return "fmove%.x %f1,%0";
}
if (FP_REG_P (operands[1]))
{
if (REG_P (operands[0]))
{
output_asm_insn ("fmove%.x %f1,%-\n\tmove%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
output_asm_insn ("move%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
return "move%.l %+,%0";
}
else
return "fmove%.x %f1,%0";
}
return output_move_double (operands);
}
}
static char *
output_39 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (which_alternative == 8)
return "fpmove%.d %x1,fpa0\n\tfpmove%.d fpa0,%x0";
if (FPA_REG_P (operands[0]) || FPA_REG_P (operands[1]))
return "fpmove%.d %x1,%x0";
if (FP_REG_P (operands[0]))
{
if (FP_REG_P (operands[1]))
return "fmove%.x %1,%0";
if (REG_P (operands[1]))
{
rtx xoperands[2];
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
output_asm_insn ("move%.l %1,%-", xoperands);
output_asm_insn ("move%.l %1,%-", operands);
return "fmove%.d %+,%0";
}
if (GET_CODE (operands[1]) == CONST_DOUBLE)
return output_move_const_double (operands);
return "fmove%.d %f1,%0";
}
else if (FP_REG_P (operands[1]))
{
if (REG_P (operands[0]))
{
output_asm_insn ("fmove%.d %f1,%-\n\tmove%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
return "move%.l %+,%0";
}
else
return "fmove%.d %f1,%0";
}
return output_move_double (operands);
}
}
static char *
output_41 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == REG)
{
/* Must clear condition codes, since the move.l bases them on
the entire 32 bits, not just the desired 8 bits. */
CC_STATUS_INIT;
return "move%.l %1,%0";
}
if (GET_CODE (operands[1]) == MEM)
operands[1] = adj_offsettable_operand (operands[1], 3);
return "move%.b %1,%0";
}
}
static char *
output_42 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == REG
&& (GET_CODE (operands[1]) == MEM
|| GET_CODE (operands[1]) == CONST_INT))
{
/* Must clear condition codes, since the move.w bases them on
the entire 16 bits, not just the desired 8 bits. */
CC_STATUS_INIT;
return "move%.w %1,%0";
}
if (GET_CODE (operands[0]) == REG)
{
/* Must clear condition codes, since the move.l bases them on
the entire 32 bits, not just the desired 8 bits. */
CC_STATUS_INIT;
return "move%.l %1,%0";
}
if (GET_CODE (operands[1]) == MEM)
operands[1] = adj_offsettable_operand (operands[1], 1);
return "move%.b %1,%0";
}
}
static char *
output_43 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[0]) == REG)
{
/* Must clear condition codes, since the move.l bases them on
the entire 32 bits, not just the desired 8 bits. */
CC_STATUS_INIT;
return "move%.l %1,%0";
}
if (GET_CODE (operands[1]) == MEM)
operands[1] = adj_offsettable_operand (operands[1], 2);
return "move%.w %1,%0";
}
}
static char *
output_47 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (DATA_REG_P (operands[0]))
{
if (GET_CODE (operands[1]) == REG
&& REGNO (operands[0]) == REGNO (operands[1]))
return "and%.l %#0xFFFF,%0";
if (reg_mentioned_p (operands[0], operands[1]))
return "move%.w %1,%0\n\tand%.l %#0xFFFF,%0";
return "clr%.l %0\n\tmove%.w %1,%0";
}
else if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
return "move%.w %1,%0\n\tclr%.w %0";
else if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == POST_INC)
return "clr%.w %0\n\tmove%.w %1,%0";
else
{
output_asm_insn ("clr%.w %0", operands);
operands[0] = adj_offsettable_operand (operands[0], 2);
return "move%.w %1,%0";
}
}
}
static char *
output_48 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (DATA_REG_P (operands[0]))
{
if (GET_CODE (operands[1]) == REG
&& REGNO (operands[0]) == REGNO (operands[1]))
return "and%.w %#0xFF,%0";
if (reg_mentioned_p (operands[0], operands[1]))
return "move%.b %1,%0\n\tand%.w %#0xFF,%0";
return "clr%.w %0\n\tmove%.b %1,%0";
}
else if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
{
if (REGNO (XEXP (XEXP (operands[0], 0), 0))
== STACK_POINTER_REGNUM)
{
output_asm_insn ("clr%.w %-", operands);
operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
plus_constant (stack_pointer_rtx, 1));
return "move%.b %1,%0";
}
else
return "move%.b %1,%0\n\tclr%.b %0";
}
else if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == POST_INC)
return "clr%.b %0\n\tmove%.b %1,%0";
else
{
output_asm_insn ("clr%.b %0", operands);
operands[0] = adj_offsettable_operand (operands[0], 1);
return "move%.b %1,%0";
}
}
}
static char *
output_49 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (DATA_REG_P (operands[0]))
{
if (GET_CODE (operands[1]) == REG
&& REGNO (operands[0]) == REGNO (operands[1]))
return "and%.l %#0xFF,%0";
if (reg_mentioned_p (operands[0], operands[1]))
return "move%.b %1,%0\n\tand%.l %#0xFF,%0";
return "clr%.l %0\n\tmove%.b %1,%0";
}
else if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
{
operands[0] = XEXP (XEXP (operands[0], 0), 0);
#ifdef MOTOROLA
#ifdef SGS
return "clr%.l -(%0)\n\tmove%.b %1,3(%0)";
#else
return "clr%.l -(%0)\n\tmove%.b %1,(3,%0)";
#endif
#else
return "clrl %0@-\n\tmoveb %1,%0@(3)";
#endif
}
else if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == POST_INC)
{
operands[0] = XEXP (XEXP (operands[0], 0), 0);
#ifdef MOTOROLA
#ifdef SGS
return "clr%.l (%0)+\n\tmove%.b %1,-1(%0)";
#else
return "clr%.l (%0)+\n\tmove%.b %1,(-1,%0)";
#endif
#else
return "clrl %0@+\n\tmoveb %1,%0@(-1)";
#endif
}
else
{
output_asm_insn ("clr%.l %0", operands);
operands[0] = adj_offsettable_operand (operands[0], 3);
return "move%.b %1,%0";
}
}
}
static char *
output_50 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (ADDRESS_REG_P (operands[0]))
return "move%.w %1,%0";
return "ext%.l %0";
}
}
static char *
output_55 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
{
if (REGNO (operands[0]) == REGNO (operands[1]))
{
/* Extending float to double in an fp-reg is a no-op.
NOTICE_UPDATE_CC has already assumed that the
cc will be set. So cancel what it did. */
cc_status = cc_prev_status;
return "";
}
return "f%&move%.x %1,%0";
}
if (FP_REG_P (operands[0]))
return "f%&move%.s %f1,%0";
if (DATA_REG_P (operands[0]) && FP_REG_P (operands[1]))
{
output_asm_insn ("fmove%.d %f1,%-\n\tmove%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
return "move%.l %+,%0";
}
return "fmove%.d %f1,%0";
}
}
static char *
output_58 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[1]))
return "f%$move%.x %1,%0";
return "f%$move%.d %f1,%0";
}
}
static char *
output_70 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "fmovem%.l %!,%2\n\tmoveq %#16,%3\n\tor%.l %2,%3\n\tand%.w %#-33,%3\n\tfmovem%.l %3,%!\n\tfmove%.l %1,%0\n\tfmovem%.l %2,%!";
}
}
static char *
output_71 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "fmovem%.l %!,%2\n\tmoveq %#16,%3\n\tor%.l %2,%3\n\tand%.w %#-33,%3\n\tfmovem%.l %3,%!\n\tfmove%.w %1,%0\n\tfmovem%.l %2,%!";
}
}
static char *
output_72 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "fmovem%.l %!,%2\n\tmoveq %#16,%3\n\tor%.l %2,%3\n\tand%.w %#-33,%3\n\tfmovem%.l %3,%!\n\tfmove%.b %1,%0\n\tfmovem%.l %2,%!";
}
}
static char *
output_73 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[1]))
return "fintrz%.x %f1,%0";
return "fintrz%.d %f1,%0";
}
}
static char *
output_74 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[1]))
return "fintrz%.x %f1,%0";
return "fintrz%.s %f1,%0";
}
}
static char *
output_83 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (! operands_match_p (operands[0], operands[1]))
{
if (!ADDRESS_REG_P (operands[1]))
{
rtx tmp = operands[1];
operands[1] = operands[2];
operands[2] = tmp;
}
/* These insns can result from reloads to access
stack slots over 64k from the frame pointer. */
if (GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
return "move%.l %2,%0\n\tadd%.l %1,%0";
#ifdef SGS
if (GET_CODE (operands[2]) == REG)
return "lea 0(%1,%2.l),%0";
else
return "lea %c2(%1),%0";
#else /* not SGS */
#ifdef MOTOROLA
if (GET_CODE (operands[2]) == REG)
return "lea (%1,%2.l),%0";
else
return "lea (%c2,%1),%0";
#else /* not MOTOROLA (MIT syntax) */
if (GET_CODE (operands[2]) == REG)
return "lea %1@(0,%2:l),%0";
else
return "lea %1@(%c2),%0";
#endif /* not MOTOROLA */
#endif /* not SGS */
}
if (GET_CODE (operands[2]) == CONST_INT)
{
#ifndef NO_ADDSUB_Q
if (INTVAL (operands[2]) > 0
&& INTVAL (operands[2]) <= 8)
return (ADDRESS_REG_P (operands[0])
? "addq%.w %2,%0"
: "addq%.l %2,%0");
if (INTVAL (operands[2]) < 0
&& INTVAL (operands[2]) >= -8)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[2]));
return (ADDRESS_REG_P (operands[0])
? "subq%.w %2,%0"
: "subq%.l %2,%0");
}
/* On everything except the 68000 it is faster to use two
addqw instructions to add a small integer (8 < N <= 16)
to an address register. Likewise for subqw.*/
if (INTVAL (operands[2]) > 8
&& INTVAL (operands[2]) <= 16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
return "addq%.w %#8,%0\n\taddq%.w %2,%0";
}
if (INTVAL (operands[2]) < -8
&& INTVAL (operands[2]) >= -16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[2]) - 8);
return "subq%.w %#8,%0\n\tsubq%.w %2,%0";
}
#endif
if (ADDRESS_REG_P (operands[0])
&& INTVAL (operands[2]) >= -0x8000
&& INTVAL (operands[2]) < 0x8000)
return "add%.w %2,%0";
}
return "add%.l %2,%0";
}
}
static char *
output_85 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[2]) == CONST_INT)
{
/* If the constant would be a negative number when interpreted as
HImode, make it negative. This is usually, but not always, done
elsewhere in the compiler. First check for constants out of range,
which could confuse us. */
if (INTVAL (operands[2]) >= 32768)
operands[2] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[2]) - 65536);
if (INTVAL (operands[2]) > 0
&& INTVAL (operands[2]) <= 8)
return "addq%.w %2,%0";
if (INTVAL (operands[2]) < 0
&& INTVAL (operands[2]) >= -8)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[2]));
return "subq%.w %2,%0";
}
/* On everything except the 68000 it is faster to use two
addqw instructions to add a small integer (8 < N <= 16)
to an address register. Likewise for subqw. */
if (INTVAL (operands[2]) > 8
&& INTVAL (operands[2]) <= 16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
return "addq%.w %#8,%0\n\taddq%.w %2,%0";
}
if (INTVAL (operands[2]) < -8
&& INTVAL (operands[2]) >= -16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[2]) - 8);
return "subq%.w %#8,%0\n\tsubq%.w %2,%0";
}
}
#endif
return "add%.w %2,%0";
}
}
static char *
output_86 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[1]) == CONST_INT)
{
/* If the constant would be a negative number when interpreted as
HImode, make it negative. This is usually, but not always, done
elsewhere in the compiler. First check for constants out of range,
which could confuse us. */
if (INTVAL (operands[1]) >= 32768)
operands[1] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[1]) - 65536);
if (INTVAL (operands[1]) > 0
&& INTVAL (operands[1]) <= 8)
return "addq%.w %1,%0";
if (INTVAL (operands[1]) < 0
&& INTVAL (operands[1]) >= -8)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[1]));
return "subq%.w %1,%0";
}
/* On everything except the 68000 it is faster to use two
addqw instructions to add a small integer (8 < N <= 16)
to an address register. Likewise for subqw. */
if (INTVAL (operands[1]) > 8
&& INTVAL (operands[1]) <= 16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
return "addq%.w %#8,%0\n\taddq%.w %1,%0";
}
if (INTVAL (operands[1]) < -8
&& INTVAL (operands[1]) >= -16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[1]) - 8);
return "subq%.w %#8,%0\n\tsubq%.w %1,%0";
}
}
#endif
return "add%.w %1,%0";
}
}
static char *
output_87 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[1]) == CONST_INT)
{
/* If the constant would be a negative number when interpreted as
HImode, make it negative. This is usually, but not always, done
elsewhere in the compiler. First check for constants out of range,
which could confuse us. */
if (INTVAL (operands[1]) >= 32768)
operands[1] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[1]) - 65536);
if (INTVAL (operands[1]) > 0
&& INTVAL (operands[1]) <= 8)
return "addq%.w %1,%0";
if (INTVAL (operands[1]) < 0
&& INTVAL (operands[1]) >= -8)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[1]));
return "subq%.w %1,%0";
}
/* On everything except the 68000 it is faster to use two
addqw instructions to add a small integer (8 < N <= 16)
to an address register. Likewise for subqw. */
if (INTVAL (operands[1]) > 8
&& INTVAL (operands[1]) <= 16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
return "addq%.w %#8,%0\n\taddq%.w %1,%0";
}
if (INTVAL (operands[1]) < -8
&& INTVAL (operands[1]) >= -16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode,
- INTVAL (operands[1]) - 8);
return "subq%.w %#8,%0\n\tsubq%.w %1,%0";
}
}
#endif
return "add%.w %1,%0";
}
}
static char *
output_88 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[2]) == CONST_INT)
{
if (INTVAL (operands[2]) >= 128)
operands[2] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[2]) - 256);
if (INTVAL (operands[2]) > 0
&& INTVAL (operands[2]) <= 8)
return "addq%.b %2,%0";
if (INTVAL (operands[2]) < 0 && INTVAL (operands[2]) >= -8)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[2]));
return "subq%.b %2,%0";
}
}
#endif
return "add%.b %2,%0";
}
}
static char *
output_89 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[1]) == CONST_INT)
{
if (INTVAL (operands[1]) >= 128)
operands[1] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[1]) - 256);
if (INTVAL (operands[1]) > 0
&& INTVAL (operands[1]) <= 8)
return "addq%.b %1,%0";
if (INTVAL (operands[1]) < 0 && INTVAL (operands[1]) >= -8)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[1]));
return "subq%.b %1,%0";
}
}
#endif
return "add%.b %1,%0";
}
}
static char *
output_90 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[1]) == CONST_INT)
{
if (INTVAL (operands[1]) >= 128)
operands[1] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[1]) - 256);
if (INTVAL (operands[1]) > 0
&& INTVAL (operands[1]) <= 8)
return "addq%.b %1,%0";
if (INTVAL (operands[1]) < 0 && INTVAL (operands[1]) >= -8)
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[1]));
return "subq%.b %1,%0";
}
}
#endif
return "add%.b %1,%0";
}
}
static char *
output_92 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[0], operands[1]))
return "fpadd%.d %y2,%0";
if (rtx_equal_p (operands[0], operands[2]))
return "fpadd%.d %y1,%0";
if (which_alternative == 0)
return "fpadd3%.d %w2,%w1,%0";
return "fpadd3%.d %x2,%x1,%0";
}
}
static char *
output_93 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "f%&add%.x %2,%0";
return "f%&add%.d %f2,%0";
}
}
static char *
output_95 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[0], operands[1]))
return "fpadd%.s %w2,%0";
if (rtx_equal_p (operands[0], operands[2]))
return "fpadd%.s %w1,%0";
if (which_alternative == 0)
return "fpadd3%.s %w2,%w1,%0";
return "fpadd3%.s %2,%1,%0";
}
}
static char *
output_96 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
return "f%$add%.x %2,%0";
return "f%$add%.s %f2,%0";
}
}
static char *
output_97 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (! operands_match_p (operands[0], operands[1]))
{
if (operands_match_p (operands[0], operands[2]))
{
#ifndef NO_ADDSUB_Q
if (GET_CODE (operands[1]) == CONST_INT)
{
if (INTVAL (operands[1]) > 0
&& INTVAL (operands[1]) <= 8)
return "subq%.l %1,%0\n\tneg%.l %0";
}
#endif
return "sub%.l %1,%0\n\tneg%.l %0";
}
/* This case is matched by J, but negating -0x8000
in an lea would give an invalid displacement.
So do this specially. */
if (INTVAL (operands[2]) == -0x8000)
return "move%.l %1,%0\n\tsub%.l %2,%0";
#ifdef SGS
return "lea %n2(%1),%0";
#else
#ifdef MOTOROLA
return "lea (%n2,%1),%0";
#else /* not MOTOROLA (MIT syntax) */
return "lea %1@(%n2),%0";
#endif /* not MOTOROLA */
#endif /* not SGS */
}
if (GET_CODE (operands[2]) == CONST_INT)
{
#ifndef NO_ADDSUB_Q
if (INTVAL (operands[2]) > 0
&& INTVAL (operands[2]) <= 8)
return "subq%.l %2,%0";
/* Using two subqw for 8 < N <= 16 being subtracted from an
address register is faster on all but 68000 */
if (INTVAL (operands[2]) > 8
&& INTVAL (operands[2]) <= 16
&& ADDRESS_REG_P (operands[0])
&& TARGET_68020)
{
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
return "subq%.w %#8,%0\n\tsubq%.w %2,%0";
}
#endif
if (ADDRESS_REG_P (operands[0])
&& INTVAL (operands[2]) >= -0x8000
&& INTVAL (operands[2]) < 0x8000)
return "sub%.w %2,%0";
}
return "sub%.l %2,%0";
}
}
static char *
output_104 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[0], operands[2]))
return "fprsub%.d %y1,%0";
if (rtx_equal_p (operands[0], operands[1]))
return "fpsub%.d %y2,%0";
if (which_alternative == 0)
return "fpsub3%.d %w2,%w1,%0";
return "fpsub3%.d %x2,%x1,%0";
}
}
static char *
output_105 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "f%&sub%.x %2,%0";
return "f%&sub%.d %f2,%0";
}
}
static char *
output_107 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[0], operands[2]))
return "fprsub%.s %w1,%0";
if (rtx_equal_p (operands[0], operands[1]))
return "fpsub%.s %w2,%0";
if (which_alternative == 0)
return "fpsub3%.s %w2,%w1,%0";
return "fpsub3%.s %2,%1,%0";
}
}
static char *
output_108 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
return "f%$sub%.x %2,%0";
return "f%$sub%.s %f2,%0";
}
}
static char *
output_109 (operands, insn)
rtx *operands;
rtx insn;
{
{
#if defined(MOTOROLA) && !defined(CRDS)
return "muls%.w %2,%0";
#else
return "muls %2,%0";
#endif
}
}
static char *
output_110 (operands, insn)
rtx *operands;
rtx insn;
{
{
#if defined(MOTOROLA) && !defined(CRDS)
return "muls%.w %2,%0";
#else
return "muls %2,%0";
#endif
}
}
static char *
output_111 (operands, insn)
rtx *operands;
rtx insn;
{
{
#if defined(MOTOROLA) && !defined(CRDS)
return "muls%.w %2,%0";
#else
return "muls %2,%0";
#endif
}
}
static char *
output_113 (operands, insn)
rtx *operands;
rtx insn;
{
{
#if defined(MOTOROLA) && !defined(CRDS)
return "mulu%.w %2,%0";
#else
return "mulu %2,%0";
#endif
}
}
static char *
output_114 (operands, insn)
rtx *operands;
rtx insn;
{
{
#if defined(MOTOROLA) && !defined(CRDS)
return "mulu%.w %2,%0";
#else
return "mulu %2,%0";
#endif
}
}
static char *
output_122 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[1], operands[2]))
return "fpsqr%.d %y1,%0";
if (rtx_equal_p (operands[0], operands[1]))
return "fpmul%.d %y2,%0";
if (rtx_equal_p (operands[0], operands[2]))
return "fpmul%.d %y1,%0";
if (which_alternative == 0)
return "fpmul3%.d %w2,%w1,%0";
return "fpmul3%.d %x2,%x1,%0";
}
}
static char *
output_123 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[2]) == CONST_DOUBLE
&& floating_exact_log2 (operands[2]) && !TARGET_68040)
{
int i = floating_exact_log2 (operands[2]);
operands[2] = gen_rtx (CONST_INT, VOIDmode, i);
return "fscale%.l %2,%0";
}
if (REG_P (operands[2]))
return "f%&mul%.x %2,%0";
return "f%&mul%.d %f2,%0";
}
}
static char *
output_125 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[1], operands[2]))
return "fpsqr%.s %w1,%0";
if (rtx_equal_p (operands[0], operands[1]))
return "fpmul%.s %w2,%0";
if (rtx_equal_p (operands[0], operands[2]))
return "fpmul%.s %w1,%0";
if (which_alternative == 0)
return "fpmul3%.s %w2,%w1,%0";
return "fpmul3%.s %2,%1,%0";
}
}
static char *
output_126 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef FSGLMUL_USE_S
if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
return (TARGET_68040_ONLY
? "fsmul%.s %2,%0"
: "fsglmul%.s %2,%0");
#else
if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
return (TARGET_68040_ONLY
? "fsmul%.x %2,%0"
: "fsglmul%.x %2,%0");
#endif
return (TARGET_68040_ONLY
? "fsmul%.s %f2,%0"
: "fsglmul%.s %f2,%0");
}
}
static char *
output_127 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
return "ext%.l %0\n\tdivs%.w %2,%0";
#else
return "extl %0\n\tdivs %2,%0";
#endif
}
}
static char *
output_128 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
return "divs%.w %2,%0";
#else
return "divs %2,%0";
#endif
}
}
static char *
output_129 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
return "divs%.w %2,%0";
#else
return "divs %2,%0";
#endif
}
}
static char *
output_130 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
return "and%.l %#0xFFFF,%0\n\tdivu%.w %2,%0";
#else
return "andl %#0xFFFF,%0\n\tdivu %2,%0";
#endif
}
}
static char *
output_131 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
return "divu%.w %2,%0";
#else
return "divu %2,%0";
#endif
}
}
static char *
output_132 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
return "divu%.w %2,%0";
#else
return "divu %2,%0";
#endif
}
}
static char *
output_134 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[0], operands[2]))
return "fprdiv%.d %y1,%0";
if (rtx_equal_p (operands[0], operands[1]))
return "fpdiv%.d %y2,%0";
if (which_alternative == 0)
return "fpdiv3%.d %w2,%w1,%0";
return "fpdiv3%.d %x2,%x1,%x0";
}
}
static char *
output_135 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "f%&div%.x %2,%0";
return "f%&div%.d %f2,%0";
}
}
static char *
output_137 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (rtx_equal_p (operands[0], operands[1]))
return "fpdiv%.s %w2,%0";
if (rtx_equal_p (operands[0], operands[2]))
return "fprdiv%.s %w1,%0";
if (which_alternative == 0)
return "fpdiv3%.s %w2,%w1,%0";
return "fpdiv3%.s %2,%1,%0";
}
}
static char *
output_138 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef FSGLDIV_USE_S
if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
return (TARGET_68040_ONLY
? "fsdiv%.s %2,%0"
: "fsgldiv%.s %2,%0");
#else
if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
return (TARGET_68040_ONLY
? "fsdiv%.x %2,%0"
: "fsgldiv%.x %2,%0");
#endif
return (TARGET_68040_ONLY
? "fsdiv%.s %f2,%0"
: "fsgldiv%.s %f2,%0");
}
}
static char *
output_139 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* The swap insn produces cc's that don't correspond to the result. */
CC_STATUS_INIT;
#ifdef MOTOROLA
return "ext%.l %0\n\tdivs%.w %2,%0\n\tswap %0";
#else
return "extl %0\n\tdivs %2,%0\n\tswap %0";
#endif
}
}
static char *
output_140 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* The swap insn produces cc's that don't correspond to the result. */
CC_STATUS_INIT;
#ifdef MOTOROLA
return "divs%.w %2,%0\n\tswap %0";
#else
return "divs %2,%0\n\tswap %0";
#endif
}
}
static char *
output_141 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* The swap insn produces cc's that don't correspond to the result. */
CC_STATUS_INIT;
#ifdef MOTOROLA
return "divs%.w %2,%0\n\tswap %0";
#else
return "divs %2,%0\n\tswap %0";
#endif
}
}
static char *
output_142 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* The swap insn produces cc's that don't correspond to the result. */
CC_STATUS_INIT;
#ifdef MOTOROLA
return "and%.l %#0xFFFF,%0\n\tdivu%.w %2,%0\n\tswap %0";
#else
return "andl %#0xFFFF,%0\n\tdivu %2,%0\n\tswap %0";
#endif
}
}
static char *
output_143 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* The swap insn produces cc's that don't correspond to the result. */
CC_STATUS_INIT;
#ifdef MOTOROLA
return "divu%.w %2,%0\n\tswap %0";
#else
return "divu %2,%0\n\tswap %0";
#endif
}
}
static char *
output_144 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* The swap insn produces cc's that don't correspond to the result. */
CC_STATUS_INIT;
#ifdef MOTOROLA
return "divu%.w %2,%0\n\tswap %0";
#else
return "divu %2,%0\n\tswap %0";
#endif
}
}
static char *
output_145 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (find_reg_note (insn, REG_UNUSED, operands[3]))
return "divs%.l %2,%0";
else
return "divsl%.l %2,%3:%0";
}
}
static char *
output_146 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (find_reg_note (insn, REG_UNUSED, operands[3]))
return "divu%.l %2,%0";
else
return "divul%.l %2,%3:%0";
}
}
static char *
output_147 (operands, insn)
rtx *operands;
rtx insn;
{
{
int logval;
if (GET_CODE (operands[2]) == CONST_INT
&& (INTVAL (operands[2]) | 0xffff) == 0xffffffff
&& (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0])))
{
if (GET_CODE (operands[0]) != REG)
operands[0] = adj_offsettable_operand (operands[0], 2);
operands[2] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (operands[2]) & 0xffff);
/* Do not delete a following tstl %0 insn; that would be incorrect. */
CC_STATUS_INIT;
if (operands[2] == const0_rtx)
return "clr%.w %0";
return "and%.w %2,%0";
}
if (GET_CODE (operands[2]) == CONST_INT
&& (logval = exact_log2 (~ INTVAL (operands[2]))) >= 0
&& (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0])))
{
if (DATA_REG_P (operands[0]))
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
}
else
{
operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8)); operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
}
/* This does not set condition codes in a standard way. */
CC_STATUS_INIT;
return "bclr %1,%0";
}
return "and%.l %2,%0";
}
}
static char *
output_154 (operands, insn)
rtx *operands;
rtx insn;
{
{
register int logval;
if (GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) >> 16 == 0
&& (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0])))
{
if (GET_CODE (operands[0]) != REG)
operands[0] = adj_offsettable_operand (operands[0], 2);
/* Do not delete a following tstl %0 insn; that would be incorrect. */
CC_STATUS_INIT;
return "or%.w %2,%0";
}
if (GET_CODE (operands[2]) == CONST_INT
&& (logval = exact_log2 (INTVAL (operands[2]))) >= 0
&& (DATA_REG_P (operands[0])
|| offsettable_memref_p (operands[0])))
{
if (DATA_REG_P (operands[0]))
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
}
else
{
operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8));
operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
}
CC_STATUS_INIT;
return "bset %1,%0";
}
return "or%.l %2,%0";
}
}
static char *
output_161 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[2]) >> 16 == 0
&& (offsettable_memref_p (operands[0]) || DATA_REG_P (operands[0])))
{
if (! DATA_REG_P (operands[0]))
operands[0] = adj_offsettable_operand (operands[0], 2);
/* Do not delete a following tstl %0 insn; that would be incorrect. */
CC_STATUS_INIT;
return "eor%.w %2,%0";
}
return "eor%.l %2,%0";
}
}
static char *
output_175 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (DATA_REG_P (operands[0]))
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, 31);
return "bchg %1,%0";
}
if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
return "f%$neg%.x %1,%0";
return "f%$neg%.s %f1,%0";
}
}
static char *
output_178 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (DATA_REG_P (operands[0]))
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, 31);
return "bchg %1,%0";
}
if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
return "f%&neg%.x %1,%0";
return "f%&neg%.d %f1,%0";
}
}
static char *
output_179 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[1]))
return "fsqrt%.x %1,%0";
else
return "fsqrt%.d %1,%0";
}
}
static char *
output_182 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
return "f%$abs%.x %1,%0";
return "f%$abs%.s %f1,%0";
}
}
static char *
output_185 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
return "f%&abs%.x %1,%0";
return "f%&abs%.d %f1,%0";
}
}
static char *
output_191 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "swap %0\n\tclr%.w %0";
}
}
static char *
output_192 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
return "asl%.w %2,%0\n\tswap %0\n\tclr%.w %0";
}
}
static char *
output_193 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (operands[2] == const1_rtx)
return "add%.l %0,%0";
return "asl%.l %2,%0";
}
}
static char *
output_199 (operands, insn)
rtx *operands;
rtx insn;
{
{
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
return "swap %0\n\tasr%.w %2,%0\n\text%.l %0";
}
}
static char *
output_200 (operands, insn)
rtx *operands;
rtx insn;
{
{
return "asr%.l %2,%0";
}
}
static char *
output_205 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "swap %0\n\tclr%.w %0";
}
}
static char *
output_206 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
return "lsl%.w %2,%0\n\tswap %0\n\tclr%.w %0";
}
}
static char *
output_207 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (operands[2] == const1_rtx)
return "add%.l %0,%0";
return "lsl%.l %2,%0";
}
}
static char *
output_212 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "clr%.w %0\n\tswap %0";
}
}
static char *
output_213 (operands, insn)
rtx *operands;
rtx insn;
{
{
/* I think lsr%.w sets the CC properly. */
operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
return "clr%.w %0\n\tswap %0\n\tlsr%.w %2,%0";
}
}
static char *
output_214 (operands, insn)
rtx *operands;
rtx insn;
{
{
return "lsr%.l %2,%0";
}
}
static char *
output_229 (operands, insn)
rtx *operands;
rtx insn;
{
{
operands[0]
= adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
return "move%.l %3,%0";
}
}
static char *
output_230 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[0]))
{
if (INTVAL (operands[1]) + INTVAL (operands[2]) != 32)
return "bfins %3,%0{%b2:%b1}";
}
else
operands[0]
= adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
if (GET_CODE (operands[3]) == MEM)
operands[3] = adj_offsettable_operand (operands[3],
(32 - INTVAL (operands[1])) / 8);
if (INTVAL (operands[1]) == 8)
return "move%.b %3,%0";
return "move%.w %3,%0";
}
}
static char *
output_231 (operands, insn)
rtx *operands;
rtx insn;
{
{
operands[1]
= adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
return "move%.l %1,%0";
}
}
static char *
output_232 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags |= CC_NOT_NEGATIVE;
if (REG_P (operands[1]))
{
if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
return "bfextu %1{%b3:%b2},%0";
}
else
operands[1]
= adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
output_asm_insn ("clr%.l %0", operands);
if (GET_CODE (operands[0]) == MEM)
operands[0] = adj_offsettable_operand (operands[0],
(32 - INTVAL (operands[1])) / 8);
if (INTVAL (operands[2]) == 8)
return "move%.b %1,%0";
return "move%.w %1,%0";
}
}
static char *
output_233 (operands, insn)
rtx *operands;
rtx insn;
{
{
operands[1]
= adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
return "move%.l %1,%0";
}
}
static char *
output_234 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[1]))
{
if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
return "bfexts %1{%b3:%b2},%0";
}
else
operands[1]
= adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
if (INTVAL (operands[2]) == 8)
return "move%.b %1,%0\n\textb%.l %0";
return "move%.w %1,%0\n\text%.l %0";
}
}
static char *
output_236 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags |= CC_NOT_NEGATIVE;
return "bfextu %1{%b3:%b2},%0";
}
}
static char *
output_237 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "bfchg %0{%b2:%b1}";
}
}
static char *
output_238 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "bfclr %0{%b2:%b1}";
}
}
static char *
output_239 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "bfset %0{%b2:%b1}";
}
}
static char *
output_242 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags |= CC_NOT_NEGATIVE;
return "bfextu %1{%b3:%b2},%0";
}
}
static char *
output_243 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "bfclr %0{%b2:%b1}";
}
}
static char *
output_244 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
return "bfset %0{%b2:%b1}";
}
}
static char *
output_245 (operands, insn)
rtx *operands;
rtx insn;
{
{
#if 0
/* These special cases are now recognized by a specific pattern. */
if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[1]) == 16 && INTVAL (operands[2]) == 16)
return "move%.w %3,%0";
if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
&& INTVAL (operands[1]) == 24 && INTVAL (operands[2]) == 8)
return "move%.b %3,%0";
#endif
return "bfins %3,%0{%b2:%b1}";
}
}
static char *
output_246 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (operands[1] == const1_rtx
&& GET_CODE (operands[2]) == CONST_INT)
{
int width = GET_CODE (operands[0]) == REG ? 31 : 7;
return output_btst (operands,
gen_rtx (CONST_INT, VOIDmode,
width - INTVAL (operands[2])),
operands[0],
insn, 1000);
/* Pass 1000 as SIGNPOS argument so that btst will
not think we are testing the sign bit for an `and'
and assume that nonzero implies a negative result. */
}
if (INTVAL (operands[1]) != 32)
cc_status.flags = CC_NOT_NEGATIVE;
return "bftst %0{%b2:%b1}";
}
}
static char *
output_247 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (operands[1] == const1_rtx
&& GET_CODE (operands[2]) == CONST_INT)
{
int width = GET_CODE (operands[0]) == REG ? 31 : 7;
return output_btst (operands,
gen_rtx (CONST_INT, VOIDmode,
width - INTVAL (operands[2])),
operands[0],
insn, 1000);
/* Pass 1000 as SIGNPOS argument so that btst will
not think we are testing the sign bit for an `and'
and assume that nonzero implies a negative result. */
}
if (INTVAL (operands[1]) != 32)
cc_status.flags = CC_NOT_NEGATIVE;
return "bftst %0{%b2:%b1}";
}
}
static char *
output_248 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
OUTPUT_JUMP ("seq %0", "fseq %0", "seq %0");
}
static char *
output_249 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
OUTPUT_JUMP ("sne %0", "fsne %0", "sne %0");
}
static char *
output_250 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
OUTPUT_JUMP ("sgt %0", "fsgt %0", 0);
}
static char *
output_251 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
return "shi %0";
}
static char *
output_252 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
OUTPUT_JUMP ("slt %0", "fslt %0", "smi %0");
}
static char *
output_253 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
return "scs %0";
}
static char *
output_254 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
OUTPUT_JUMP ("sge %0", "fsge %0", "spl %0");
}
static char *
output_255 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
return "scc %0";
}
static char *
output_256 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
OUTPUT_JUMP ("sle %0", "fsle %0", 0);
}
static char *
output_257 (operands, insn)
rtx *operands;
rtx insn;
{
cc_status = cc_prev_status;
return "sls %0";
}
static char *
output_258 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbeq %l0", "fbeq %l0", "jbeq %l0");
#else
OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
#endif
}
}
static char *
output_259 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbne %l0", "fbne %l0", "jbne %l0");
#else
OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
#endif
}
}
static char *
output_260 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbgt %l0", "fbgt %l0", 0);
#else
OUTPUT_JUMP ("jgt %l0", "fjgt %l0", 0);
#endif
}
static char *
output_261 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbhi %l0";
#else
return "jhi %l0";
#endif
}
static char *
output_262 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jblt %l0", "fblt %l0", "jbmi %l0");
#else
OUTPUT_JUMP ("jlt %l0", "fjlt %l0", "jmi %l0");
#endif
}
static char *
output_263 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbcs %l0";
#else
return "jcs %l0";
#endif
}
static char *
output_264 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbge %l0", "fbge %l0", "jbpl %l0");
#else
OUTPUT_JUMP ("jge %l0", "fjge %l0", "jpl %l0");
#endif
}
static char *
output_265 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbcc %l0";
#else
return "jcc %l0";
#endif
}
static char *
output_266 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jble %l0", "fble %l0", 0);
#else
OUTPUT_JUMP ("jle %l0", "fjle %l0", 0);
#endif
}
static char *
output_267 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbls %l0";
#else
return "jls %l0";
#endif
}
static char *
output_268 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbne %l0", "fbne %l0", "jbne %l0");
#else
OUTPUT_JUMP ("jne %l0", "fjne %l0", "jne %l0");
#endif
}
}
static char *
output_269 (operands, insn)
rtx *operands;
rtx insn;
{
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbeq %l0", "fbeq %l0", "jbeq %l0");
#else
OUTPUT_JUMP ("jeq %l0", "fjeq %l0", "jeq %l0");
#endif
}
}
static char *
output_270 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jble %l0", "fbngt %l0", 0);
#else
OUTPUT_JUMP ("jle %l0", "fjngt %l0", 0);
#endif
}
static char *
output_271 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbls %l0";
#else
return "jls %l0";
#endif
}
static char *
output_272 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbge %l0", "fbnlt %l0", "jbpl %l0");
#else
OUTPUT_JUMP ("jge %l0", "fjnlt %l0", "jpl %l0");
#endif
}
static char *
output_273 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbcc %l0";
#else
return "jcc %l0";
#endif
}
static char *
output_274 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jblt %l0", "fbnge %l0", "jbmi %l0");
#else
OUTPUT_JUMP ("jlt %l0", "fjnge %l0", "jmi %l0");
#endif
}
static char *
output_275 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbcs %l0";
#else
return "jcs %l0";
#endif
}
static char *
output_276 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
OUTPUT_JUMP ("jbgt %l0", "fbnle %l0", 0);
#else
OUTPUT_JUMP ("jgt %l0", "fjnle %l0", 0);
#endif
}
static char *
output_277 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbhi %l0";
#else
return "jhi %l0";
#endif
}
static char *
output_278 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jbra %l0";
#else
return "jra %l0";
#endif
}
static char *
output_280 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jmp (%0)";
#else
return "jmp %0@";
#endif
}
static char *
output_281 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef ASM_RETURN_CASE_JUMP
ASM_RETURN_CASE_JUMP;
#else
#ifdef SGS
#ifdef ASM_OUTPUT_CASE_LABEL
return "jmp 6(%%pc,%0.w)";
#else
#ifdef CRDS
return "jmp 2(pc,%0.w)";
#else
return "jmp 2(%%pc,%0.w)";
#endif /* end !CRDS */
#endif
#else /* not SGS */
#ifdef MOTOROLA
return "jmp (2,pc,%0.w)";
#else
return "jmp pc@(2,%0:w)";
#endif
#endif
#endif
}
static char *
output_282 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1";
if (GET_CODE (operands[0]) == MEM)
{
#ifdef MOTOROLA
#ifdef NO_ADDSUB_Q
return "sub%.w %#1,%0\n\tjbcc %l1";
#else
return "subq%.w %#1,%0\n\tjbcc %l1";
#endif
#else /* not MOTOROLA */
return "subqw %#1,%0\n\tjcc %l1";
#endif
}
#ifdef MOTOROLA
#ifdef SGS_CMP_ORDER
#ifdef NO_ADDSUB_Q
return "sub%.w %#1,%0\n\tcmp%.w %0,%#-1\n\tjbne %l1";
#else
return "subq%.w %#1,%0\n\tcmp%.w %0,%#-1\n\tjbne %l1";
#endif
#else /* not SGS_CMP_ORDER */
return "subq%.w %#1,%0\n\tcmp%.w %#-1,%0\n\tjbne %l1";
#endif
#else /* not MOTOROLA */
return "subqw %#1,%0\n\tcmpw %#-1,%0\n\tjne %l1";
#endif
}
}
static char *
output_283 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
#ifdef MOTOROLA
#ifdef NO_ADDSUB_Q
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1\n\tclr%.w %0\n\tsub%.l %#1,%0\n\tjbcc %l1";
if (GET_CODE (operands[0]) == MEM)
return "sub%.l %#1,%0\n\tjbcc %l1";
#else
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1\n\tclr%.w %0\n\tsubq%.l %#1,%0\n\tjbcc %l1";
if (GET_CODE (operands[0]) == MEM)
return "subq%.l %#1,%0\n\tjbcc %l1";
#endif /* NO_ADDSUB_Q */
#ifdef SGS_CMP_ORDER
#ifdef NO_ADDSUB_Q
return "sub.l %#1,%0\n\tcmp.l %0,%#-1\n\tjbne %l1";
#else
return "subq.l %#1,%0\n\tcmp.l %0,%#-1\n\tjbne %l1";
#endif
#else /* not SGS_CMP_ORDER */
return "subq.l %#1,%0\n\tcmp.l %#-1,%0\n\tjbne %l1";
#endif /* not SGS_CMP_ORDER */
#else /* not MOTOROLA */
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1\n\tclr%.w %0\n\tsubql %#1,%0\n\tjcc %l1";
if (GET_CODE (operands[0]) == MEM)
return "subql %#1,%0\n\tjcc %l1";
return "subql %#1,%0\n\tcmpl %#-1,%0\n\tjne %l1";
#endif /* not MOTOROLA */
}
}
static char *
output_284 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
#ifdef MOTOROLA
#ifdef NO_ADDSUB_Q
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1";
if (GET_CODE (operands[0]) == MEM)
return "sub%.w %#1,%0\n\tjbcc %l1";
#else
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1";
if (GET_CODE (operands[0]) == MEM)
return "subq%.w %#1,%0\n\tjbcc %l1";
#endif
#ifdef SGS_CMP_ORDER
#ifdef NO_ADDSUB_Q
return "sub.w %#1,%0\n\tcmp.w %0,%#-1\n\tjbne %l1";
#else
return "subq.w %#1,%0\n\tcmp.w %0,%#-1\n\tjbne %l1";
#endif
#else /* not SGS_CMP_ORDER */
return "subq.w %#1,%0\n\tcmp.w %#-1,%0\n\tjbne %l1";
#endif /* not SGS_CMP_ORDER */
#else /* not MOTOROLA */
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1";
if (GET_CODE (operands[0]) == MEM)
return "subqw %#1,%0\n\tjcc %l1";
return "subqw %#1,%0\n\tcmpw %#-1,%0\n\tjne %l1";
#endif /* not MOTOROLA */
}
}
static char *
output_285 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
#ifdef MOTOROLA
#ifdef NO_ADDSUB_Q
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1\n\tclr%.w %0\n\tsub%.l %#1,%0\n\tjbcc %l1";
if (GET_CODE (operands[0]) == MEM)
return "sub%.l %#1,%0\n\tjbcc %l1";
#else
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1\n\tclr%.w %0\n\tsubq%.l %#1,%0\n\tjbcc %l1";
if (GET_CODE (operands[0]) == MEM)
return "subq%.l %#1,%0\n\tjbcc %l1";
#endif
#ifdef SGS_CMP_ORDER
#ifdef NO_ADDSUB_Q
return "sub.l %#1,%0\n\tcmp.l %0,%#-1\n\tjbne %l1";
#else
return "subq.l %#1,%0\n\tcmp.l %0,%#-1\n\tjbne %l1";
#endif
#else /* not SGS_CMP_ORDER */
return "subq.l %#1,%0\n\tcmp.l %#-1,%0\n\tjbne %l1";
#endif /* not SGS_CMP_ORDER */
#else /* not MOTOROLA */
if (DATA_REG_P (operands[0]))
return "dbra %0,%l1\n\tclr%.w %0\n\tsubql %#1,%0\n\tjcc %l1";
if (GET_CODE (operands[0]) == MEM)
return "subql %#1,%0\n\tjcc %l1";
return "subql %#1,%0\n\tcmpl %#-1,%0\n\tjne %l1";
#endif /* not MOTOROLA */
}
}
static char *
output_287 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jsr %0";
#else
return "jbsr %0";
#endif
}
static char *
output_288 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
return "bsr %0@PLTPC";
#endif
return "jsr %0";
}
static char *
output_290 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
return "jsr %1";
#else
return "jbsr %1";
#endif
}
static char *
output_291 (operands, insn)
rtx *operands;
rtx insn;
{
#ifdef MOTOROLA
if (GET_CODE (operands[1]) == MEM
&& GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
return "bsr %1@PLTPC";
#endif
return "jsr %1";
}
static char *
output_295 (operands, insn)
rtx *operands;
rtx insn;
{
{
operands[0] = gen_rtx (PLUS, SImode, stack_pointer_rtx,
gen_rtx (CONST_INT, VOIDmode, NEED_PROBE));
return "tstl %a0";
}
}
static char *
output_296 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (current_function_pops_args == 0)
return "rts";
operands[0] = gen_rtx (CONST_INT, VOIDmode, current_function_pops_args);
return "rtd %0";
}
}
static char *
output_299 (operands, insn)
rtx *operands;
rtx insn;
{
{
rtx xoperands[2];
xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
output_asm_insn ("move%.l %1,%@", xoperands);
output_asm_insn ("move%.l %1,%-", operands);
return "fmove%.d %+,%0";
}
}
static char *
output_300 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (INTVAL (operands[0]) > 4)
{
rtx xoperands[2];
xoperands[0] = stack_pointer_rtx;
xoperands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[0]) - 4);
#ifndef NO_ADDSUB_Q
if (INTVAL (xoperands[1]) <= 8)
output_asm_insn ("addq%.w %1,%0", xoperands);
else if (INTVAL (xoperands[1]) <= 16 && TARGET_68020)
{
xoperands[1] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (xoperands[1]) - 8);
output_asm_insn ("addq%.w %#8,%0\n\taddq%.w %1,%0", xoperands);
}
else
#endif
if (INTVAL (xoperands[1]) <= 0x7FFF)
output_asm_insn ("add%.w %1,%0", xoperands);
else
output_asm_insn ("add%.l %1,%0", xoperands);
}
if (FP_REG_P (operands[2]))
return "fmove%.s %2,%@";
return "move%.l %2,%@";
}
}
static char *
output_301 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (INTVAL (operands[0]) > 4)
{
rtx xoperands[2];
xoperands[0] = stack_pointer_rtx;
xoperands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[0]) - 4);
#ifndef NO_ADDSUB_Q
if (INTVAL (xoperands[1]) <= 8)
output_asm_insn ("addq%.w %1,%0", xoperands);
else if (INTVAL (xoperands[1]) <= 16 && TARGET_68020)
{
xoperands[1] = gen_rtx (CONST_INT, VOIDmode,
INTVAL (xoperands[1]) - 8);
output_asm_insn ("addq%.w %#8,%0\n\taddq%.w %1,%0", xoperands);
}
else
#endif
if (INTVAL (xoperands[1]) <= 0x7FFF)
output_asm_insn ("add%.w %1,%0", xoperands);
else
output_asm_insn ("add%.l %1,%0", xoperands);
}
if (operands[2] == const0_rtx)
return "clr%.l %@";
return "move%.l %2,%@";
}
}
static char *
output_302 (operands, insn)
rtx *operands;
rtx insn;
{
{
rtx xoperands[4];
if (GET_CODE (operands[1]) == REG)
return "move%.l %1,%-";
xoperands[1] = operands[1];
xoperands[2]
= gen_rtx (MEM, QImode,
gen_rtx (PLUS, VOIDmode, stack_pointer_rtx,
gen_rtx (CONST_INT, VOIDmode, 3)));
xoperands[3] = stack_pointer_rtx;
output_asm_insn ("subq%.w %#4,%3\n\tmove%.b %1,%2", xoperands);
return "";
}
}
static char *
output_303 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (GET_CODE (operands[1]) == CONST_INT)
{
if (operands[1] == const0_rtx
&& (DATA_REG_P (operands[0])
|| GET_CODE (operands[0]) == MEM)
/* clr insns on 68000 read before writing.
This isn't so on the 68010, but we have no alternative for it. */
&& (TARGET_68020
|| !(GET_CODE (operands[0]) == MEM
&& MEM_VOLATILE_P (operands[0]))))
return "clr%.w %0";
}
return "move%.w %1,%0";
}
}
static char *
output_304 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
output_dbcc_and_branch (operands);
return "";
}
}
static char *
output_305 (operands, insn)
rtx *operands;
rtx insn;
{
{
CC_STATUS_INIT;
output_dbcc_and_branch (operands);
return "";
}
}
static char *
output_306 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_306[] = {
"fpma%.d %1,%w2,%w3,%0",
"fpma%.d %x1,%x2,%x3,%0",
"fpma%.d %x1,%x2,%x3,%0",
};
return strings_306[which_alternative];
}
static char *
output_307 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_307[] = {
"fpma%.s %1,%w2,%w3,%0",
"fpma%.s %1,%2,%3,%0",
"fpma%.s %1,%2,%3,%0",
};
return strings_307[which_alternative];
}
static char *
output_308 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_308[] = {
"fpms%.d %3,%w2,%w1,%0",
"fpms%.d %x3,%2,%x1,%0",
"fpms%.d %x3,%2,%x1,%0",
};
return strings_308[which_alternative];
}
static char *
output_309 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_309[] = {
"fpms%.s %3,%w2,%w1,%0",
"fpms%.s %3,%2,%1,%0",
"fpms%.s %3,%2,%1,%0",
};
return strings_309[which_alternative];
}
static char *
output_310 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_310[] = {
"fpmr%.d %2,%w1,%w3,%0",
"fpmr%.d %x2,%1,%x3,%0",
"fpmr%.d %x2,%1,%x3,%0",
};
return strings_310[which_alternative];
}
static char *
output_311 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_311[] = {
"fpmr%.s %2,%w1,%w3,%0",
"fpmr%.s %x2,%1,%x3,%0",
"fpmr%.s %x2,%1,%x3,%0",
};
return strings_311[which_alternative];
}
static char *
output_312 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_312[] = {
"fpam%.d %2,%w1,%w3,%0",
"fpam%.d %x2,%1,%x3,%0",
"fpam%.d %x2,%1,%x3,%0",
};
return strings_312[which_alternative];
}
static char *
output_313 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_313[] = {
"fpam%.s %2,%w1,%w3,%0",
"fpam%.s %x2,%1,%x3,%0",
"fpam%.s %x2,%1,%x3,%0",
};
return strings_313[which_alternative];
}
static char *
output_314 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_314[] = {
"fpsm%.d %2,%w1,%w3,%0",
"fpsm%.d %x2,%1,%x3,%0",
"fpsm%.d %x2,%1,%x3,%0",
};
return strings_314[which_alternative];
}
static char *
output_315 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_315[] = {
"fpsm%.d %3,%w2,%w1,%0",
"fpsm%.d %x3,%2,%x1,%0",
"fpsm%.d %x3,%2,%x1,%0",
};
return strings_315[which_alternative];
}
static char *
output_316 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_316[] = {
"fpsm%.s %2,%w1,%w3,%0",
"fpsm%.s %x2,%1,%x3,%0",
"fpsm%.s %x2,%1,%x3,%0",
};
return strings_316[which_alternative];
}
static char *
output_317 (operands, insn)
rtx *operands;
rtx insn;
{
static /*const*/ char *const strings_317[] = {
"fpsm%.s %3,%w2,%w1,%0",
"fpsm%.s %x3,%2,%x1,%0",
"fpsm%.s %x3,%2,%x1,%0",
};
return strings_317[which_alternative];
}
static char *
output_318 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags = CC_IN_68881;
return "ftst%.x %0";
}
}
static char *
output_320 (operands, insn)
rtx *operands;
rtx insn;
{
{
cc_status.flags = CC_IN_68881;
#ifdef SGS_CMP_ORDER
if (REG_P (operands[0]))
{
if (REG_P (operands[1]))
return "fcmp%.x %0,%1";
else
return "fcmp%.x %0,%f1";
}
cc_status.flags |= CC_REVERSED;
return "fcmp%.x %1,%f0";
#else
if (REG_P (operands[0]))
{
if (REG_P (operands[1]))
return "fcmp%.x %1,%0";
else
return "fcmp%.x %f1,%0";
}
cc_status.flags |= CC_REVERSED;
return "fcmp%.x %f0,%1";
#endif
}
}
static char *
output_321 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
{
if (REGNO (operands[0]) == REGNO (operands[1]))
{
/* Extending float to double in an fp-reg is a no-op.
NOTICE_UPDATE_CC has already assumed that the
cc will be set. So cancel what it did. */
cc_status = cc_prev_status;
return "";
}
return "f%$move%.x %1,%0";
}
if (FP_REG_P (operands[0]))
return "f%$move%.s %f1,%0";
return "fmove%.x %f1,%0";
}
}
static char *
output_322 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
{
if (REGNO (operands[0]) == REGNO (operands[1]))
{
/* Extending float to double in an fp-reg is a no-op.
NOTICE_UPDATE_CC has already assumed that the
cc will be set. So cancel what it did. */
cc_status = cc_prev_status;
return "";
}
return "fmove%.x %1,%0";
}
if (FP_REG_P (operands[0]))
return "f%&move%.d %f1,%0";
return "fmove%.x %f1,%0";
}
}
static char *
output_323 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[0]))
{
output_asm_insn ("fmove%.d %f1,%-\n\tmove%.l %+,%0", operands);
operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
return "move%.l %+,%0";
}
return "fmove%.d %f1,%0";
}
}
static char *
output_328 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (FP_REG_P (operands[1]))
return "fintrz%.x %f1,%0";
return "fintrz%.x %f1,%0";
}
}
static char *
output_333 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "fadd%.x %2,%0";
return "fadd%.x %f2,%0";
}
}
static char *
output_335 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "fsub%.x %2,%0";
return "fsub%.x %f2,%0";
}
}
static char *
output_337 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "fmul%.x %2,%0";
return "fmul%.x %f2,%0";
}
}
static char *
output_339 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[2]))
return "fdiv%.x %2,%0";
return "fdiv%.x %f2,%0";
}
}
static char *
output_340 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
return "fneg%.x %1,%0";
return "fneg%.x %f1,%0";
}
}
static char *
output_341 (operands, insn)
rtx *operands;
rtx insn;
{
{
if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
return "fabs%.x %1,%0";
return "fabs%.x %f1,%0";
}
}
static char *
output_342 (operands, insn)
rtx *operands;
rtx insn;
{
{
return "fsqrt%.x %1,%0";
}
}
char * const insn_template[] =
{
0,
0,
0,
"tst%.w %0",
"tst%.b %0",
0,
"fptst%.s %x0\n\tfpmove fpastatus,%1\n\tmovw %1,cc",
0,
0,
"fptst%.d %x0\n\tfpmove fpastatus,%1\n\tmovw %1,cc",
0,
0,
0,
0,
0,
"fpcmp%.d %y1,%0\n\tfpmove fpastatus,%2\n\tmovw %2,cc",
0,
0,
"fpcmp%.s %w1,%x0\n\tfpmove fpastatus,%2\n\tmovw %2,cc",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
"pea %a1",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
"ext%.w %0",
"extb%.l %0",
0,
"fpstod %w1,%0",
0,
0,
"fpdtos %y1,%0",
0,
"fmove%.s %f1,%0",
0,
"fpltos %1,%0",
"f%$move%.l %1,%0",
0,
"fpltod %1,%0",
"f%&move%.l %1,%0",
"f%$move%.w %1,%0",
"fmove%.w %1,%0",
"fmove%.b %1,%0",
"f%&move%.b %1,%0",
0,
0,
0,
0,
0,
"fmove%.b %1,%0",
"fmove%.w %1,%0",
"fmove%.l %1,%0",
"fmove%.b %1,%0",
"fmove%.w %1,%0",
"fmove%.l %1,%0",
"fpstol %w1,%0",
"fpdtol %y1,%0",
0,
"add%.w %2,%0",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
"sub%.w %2,%0",
"sub%.w %2,%0",
"sub%.w %1,%0",
"sub%.b %2,%0",
"sub%.b %1,%0",
0,
0,
0,
0,
0,
0,
0,
0,
0,
"muls%.l %2,%0",
0,
0,
0,
"mulu%.l %2,%3:%0",
"mulu%.l %2,%3:%0",
0,
"muls%.l %2,%3:%0",
"muls%.l %2,%3:%0",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
"and%.w %2,%0",
"and%.w %1,%0",
"and%.w %1,%0",
"and%.b %2,%0",
"and%.b %1,%0",
"and%.b %1,%0",
0,
"or%.w %2,%0",
"or%.w %1,%0",
"or%.w %1,%0",
"or%.b %2,%0",
"or%.b %1,%0",
"or%.b %1,%0",
0,
"eor%.w %2,%0",
"eor%.w %1,%0",
"eor%.w %1,%0",
"eor%.b %2,%0",
"eor%.b %1,%0",
"eor%.b %1,%0",
"neg%.l %0",
"neg%.w %0",
"neg%.w %0",
"neg%.b %0",
"neg%.b %0",
0,
"fpneg%.s %w1,%0",
0,
0,
"fpneg%.d %y1, %0",
0,
0,
0,
"fpabs%.s %y1,%0",
0,
0,
"fpabs%.d %y1,%0",
0,
"not%.l %0",
"not%.w %0",
"not%.w %0",
"not%.b %0",
"not%.b %0",
0,
0,
0,
"asl%.w %2,%0",
"asl%.w %1,%0",
"asl%.b %2,%0",
"asl%.b %1,%0",
"swap %0\n\text%.l %0",
0,
0,
"asr%.w %2,%0",
"asr%.w %1,%0",
"asr%.b %2,%0",
"asr%.b %1,%0",
0,
0,
0,
"lsl%.w %2,%0",
"lsl%.w %1,%0",
"lsl%.b %2,%0",
"lsl%.b %1,%0",
0,
0,
0,
"lsr%.w %2,%0",
"lsr%.w %1,%0",
"lsr%.b %2,%0",
"lsr%.b %1,%0",
"rol%.l %2,%0",
"rol%.w %2,%0",
"rol%.w %1,%0",
"rol%.b %2,%0",
"rol%.b %1,%0",
"ror%.l %2,%0",
"ror%.w %2,%0",
"ror%.w %1,%0",
"ror%.b %2,%0",
"ror%.b %1,%0",
0,
0,
0,
0,
0,
0,
"bfexts %1{%b3:%b2},%0",
0,
0,
0,
0,
"bfins %3,%0{%b2:%b1}",
"bfexts %1{%b3:%b2},%0",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
"",
"nop",
0,
0,
"jmp %a0",
"lea %a1,%0",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
"fmove%.s %f1,%0",
"fmove%.l %1,%0",
"fmove%.w %1,%0",
"fmove%.b %1,%0",
0,
"fmove%.b %1,%0",
"fmove%.w %1,%0",
"fmove%.l %1,%0",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
};
char *(*const insn_outfun[])() =
{
output_0,
output_1,
output_2,
0,
0,
0,
0,
output_7,
0,
0,
output_10,
output_11,
output_12,
output_13,
0,
0,
output_16,
0,
0,
output_19,
output_20,
output_21,
output_22,
output_23,
output_24,
output_25,
output_26,
output_27,
0,
output_29,
output_30,
output_31,
output_32,
output_33,
output_34,
output_35,
0,
output_37,
output_38,
output_39,
0,
output_41,
output_42,
output_43,
0,
0,
0,
output_47,
output_48,
output_49,
output_50,
0,
0,
0,
0,
output_55,
0,
0,
output_58,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
output_70,
output_71,
output_72,
output_73,
output_74,
0,
0,
0,
0,
0,
0,
0,
0,
output_83,
0,
output_85,
output_86,
output_87,
output_88,
output_89,
output_90,
0,
output_92,
output_93,
0,
output_95,
output_96,
output_97,
0,
0,
0,
0,
0,
0,
output_104,
output_105,
0,
output_107,
output_108,
output_109,
output_110,
output_111,
0,
output_113,
output_114,
0,
0,
0,
0,
0,
0,
0,
output_122,
output_123,
0,
output_125,
output_126,
output_127,
output_128,
output_129,
output_130,
output_131,
output_132,
0,
output_134,
output_135,
0,
output_137,
output_138,
output_139,
output_140,
output_141,
output_142,
output_143,
output_144,
output_145,
output_146,
output_147,
0,
0,
0,
0,
0,
0,
output_154,
0,
0,
0,
0,
0,
0,
output_161,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
output_175,
0,
0,
output_178,
output_179,
0,
0,
output_182,
0,
0,
output_185,
0,
0,
0,
0,
0,
output_191,
output_192,
output_193,
0,
0,
0,
0,
0,
output_199,
output_200,
0,
0,
0,
0,
output_205,
output_206,
output_207,
0,
0,
0,
0,
output_212,
output_213,
output_214,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
output_229,
output_230,
output_231,
output_232,
output_233,
output_234,
0,
output_236,
output_237,
output_238,
output_239,
0,
0,
output_242,
output_243,
output_244,
output_245,
output_246,
output_247,
output_248,
output_249,
output_250,
output_251,
output_252,
output_253,
output_254,
output_255,
output_256,
output_257,
output_258,
output_259,
output_260,
output_261,
output_262,
output_263,
output_264,
output_265,
output_266,
output_267,
output_268,
output_269,
output_270,
output_271,
output_272,
output_273,
output_274,
output_275,
output_276,
output_277,
output_278,
0,
output_280,
output_281,
output_282,
output_283,
output_284,
output_285,
0,
output_287,
output_288,
0,
output_290,
output_291,
0,
0,
0,
output_295,
output_296,
0,
0,
output_299,
output_300,
output_301,
output_302,
output_303,
output_304,
output_305,
output_306,
output_307,
output_308,
output_309,
output_310,
output_311,
output_312,
output_313,
output_314,
output_315,
output_316,
output_317,
output_318,
0,
output_320,
output_321,
output_322,
output_323,
0,
0,
0,
0,
output_328,
0,
0,
0,
0,
output_333,
0,
output_335,
0,
output_337,
0,
output_339,
output_340,
output_341,
output_342,
};
rtx (*const insn_gen_function[]) () =
{
0,
0,
gen_tstsi,
gen_tsthi,
gen_tstqi,
gen_tstsf,
gen_tstsf_fpa,
0,
gen_tstdf,
gen_tstdf_fpa,
0,
gen_cmpsi,
gen_cmphi,
gen_cmpqi,
gen_cmpdf,
gen_cmpdf_fpa,
0,
gen_cmpsf,
gen_cmpsf_fpa,
0,
0,
0,
0,
0,
0,
0,
0,
0,
gen_movsi,
0,
gen_movhi,
gen_movstricthi,
gen_movqi,
gen_movstrictqi,
gen_movsf,
gen_movdf,
gen_movxf,
0,
0,
gen_movdi,
gen_pushasi,
gen_truncsiqi2,
gen_trunchiqi2,
gen_truncsihi2,
gen_zero_extendhisi2,
gen_zero_extendqihi2,
gen_zero_extendqisi2,
0,
0,
0,
gen_extendhisi2,
gen_extendqihi2,
gen_extendqisi2,
gen_extendsfdf2,
0,
0,
gen_truncdfsf2,
0,
0,
0,
gen_floatsisf2,
0,
0,
gen_floatsidf2,
0,
0,
gen_floathisf2,
gen_floathidf2,
gen_floatqisf2,
gen_floatqidf2,
gen_fix_truncdfsi2,
gen_fix_truncdfhi2,
gen_fix_truncdfqi2,
gen_ftruncdf2,
gen_ftruncsf2,
gen_fixsfqi2,
gen_fixsfhi2,
gen_fixsfsi2,
gen_fixdfqi2,
gen_fixdfhi2,
gen_fixdfsi2,
0,
0,
gen_addsi3,
0,
gen_addhi3,
0,
0,
gen_addqi3,
0,
0,
gen_adddf3,
0,
0,
gen_addsf3,
0,
0,
gen_subsi3,
0,
gen_subhi3,
0,
gen_subqi3,
0,
gen_subdf3,
0,
0,
gen_subsf3,
0,
0,
gen_mulhi3,
gen_mulhisi3,
0,
gen_mulsi3,
gen_umulhisi3,
0,
gen_umulsidi3,
0,
0,
gen_mulsidi3,
0,
0,
gen_muldf3,
0,
0,
gen_mulsf3,
0,
0,
gen_divhi3,
gen_divhisi3,
0,
gen_udivhi3,
gen_udivhisi3,
0,
gen_divdf3,
0,
0,
gen_divsf3,
0,
0,
gen_modhi3,
gen_modhisi3,
0,
gen_umodhi3,
gen_umodhisi3,
0,
gen_divmodsi4,
gen_udivmodsi4,
gen_andsi3,
gen_andhi3,
0,
0,
gen_andqi3,
0,
0,
gen_iorsi3,
gen_iorhi3,
0,
0,
gen_iorqi3,
0,
0,
gen_xorsi3,
gen_xorhi3,
0,
0,
gen_xorqi3,
0,
0,
gen_negsi2,
gen_neghi2,
0,
gen_negqi2,
0,
gen_negsf2,
0,
0,
gen_negdf2,
0,
0,
gen_sqrtdf2,
gen_abssf2,
0,
0,
gen_absdf2,
0,
0,
gen_one_cmplsi2,
gen_one_cmplhi2,
0,
gen_one_cmplqi2,
0,
0,
0,
gen_ashlsi3,
gen_ashlhi3,
0,
gen_ashlqi3,
0,
0,
0,
gen_ashrsi3,
gen_ashrhi3,
0,
gen_ashrqi3,
0,
0,
0,
gen_lshlsi3,
gen_lshlhi3,
0,
gen_lshlqi3,
0,
0,
0,
gen_lshrsi3,
gen_lshrhi3,
0,
gen_lshrqi3,
0,
gen_rotlsi3,
gen_rotlhi3,
0,
gen_rotlqi3,
0,
gen_rotrsi3,
gen_rotrhi3,
0,
gen_rotrqi3,
0,
0,
0,
0,
0,
0,
0,
gen_extv,
gen_extzv,
0,
0,
0,
gen_insv,
0,
0,
0,
0,
0,
0,
0,
gen_seq,
gen_sne,
gen_sgt,
gen_sgtu,
gen_slt,
gen_sltu,
gen_sge,
gen_sgeu,
gen_sle,
gen_sleu,
gen_beq,
gen_bne,
gen_bgt,
gen_bgtu,
gen_blt,
gen_bltu,
gen_bge,
gen_bgeu,
gen_ble,
gen_bleu,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
gen_jump,
gen_tablejump,
0,
0,
0,
0,
0,
gen_decrement_and_branch_until_zero,
gen_call,
0,
0,
gen_call_value,
0,
0,
gen_untyped_call,
gen_blockage,
gen_nop,
gen_probe,
gen_return,
gen_indirect_jump,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
gen_tstxf,
gen_cmpxf,
0,
gen_extendsfxf2,
gen_extenddfxf2,
gen_truncxfdf2,
gen_truncxfsf2,
gen_floatsixf2,
gen_floathixf2,
gen_floatqixf2,
gen_ftruncxf2,
gen_fixxfqi2,
gen_fixxfhi2,
gen_fixxfsi2,
gen_addxf3,
0,
gen_subxf3,
0,
gen_mulxf3,
0,
gen_divxf3,
0,
gen_negxf2,
gen_absxf2,
gen_sqrtxf2,
};
char *insn_name[] =
{
"tstsi-1",
"tstsi-0",
"tstsi",
"tsthi",
"tstqi",
"tstsf",
"tstsf_fpa",
"tstsf_fpa+1",
"tstdf",
"tstdf_fpa",
"tstdf_fpa+1",
"cmpsi",
"cmphi",
"cmpqi",
"cmpdf",
"cmpdf_fpa",
"cmpdf_fpa+1",
"cmpsf",
"cmpsf_fpa",
"cmpsf_fpa+1",
"cmpsf_fpa+2",
"cmpsf_fpa+3",
"cmpsf_fpa+4",
"cmpsf_fpa+5",
"movsi-4",
"movsi-3",
"movsi-2",
"movsi-1",
"movsi",
"movsi+1",
"movhi",
"movstricthi",
"movqi",
"movstrictqi",
"movsf",
"movdf",
"movxf",
"movxf+1",
"movdi-1",
"movdi",
"pushasi",
"truncsiqi2",
"trunchiqi2",
"truncsihi2",
"zero_extendhisi2",
"zero_extendqihi2",
"zero_extendqisi2",
"zero_extendqisi2+1",
"zero_extendqisi2+2",
"extendhisi2-1",
"extendhisi2",
"extendqihi2",
"extendqisi2",
"extendsfdf2",
"extendsfdf2+1",
"truncdfsf2-1",
"truncdfsf2",
"truncdfsf2+1",
"truncdfsf2+2",
"floatsisf2-1",
"floatsisf2",
"floatsisf2+1",
"floatsidf2-1",
"floatsidf2",
"floatsidf2+1",
"floathisf2-1",
"floathisf2",
"floathidf2",
"floatqisf2",
"floatqidf2",
"fix_truncdfsi2",
"fix_truncdfhi2",
"fix_truncdfqi2",
"ftruncdf2",
"ftruncsf2",
"fixsfqi2",
"fixsfhi2",
"fixsfsi2",
"fixdfqi2",
"fixdfhi2",
"fixdfsi2",
"fixdfsi2+1",
"addsi3-1",
"addsi3",
"addsi3+1",
"addhi3",
"addhi3+1",
"addqi3-1",
"addqi3",
"addqi3+1",
"adddf3-1",
"adddf3",
"adddf3+1",
"addsf3-1",
"addsf3",
"addsf3+1",
"subsi3-1",
"subsi3",
"subsi3+1",
"subhi3",
"subhi3+1",
"subqi3",
"subqi3+1",
"subdf3",
"subdf3+1",
"subsf3-1",
"subsf3",
"subsf3+1",
"mulhi3-1",
"mulhi3",
"mulhisi3",
"mulhisi3+1",
"mulsi3",
"umulhisi3",
"umulhisi3+1",
"umulsidi3",
"umulsidi3+1",
"mulsidi3-1",
"mulsidi3",
"mulsidi3+1",
"muldf3-1",
"muldf3",
"muldf3+1",
"mulsf3-1",
"mulsf3",
"mulsf3+1",
"divhi3-1",
"divhi3",
"divhisi3",
"divhisi3+1",
"udivhi3",
"udivhisi3",
"udivhisi3+1",
"divdf3",
"divdf3+1",
"divsf3-1",
"divsf3",
"divsf3+1",
"modhi3-1",
"modhi3",
"modhisi3",
"modhisi3+1",
"umodhi3",
"umodhisi3",
"umodhisi3+1",
"divmodsi4",
"udivmodsi4",
"andsi3",
"andhi3",
"andhi3+1",
"andqi3-1",
"andqi3",
"andqi3+1",
"iorsi3-1",
"iorsi3",
"iorhi3",
"iorhi3+1",
"iorqi3-1",
"iorqi3",
"iorqi3+1",
"xorsi3-1",
"xorsi3",
"xorhi3",
"xorhi3+1",
"xorqi3-1",
"xorqi3",
"xorqi3+1",
"negsi2-1",
"negsi2",
"neghi2",
"neghi2+1",
"negqi2",
"negqi2+1",
"negsf2",
"negsf2+1",
"negdf2-1",
"negdf2",
"negdf2+1",
"sqrtdf2-1",
"sqrtdf2",
"abssf2",
"abssf2+1",
"absdf2-1",
"absdf2",
"absdf2+1",
"one_cmplsi2-1",
"one_cmplsi2",
"one_cmplhi2",
"one_cmplhi2+1",
"one_cmplqi2",
"one_cmplqi2+1",
"one_cmplqi2+2",
"ashlsi3-1",
"ashlsi3",
"ashlhi3",
"ashlhi3+1",
"ashlqi3",
"ashlqi3+1",
"ashlqi3+2",
"ashrsi3-1",
"ashrsi3",
"ashrhi3",
"ashrhi3+1",
"ashrqi3",
"ashrqi3+1",
"ashrqi3+2",
"lshlsi3-1",
"lshlsi3",
"lshlhi3",
"lshlhi3+1",
"lshlqi3",
"lshlqi3+1",
"lshlqi3+2",
"lshrsi3-1",
"lshrsi3",
"lshrhi3",
"lshrhi3+1",
"lshrqi3",
"lshrqi3+1",
"rotlsi3",
"rotlhi3",
"rotlhi3+1",
"rotlqi3",
"rotlqi3+1",
"rotrsi3",
"rotrhi3",
"rotrhi3+1",
"rotrqi3",
"rotrqi3+1",
"rotrqi3+2",
"rotrqi3+3",
"rotrqi3+4",
"extv-3",
"extv-2",
"extv-1",
"extv",
"extzv",
"extzv+1",
"extzv+2",
"insv-1",
"insv",
"insv+1",
"insv+2",
"insv+3",
"insv+4",
"seq-3",
"seq-2",
"seq-1",
"seq",
"sne",
"sgt",
"sgtu",
"slt",
"sltu",
"sge",
"sgeu",
"sle",
"sleu",
"beq",
"bne",
"bgt",
"bgtu",
"blt",
"bltu",
"bge",
"bgeu",
"ble",
"bleu",
"bleu+1",
"bleu+2",
"bleu+3",
"bleu+4",
"bleu+5",
"jump-5",
"jump-4",
"jump-3",
"jump-2",
"jump-1",
"jump",
"tablejump",
"tablejump+1",
"tablejump+2",
"tablejump+3",
"decrement_and_branch_until_zero-2",
"decrement_and_branch_until_zero-1",
"decrement_and_branch_until_zero",
"call",
"call+1",
"call_value-1",
"call_value",
"call_value+1",
"untyped_call-1",
"untyped_call",
"blockage",
"nop",
"probe",
"return",
"indirect_jump",
"indirect_jump+1",
"indirect_jump+2",
"indirect_jump+3",
"indirect_jump+4",
"indirect_jump+5",
"indirect_jump+6",
"indirect_jump+7",
"indirect_jump+8",
"indirect_jump+9",
"indirect_jump+10",
"tstxf-10",
"tstxf-9",
"tstxf-8",
"tstxf-7",
"tstxf-6",
"tstxf-5",
"tstxf-4",
"tstxf-3",
"tstxf-2",
"tstxf-1",
"tstxf",
"cmpxf",
"cmpxf+1",
"extendsfxf2",
"extenddfxf2",
"truncxfdf2",
"truncxfsf2",
"floatsixf2",
"floathixf2",
"floatqixf2",
"ftruncxf2",
"fixxfqi2",
"fixxfhi2",
"fixxfsi2",
"addxf3",
"addxf3+1",
"subxf3",
"subxf3+1",
"mulxf3",
"mulxf3+1",
"divxf3",
"divxf3+1",
"negxf2",
"absxf2",
"sqrtxf2",
};
char **insn_name_ptr = insn_name;
const int insn_n_operands[] =
{
2,
2,
1,
1,
1,
1,
2,
1,
1,
2,
1,
2,
2,
2,
2,
3,
2,
2,
3,
2,
2,
2,
2,
2,
2,
2,
2,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
4,
4,
4,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
2,
2,
3,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
3,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
3,
4,
4,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
3,
3,
2,
2,
3,
2,
2,
3,
3,
2,
2,
3,
2,
2,
3,
3,
2,
2,
3,
2,
2,
2,
2,
1,
2,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
2,
1,
3,
3,
3,
3,
2,
3,
2,
3,
3,
3,
3,
2,
3,
2,
3,
3,
3,
3,
2,
3,
2,
3,
3,
3,
3,
2,
3,
2,
3,
3,
2,
3,
2,
3,
3,
2,
3,
2,
4,
4,
4,
4,
4,
4,
4,
4,
4,
3,
3,
4,
4,
4,
3,
3,
4,
3,
3,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
3,
3,
3,
3,
0,
0,
0,
0,
1,
2,
2,
3,
3,
2,
2,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2,
2,
};
const int insn_n_dups[] =
{
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
0,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
3,
2,
2,
3,
2,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
0,
0,
1,
1,
0,
1,
1,
0,
0,
1,
1,
0,
1,
1,
0,
0,
1,
1,
0,
1,
1,
0,
0,
1,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
0,
0,
0,
1,
0,
1,
0,
0,
0,
0,
1,
0,
1,
0,
0,
0,
0,
1,
0,
1,
0,
0,
0,
0,
1,
0,
1,
0,
0,
1,
0,
1,
0,
0,
1,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
3,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
2,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
};
char *const insn_operand_constraint[][MAX_RECOG_OPERANDS] =
{
{ "=m", "ro<>fyE", },
{ "=m", "ro<>Fy", },
{ "rm", },
{ "dm", },
{ "dm", },
{ "", },
{ "xmdF", "=d", },
{ "fdm", },
{ "", },
{ "xrmF", "=d", },
{ "fm", },
{ "rKs,mr,>", "mr,Ksr,>", },
{ "rnm,d,n,m", "d,rnm,m,n", },
{ "dn,md,>", "dm,nd,>", },
{ "", "", },
{ "x,y", "xH,rmF", "=d,d", },
{ "f,mG", "fmG,f", },
{ "", "", },
{ "x,y", "xH,rmF", "=d,d", },
{ "f,mdG", "fmdG,f", },
{ "do", "di", },
{ "d", "di", },
{ "do", "d", },
{ "d", "d", },
{ "md", "i", },
{ "do", "i", },
{ "=m", "J", },
{ "=g", },
{ "", "", },
{ "=g,da,y,!*x*r*m", "daymKs,i,g,*x*r*m", },
{ "=g", "g", },
{ "+dm", "rmn", },
{ "=d,*a,m,m,?*a", "dmi*a,d*a,dmi,?*a,m", },
{ "+dm", "dmn", },
{ "=rmf,x,y,rm,!x,!rm", "rmfF,xH,rmF,y,rm,x", },
{ "=rm,&rf,&rof<>,y,rm,x,!x,!rm", "rf,m,rofE<>,rmE,y,xH,rm,x", },
{ "", "", },
{ "=f,m,f,!r,!f", "m,f,f,f,r", },
{ "=rm,&rf,&rof<>", "rf,m,rof<>", },
{ "=rm,&r,&ro<>,y,rm,!*x,!rm", "rF,m,roi<>F,rmiF,y,rmF,*x", },
{ "=m", "p", },
{ "=dm,d", "doJ,i", },
{ "=dm,d", "doJ,i", },
{ "=dm,d", "roJ,i", },
{ "", "", },
{ "", "", },
{ "", "", },
{ "=do<>,d<", "r,m", },
{ "=do<>,d", "d,m", },
{ "=do<>,d", "d,m", },
{ "=*d,a", "0,rm", },
{ "=d", "0", },
{ "=d", "0", },
{ "", "", },
{ "=x,y", "xH,rmF", },
{ "=*fdm,f", "f,dmF", },
{ "", "", },
{ "=x,y", "xH,rmF", },
{ "=f", "fmG", },
{ "=dm", "f", },
{ "", "", },
{ "=y,x", "rmi,x", },
{ "=f", "dmi", },
{ "", "", },
{ "=y,x", "rmi,x", },
{ "=f", "dmi", },
{ "=f", "dmn", },
{ "=f", "dmn", },
{ "=f", "dmn", },
{ "=f", "dmn", },
{ "=dm", "f", "=d", "=d", },
{ "=dm", "f", "=d", "=d", },
{ "=dm", "f", "=d", "=d", },
{ "=f", "fFm", },
{ "=f", "dfFm", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "=x,y", "xH,rmF", },
{ "=x,y", "xH,rmF", },
{ "=m,?a,?a,r", "%0,a,rJK,0", "dIKLs,rJK,a,mrIKLs", },
{ "=a", "0", "rm", },
{ "=m,r", "%0,0", "dn,rmn", },
{ "+m,d", "dn,rmn", },
{ "+m,d", "dn,rmn", },
{ "=m,d", "%0,0", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "", "", "", },
{ "=x,y", "%xH,y", "xH,dmF", },
{ "=f", "%0", "fmG", },
{ "", "", "", },
{ "=x,y", "%xH,y", "xH,rmF", },
{ "=f", "%0", "fdmF", },
{ "=m,r,!a,?d", "0,0,a,mrIKs", "dIKs,mrIKs,J,0", },
{ "=a", "0", "rm", },
{ "=m,r", "0,0", "dn,rmn", },
{ "+m,d", "dn,rmn", },
{ "=m,d", "0,0", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "", "", "", },
{ "=x,y,y", "xH,y,dmF", "xH,dmF,0", },
{ "=f", "0", "fmG", },
{ "", "", "", },
{ "=x,y,y", "xH,y,rmF", "xH,rmF,0", },
{ "=f", "0", "fdmF", },
{ "=d", "%0", "dmn", },
{ "=d", "%0", "dm", },
{ "=d", "%0", "n", },
{ "=d", "%0", "dmsK", },
{ "=d", "%0", "dm", },
{ "=d", "%0", "n", },
{ "", "", "", },
{ "=d", "%0", "dm", "=d", },
{ "=d", "%0", "n", "=d", },
{ "", "", "", },
{ "=d", "%0", "dm", "=d", },
{ "=d", "%0", "n", "=d", },
{ "", "", "", },
{ "=x,y", "%xH,y", "xH,rmF", },
{ "=f", "%0", "fmG", },
{ "", "", "", },
{ "=x,y", "%xH,y", "xH,rmF", },
{ "=f", "%0", "fdmF", },
{ "=d", "0", "dmn", },
{ "=d", "0", "dm", },
{ "=d", "0", "n", },
{ "=d", "0", "dmn", },
{ "=d", "0", "dm", },
{ "=d", "0", "n", },
{ "", "", "", },
{ "=x,y,y", "xH,y,rmF", "xH,rmF,0", },
{ "=f", "0", "fmG", },
{ "", "", "", },
{ "=x,y,y", "xH,y,rmF", "xH,rmF,0", },
{ "=f", "0", "fdmF", },
{ "=d", "0", "dmn", },
{ "=d", "0", "dm", },
{ "=d", "0", "n", },
{ "=d", "0", "dmn", },
{ "=d", "0", "dm", },
{ "=d", "0", "n", },
{ "=d", "0", "dmsK", "=d", },
{ "=d", "0", "dmsK", "=d", },
{ "=m,d", "%0,0", "dKs,dmKs", },
{ "=m,d", "%0,0", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "=m,d", "%0,0", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "=m,d", "%0,0", "dKs,dmKs", },
{ "=m,d", "%0,0", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "=m,d", "%0,0", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "+m,d", "dn,dmn", },
{ "=do,m", "%0,0", "di,dKs", },
{ "=dm", "%0", "dn", },
{ "+dm", "dn", },
{ "+dm", "dn", },
{ "=dm", "%0", "dn", },
{ "+dm", "dn", },
{ "+dm", "dn", },
{ "=dm", "0", },
{ "=dm", "0", },
{ "+dm", },
{ "=dm", "0", },
{ "+dm", },
{ "", "", },
{ "=x,y", "xH,rmF", },
{ "=f,d", "fdmF,0", },
{ "", "", },
{ "=x,y", "xH,rmF", },
{ "=f,d", "fmF,0", },
{ "=f", "fm", },
{ "", "", },
{ "=x,y", "xH,rmF", },
{ "=f", "fdmF", },
{ "", "", },
{ "=x,y", "xH,rmF", },
{ "=f", "fmF", },
{ "=dm", "0", },
{ "=dm", "0", },
{ "+dm", },
{ "=dm", "0", },
{ "+dm", },
{ "=d", "0", "i", },
{ "=d", "0", "i", },
{ "=d", "0", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "i", },
{ "=d", "0", "i", },
{ "=d", "0", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "i", },
{ "=d", "0", "i", },
{ "=d", "0", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "i", },
{ "=d", "0", "i", },
{ "=d", "0", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "=d", "0", "dI", },
{ "+d", "dI", },
{ "+o", "i", "i", "rmi", },
{ "+do", "i", "i", "d", },
{ "=rm", "o", "i", "i", },
{ "=&d", "do", "i", "i", },
{ "=rm", "o", "i", "i", },
{ "=d", "do", "i", "i", },
{ "=d,d", "o,d", "di,di", "di,di", },
{ "=d,d", "o,d", "di,di", "di,di", },
{ "+o,d", "di,di", "di,di", "i,i", },
{ "+o,d", "di,di", "di,di", },
{ "+o,d", "di,di", "di,di", },
{ "+o,d", "di,di", "di,di", "d,d", },
{ "=d", "d", "di", "di", },
{ "=d", "d", "di", "di", },
{ "+d", "di", "di", },
{ "+d", "di", "di", },
{ "+d", "di", "di", "d", },
{ "o", "di", "di", },
{ "d", "di", "di", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ "=d", },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ "", },
{ "a", },
{ "r", },
{ "+g", },
{ "+g", },
{ "+g", },
{ "+g", },
{ "", "", },
{ "o", "g", },
{ "o", "g", },
{ "", "", "", },
{ "=rf", "o", "g", },
{ "=rf", "o", "g", },
{ "", "", "", },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ "p", },
{ "=a", "p", },
{ "=f", "ad", },
{ "n", "=m", "rmfF", },
{ "n", "=m", "g", },
{ "", "dami", },
{ "=d", "rmn", },
{ "+d", "", "", "", },
{ "+d", "", "", "", },
{ "=x,y,y", "%x,dmF,y", "xH,y,y", "xH,y,dmF", },
{ "=x,y,y", "%x,ydmF,y", "xH,y,ydmF", "xH,ydmF,ydmF", },
{ "=x,y,y", "xH,rmF,y", "%xH,y,y", "x,y,rmF", },
{ "=x,y,y", "xH,rmF,yrmF", "%xH,rmF,y", "x,y,yrmF", },
{ "=x,y,y", "%xH,y,y", "x,y,rmF", "xH,rmF,y", },
{ "=x,y,y", "%xH,rmF,y", "x,y,yrmF", "xH,rmF,yrmF", },
{ "=x,y,y", "%xH,y,y", "x,y,rmF", "xH,rmF,y", },
{ "=x,y,y", "%xH,rmF,y", "x,y,yrmF", "xH,rmF,yrmF", },
{ "=x,y,y", "xH,y,y", "x,y,rmF", "xH,rmF,y", },
{ "=x,y,y", "xH,rmF,y", "xH,y,y", "x,y,rmF", },
{ "=x,y,y", "xH,rmF,y", "x,y,yrmF", "xH,rmF,yrmF", },
{ "=x,y,y", "xH,rmF,yrmF", "xH,rmF,y", "x,y,yrmF", },
{ "fm", },
{ "f,mG", "fmG,f", },
{ "f,mG", "fmG,f", },
{ "=fm,f", "f,m", },
{ "=fm,f", "f,m", },
{ "=m,!r", "f,f", },
{ "=dm", "f", },
{ "=f", "dmi", },
{ "=f", "dmn", },
{ "=f", "dmn", },
{ "=f", "fFm", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "=dm", "f", },
{ "", "", "", },
{ "=f", "%0", "fmG", },
{ "", "", "", },
{ "=f", "0", "fmG", },
{ "", "", "", },
{ "=f", "%0", "fmG", },
{ "", "", "", },
{ "=f", "0", "fmG", },
{ "=f", "fmF", },
{ "=f", "fmF", },
{ "=f", "fm", },
};
const enum machine_mode insn_operand_mode[][MAX_RECOG_OPERANDS] =
{
{ DFmode, DFmode, },
{ DImode, DImode, },
{ SImode, },
{ HImode, },
{ QImode, },
{ SFmode, },
{ SFmode, SImode, },
{ SFmode, },
{ DFmode, },
{ DFmode, SImode, },
{ DFmode, },
{ SImode, SImode, },
{ HImode, HImode, },
{ QImode, QImode, },
{ DFmode, DFmode, },
{ DFmode, DFmode, SImode, },
{ DFmode, DFmode, },
{ SFmode, SFmode, },
{ SFmode, SFmode, SImode, },
{ SFmode, SFmode, },
{ QImode, SImode, },
{ SImode, SImode, },
{ QImode, SImode, },
{ SImode, SImode, },
{ QImode, SImode, },
{ SImode, SImode, },
{ SImode, SImode, },
{ SImode, },
{ SImode, SImode, },
{ SImode, SImode, },
{ HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, },
{ QImode, QImode, },
{ SFmode, SFmode, },
{ DFmode, DFmode, },
{ XFmode, XFmode, },
{ XFmode, XFmode, },
{ XFmode, XFmode, },
{ DImode, DImode, },
{ SImode, SImode, },
{ QImode, SImode, },
{ QImode, HImode, },
{ HImode, SImode, },
{ SImode, HImode, },
{ HImode, QImode, },
{ SImode, QImode, },
{ SImode, HImode, },
{ HImode, QImode, },
{ SImode, QImode, },
{ SImode, HImode, },
{ HImode, QImode, },
{ SImode, QImode, },
{ DFmode, SFmode, },
{ DFmode, SFmode, },
{ DFmode, SFmode, },
{ SFmode, DFmode, },
{ SFmode, DFmode, },
{ SFmode, DFmode, },
{ SFmode, DFmode, },
{ SFmode, SImode, },
{ SFmode, SImode, },
{ SFmode, SImode, },
{ DFmode, SImode, },
{ DFmode, SImode, },
{ DFmode, SImode, },
{ SFmode, HImode, },
{ DFmode, HImode, },
{ SFmode, QImode, },
{ DFmode, QImode, },
{ SImode, DFmode, SImode, SImode, },
{ HImode, DFmode, SImode, SImode, },
{ QImode, DFmode, SImode, SImode, },
{ DFmode, DFmode, },
{ SFmode, SFmode, },
{ QImode, SFmode, },
{ HImode, SFmode, },
{ SImode, SFmode, },
{ QImode, DFmode, },
{ HImode, DFmode, },
{ SImode, DFmode, },
{ SImode, SFmode, },
{ SImode, DFmode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, HImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ QImode, QImode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, HImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ HImode, HImode, HImode, },
{ SImode, HImode, HImode, },
{ SImode, HImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, HImode, HImode, },
{ SImode, HImode, SImode, },
{ DImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ DImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ HImode, HImode, HImode, },
{ HImode, SImode, HImode, },
{ HImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, SImode, HImode, },
{ HImode, SImode, SImode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, },
{ HImode, HImode, HImode, },
{ HImode, SImode, HImode, },
{ HImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, SImode, HImode, },
{ HImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, },
{ HImode, HImode, },
{ HImode, },
{ QImode, QImode, },
{ QImode, },
{ SFmode, SFmode, },
{ SFmode, SFmode, },
{ SFmode, SFmode, },
{ DFmode, DFmode, },
{ DFmode, DFmode, },
{ DFmode, DFmode, },
{ DFmode, DFmode, },
{ SFmode, SFmode, },
{ SFmode, SFmode, },
{ SFmode, SFmode, },
{ DFmode, DFmode, },
{ DFmode, DFmode, },
{ DFmode, DFmode, },
{ SImode, SImode, },
{ HImode, HImode, },
{ HImode, },
{ QImode, QImode, },
{ QImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ SImode, SImode, SImode, },
{ HImode, HImode, HImode, },
{ HImode, HImode, },
{ QImode, QImode, QImode, },
{ QImode, QImode, },
{ QImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, QImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, QImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, QImode, SImode, SImode, },
{ SImode, QImode, SImode, SImode, },
{ QImode, SImode, SImode, VOIDmode, },
{ QImode, SImode, SImode, },
{ QImode, SImode, SImode, },
{ QImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ SImode, SImode, SImode, SImode, },
{ QImode, SImode, SImode, },
{ SImode, SImode, SImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ QImode, },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode, },
{ SImode, },
{ HImode, },
{ HImode, },
{ SImode, },
{ HImode, },
{ SImode, },
{ QImode, SImode, },
{ QImode, SImode, },
{ QImode, SImode, },
{ VOIDmode, QImode, SImode, },
{ VOIDmode, QImode, SImode, },
{ VOIDmode, QImode, SImode, },
{ VOIDmode, VOIDmode, VOIDmode, },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ VOIDmode },
{ SImode, },
{ SImode, QImode, },
{ VOIDmode, VOIDmode, },
{ VOIDmode, VOIDmode, VOIDmode, },
{ VOIDmode, VOIDmode, VOIDmode, },
{ VOIDmode, VOIDmode, },
{ VOIDmode, VOIDmode, },
{ VOIDmode, VOIDmode, VOIDmode, VOIDmode, },
{ VOIDmode, VOIDmode, VOIDmode, VOIDmode, },
{ DFmode, DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, SFmode, },
{ DFmode, DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, SFmode, },
{ DFmode, DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, SFmode, },
{ DFmode, DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, SFmode, },
{ DFmode, DFmode, DFmode, DFmode, },
{ DFmode, DFmode, DFmode, DFmode, },
{ SFmode, SFmode, SFmode, SFmode, },
{ SFmode, SFmode, SFmode, SFmode, },
{ XFmode, },
{ XFmode, XFmode, },
{ XFmode, XFmode, },
{ XFmode, SFmode, },
{ XFmode, DFmode, },
{ DFmode, XFmode, },
{ SFmode, XFmode, },
{ XFmode, SImode, },
{ XFmode, HImode, },
{ XFmode, QImode, },
{ XFmode, XFmode, },
{ QImode, XFmode, },
{ HImode, XFmode, },
{ SImode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, XFmode, },
{ XFmode, XFmode, },
{ XFmode, XFmode, },
{ XFmode, DFmode, },
};
const char insn_operand_strict_low[][MAX_RECOG_OPERANDS] =
{
{ 0, 0, },
{ 0, 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, 0, },
{ 0, },
{ 0, },
{ 0, 0, },
{ 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 1, 0, },
{ 0, 0, },
{ 1, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 1, 0, },
{ 0, 0, },
{ 0, 0, },
{ 1, },
{ 0, 0, },
{ 1, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 1, },
{ 0, 0, },
{ 1, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, },
{ 1, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, },
};
extern int push_operand ();
extern int general_operand ();
extern int nonimmediate_operand ();
extern int scratch_operand ();
extern int address_operand ();
extern int register_operand ();
extern int const_int_operand ();
extern int not_sp_operand ();
extern int immediate_operand ();
extern int memory_operand ();
int (*const insn_operand_predicate[][MAX_RECOG_OPERANDS])() =
{
{ push_operand, general_operand, },
{ push_operand, general_operand, },
{ nonimmediate_operand, },
{ nonimmediate_operand, },
{ nonimmediate_operand, },
{ general_operand, },
{ general_operand, scratch_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, scratch_operand, },
{ general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, scratch_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, scratch_operand, },
{ general_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ push_operand, general_operand, },
{ general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ nonimmediate_operand, general_operand, },
{ nonimmediate_operand, nonimmediate_operand, },
{ nonimmediate_operand, nonimmediate_operand, },
{ general_operand, general_operand, },
{ push_operand, address_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, general_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, register_operand, scratch_operand, scratch_operand, },
{ general_operand, register_operand, scratch_operand, scratch_operand, },
{ general_operand, register_operand, scratch_operand, scratch_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, nonimmediate_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, nonimmediate_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, const_int_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, const_int_operand, },
{ register_operand, register_operand, nonimmediate_operand, },
{ register_operand, register_operand, nonimmediate_operand, register_operand, },
{ register_operand, register_operand, const_int_operand, register_operand, },
{ register_operand, register_operand, nonimmediate_operand, },
{ register_operand, register_operand, nonimmediate_operand, register_operand, },
{ register_operand, register_operand, const_int_operand, register_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, nonimmediate_operand, },
{ general_operand, general_operand, const_int_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, nonimmediate_operand, },
{ general_operand, general_operand, const_int_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, nonimmediate_operand, },
{ general_operand, general_operand, const_int_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, nonimmediate_operand, },
{ general_operand, general_operand, const_int_operand, },
{ general_operand, general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, general_operand, },
{ not_sp_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, },
{ general_operand, general_operand, },
{ general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, },
{ general_operand, general_operand, },
{ general_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, immediate_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ register_operand, register_operand, general_operand, },
{ register_operand, general_operand, },
{ nonimmediate_operand, immediate_operand, immediate_operand, general_operand, },
{ nonimmediate_operand, immediate_operand, immediate_operand, general_operand, },
{ general_operand, nonimmediate_operand, immediate_operand, immediate_operand, },
{ general_operand, nonimmediate_operand, immediate_operand, immediate_operand, },
{ general_operand, nonimmediate_operand, immediate_operand, immediate_operand, },
{ general_operand, nonimmediate_operand, immediate_operand, immediate_operand, },
{ general_operand, nonimmediate_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, immediate_operand, },
{ nonimmediate_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, general_operand, },
{ memory_operand, general_operand, general_operand, },
{ nonimmediate_operand, general_operand, general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0, },
{ register_operand, },
{ register_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ general_operand, },
{ memory_operand, general_operand, },
{ memory_operand, general_operand, },
{ memory_operand, general_operand, },
{ 0, memory_operand, general_operand, },
{ 0, memory_operand, general_operand, },
{ 0, memory_operand, general_operand, },
{ 0, 0, 0, },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ address_operand, },
{ general_operand, address_operand, },
{ 0, 0, },
{ 0, 0, 0, },
{ 0, 0, 0, },
{ 0, 0, },
{ 0, 0, },
{ 0, 0, 0, 0, },
{ 0, 0, 0, 0, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ register_operand, general_operand, general_operand, general_operand, },
{ nonimmediate_operand, },
{ general_operand, general_operand, },
{ nonimmediate_operand, nonimmediate_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, nonimmediate_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, nonimmediate_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, nonimmediate_operand, },
{ general_operand, general_operand, general_operand, },
{ general_operand, nonimmediate_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
{ general_operand, nonimmediate_operand, },
};
const int insn_n_alternatives[] =
{
1,
1,
1,
1,
1,
0,
1,
1,
0,
1,
1,
3,
4,
3,
0,
2,
2,
0,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
0,
4,
1,
1,
5,
1,
6,
8,
0,
5,
3,
7,
1,
2,
2,
2,
0,
0,
0,
2,
2,
2,
2,
1,
1,
0,
2,
2,
0,
2,
1,
1,
0,
2,
1,
0,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
4,
1,
2,
2,
2,
2,
2,
2,
0,
2,
1,
0,
2,
1,
4,
1,
2,
2,
2,
2,
0,
3,
1,
0,
3,
1,
1,
1,
1,
1,
1,
1,
0,
1,
1,
0,
1,
1,
0,
2,
1,
0,
2,
1,
1,
1,
1,
1,
1,
1,
0,
3,
1,
0,
3,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
2,
2,
0,
2,
2,
1,
0,
2,
1,
0,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
0,
1,
1,
0,
1,
1,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
1,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
0,
1,
0,
1,
0,
1,
0,
1,
1,
1,
1,
};