/* 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 #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, };