With SSE emulation of MMX intrinsics, we should make _mm_empty () as NOP when MMX is disabled.
PR target/89021 * config/i386/mmx.md (mmx_<emms>): Renamed to ... (mmx_<emms>_1): This. (mmx_<emms>): New expander. --- gcc/config/i386/mmx.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index 9cf0251293a..0f925c0b1ea 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -1848,7 +1848,34 @@ [(UNSPECV_EMMS "emms") (UNSPECV_FEMMS "femms")]) -(define_insn "mmx_<emms>" +(define_expand "mmx_<emms>" + [(unspec_volatile [(const_int 0)] EMMS) + (clobber (reg:XF ST0_REG)) + (clobber (reg:XF ST1_REG)) + (clobber (reg:XF ST2_REG)) + (clobber (reg:XF ST3_REG)) + (clobber (reg:XF ST4_REG)) + (clobber (reg:XF ST5_REG)) + (clobber (reg:XF ST6_REG)) + (clobber (reg:XF ST7_REG)) + (clobber (reg:DI MM0_REG)) + (clobber (reg:DI MM1_REG)) + (clobber (reg:DI MM2_REG)) + (clobber (reg:DI MM3_REG)) + (clobber (reg:DI MM4_REG)) + (clobber (reg:DI MM5_REG)) + (clobber (reg:DI MM6_REG)) + (clobber (reg:DI MM7_REG))] + "TARGET_MMX || TARGET_MMX_WITH_SSE" +{ + if (TARGET_MMX) + emit_insn (gen_mmx_<emms>_1 ()); + else + emit_insn (gen_nop ()); + DONE; +}) + +(define_insn "mmx_<emms>_1" [(unspec_volatile [(const_int 0)] EMMS) (clobber (reg:XF ST0_REG)) (clobber (reg:XF ST1_REG)) -- 2.20.1