--- gcc/config/m68k.md 2018/04/24 17:58:23 1.1.1.3 +++ gcc/config/m68k.md 2018/04/24 18:03:42 1.1.1.4 @@ -656,8 +656,8 @@ ;This is never used. ;(define_insn "swapsi" -; [(set (match_operand:SI 0 "general_operand" "r") -; (match_operand:SI 1 "general_operand" "r")) +; [(set (match_operand:SI 0 "general_operand" "+r") +; (match_operand:SI 1 "general_operand" "+r")) ; (set (match_dup 1) (match_dup 0))] ; "" ; "exg %1,%0") @@ -2537,10 +2537,17 @@ "TARGET_68881" "* { +#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\"); @@ -3624,7 +3631,7 @@ ; than an odd byte aligned bit field instruction. ; (define_insn "" - [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "o") + [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o") (match_operand:SI 1 "immediate_operand" "i") (match_operand:SI 2 "immediate_operand" "i")) (match_operand:SI 3 "general_operand" "rmi"))] @@ -4729,7 +4736,7 @@ { operands[0] = gen_rtx (PLUS, SImode, stack_pointer_rtx, gen_rtx (CONST_INT, VOIDmode, NEED_PROBE)); - return \"tstl %0\"; + return \"tstl %a0\"; }") ;; Used for frameless functions which save no regs and allocate no locals. @@ -4745,15 +4752,9 @@ }") (define_insn "indirect_jump" - [(set (pc) (match_operand:SI 0 "register_operand" "a"))] + [(set (pc) (match_operand:SI 0 "address_operand" "p"))] "" - "* -#ifdef MOTOROLA - return \"jmp (%0)\"; -#else - return \"jmp %0@\"; -#endif -") + "jmp %a0") ;; This should not be used unless the add/sub insns can't be. @@ -4770,7 +4771,7 @@ (define_peephole [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) - (set (match_operand:DF 0 "register_operand" "f") + (set (match_operand:DF 0 "register_operand" "=f") (match_operand:DF 1 "register_operand" "ad"))] "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" "*