emit_insn (gen_x86_fnstcw_1 (stored_mode));
   emit_move_insn (reg, copy_rtx (stored_mode));
 
-  if (TARGET_64BIT || TARGET_PARTIAL_REG_STALL
-      || optimize_insn_for_size_p ())
-    {
-      switch (mode)
-       {
-       case I387_CW_TRUNC:
-         /* round toward zero (truncate) */
-         emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0c00)));
-         slot = SLOT_CW_TRUNC;
-         break;
-
-       case I387_CW_FLOOR:
-         /* round down toward -oo */
-         emit_insn (gen_andhi3 (reg, reg, GEN_INT (~0x0c00)));
-         emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0400)));
-         slot = SLOT_CW_FLOOR;
-         break;
-
-       case I387_CW_CEIL:
-         /* round up toward +oo */
-         emit_insn (gen_andhi3 (reg, reg, GEN_INT (~0x0c00)));
-         emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0800)));
-         slot = SLOT_CW_CEIL;
-         break;
-
-       case I387_CW_MASK_PM:
-         /* mask precision exception for nearbyint() */
-         emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0020)));
-         slot = SLOT_CW_MASK_PM;
-         break;
-
-       default:
-         gcc_unreachable ();
-       }
-    }
-  else
+  switch (mode)
     {
-      switch (mode)
-       {
-       case I387_CW_TRUNC:
-         /* round toward zero (truncate) */
-         emit_insn (gen_insvsi_1 (reg, GEN_INT (0xc)));
-         slot = SLOT_CW_TRUNC;
-         break;
+    case I387_CW_TRUNC:
+      /* round toward zero (truncate) */
+      emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0c00)));
+      slot = SLOT_CW_TRUNC;
+      break;
 
-       case I387_CW_FLOOR:
-         /* round down toward -oo */
-         emit_insn (gen_insvsi_1 (reg, GEN_INT (0x4)));
-         slot = SLOT_CW_FLOOR;
-         break;
+    case I387_CW_FLOOR:
+      /* round down toward -oo */
+      emit_insn (gen_andhi3 (reg, reg, GEN_INT (~0x0c00)));
+      emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0400)));
+      slot = SLOT_CW_FLOOR;
+      break;
 
-       case I387_CW_CEIL:
-         /* round up toward +oo */
-         emit_insn (gen_insvsi_1 (reg, GEN_INT (0x8)));
-         slot = SLOT_CW_CEIL;
-         break;
+    case I387_CW_CEIL:
+      /* round up toward +oo */
+      emit_insn (gen_andhi3 (reg, reg, GEN_INT (~0x0c00)));
+      emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0800)));
+      slot = SLOT_CW_CEIL;
+      break;
 
-       case I387_CW_MASK_PM:
-         /* mask precision exception for nearbyint() */
-         emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0020)));
-         slot = SLOT_CW_MASK_PM;
-         break;
+    case I387_CW_MASK_PM:
+      /* mask precision exception for nearbyint() */
+      emit_insn (gen_iorhi3 (reg, reg, GEN_INT (0x0020)));
+      slot = SLOT_CW_MASK_PM;
+      break;
 
-       default:
-         gcc_unreachable ();
-       }
+    default:
+      gcc_unreachable ();
     }
 
   gcc_assert (slot < MAX_386_STACK_LOCALS);