Emulate MMX movntq with SSE2 movntidi. Only SSE register source operand is allowed.
PR target/89021 * config/i386/mmx.md (sse_movntq): Renamed to ... (*sse_movntq): This. (sse_movntq): New. Emulate MMX movntq with SSE2 movntidi. --- gcc/config/i386/mmx.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index 5cbe1875f21..481b987f4a7 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -243,11 +243,27 @@ DONE; }) -(define_insn "sse_movntq" +(define_expand "sse_movntq" + [(set (match_operand:DI 0 "memory_operand") + (unspec:DI [(match_operand:DI 1 "register_operand")] + UNSPEC_MOVNTQ))] + "((TARGET_MMX || TARGET_MMX_WITH_SSE) && TARGET_SSE) + || TARGET_3DNOW_A" +{ + if (TARGET_MMX_WITH_SSE) + { + rtx insn = gen_sse2_movntidi (operands[0], operands[1]); + emit_insn (insn); + DONE; + } +}) + +(define_insn "*sse_movntq" [(set (match_operand:DI 0 "memory_operand" "=m") (unspec:DI [(match_operand:DI 1 "register_operand" "y")] UNSPEC_MOVNTQ))] - "TARGET_SSE || TARGET_3DNOW_A" + "(TARGET_MMX && !TARGET_MMX_WITH_SSE && TARGET_SSE) + || TARGET_3DNOW_A" "movntq\t{%1, %0|%0, %1}" [(set_attr "type" "mmxmov") (set_attr "mode" "DI")]) -- 2.20.1