xref: /qemu/target/i386/tcg/cc_helper.c (revision f1cc7c28b611a5521e7e2e90d562e4b25af97d22)
15918fffbSBlue Swirl /*
25918fffbSBlue Swirl  *  x86 condition code helpers
35918fffbSBlue Swirl  *
45918fffbSBlue Swirl  *  Copyright (c) 2003 Fabrice Bellard
55918fffbSBlue Swirl  *
65918fffbSBlue Swirl  * This library is free software; you can redistribute it and/or
75918fffbSBlue Swirl  * modify it under the terms of the GNU Lesser General Public
85918fffbSBlue Swirl  * License as published by the Free Software Foundation; either
9d9ff33adSChetan Pant  * version 2.1 of the License, or (at your option) any later version.
105918fffbSBlue Swirl  *
115918fffbSBlue Swirl  * This library is distributed in the hope that it will be useful,
125918fffbSBlue Swirl  * but WITHOUT ANY WARRANTY; without even the implied warranty of
135918fffbSBlue Swirl  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
145918fffbSBlue Swirl  * Lesser General Public License for more details.
155918fffbSBlue Swirl  *
165918fffbSBlue Swirl  * You should have received a copy of the GNU Lesser General Public
175918fffbSBlue Swirl  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
185918fffbSBlue Swirl  */
195918fffbSBlue Swirl 
20b6a0aa05SPeter Maydell #include "qemu/osdep.h"
215918fffbSBlue Swirl #include "cpu.h"
222ef6175aSRichard Henderson #include "exec/helper-proto.h"
23ed69e831SClaudio Fontana #include "helper-tcg.h"
245918fffbSBlue Swirl 
255918fffbSBlue Swirl const uint8_t parity_table[256] = {
265918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
275918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
285918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
295918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
305918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
315918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
325918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
335918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
345918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
355918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
365918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
375918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
385918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
395918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
405918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
415918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
425918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
435918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
445918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
455918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
465918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
475918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
485918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
495918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
505918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
515918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
525918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
535918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
545918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
555918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
565918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
575918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
585918fffbSBlue Swirl };
595918fffbSBlue Swirl 
605918fffbSBlue Swirl #define SHIFT 0
61*f1cc7c28SPhilippe Mathieu-Daudé #include "cc_helper_template.h.inc"
625918fffbSBlue Swirl #undef SHIFT
635918fffbSBlue Swirl 
645918fffbSBlue Swirl #define SHIFT 1
65*f1cc7c28SPhilippe Mathieu-Daudé #include "cc_helper_template.h.inc"
665918fffbSBlue Swirl #undef SHIFT
675918fffbSBlue Swirl 
685918fffbSBlue Swirl #define SHIFT 2
69*f1cc7c28SPhilippe Mathieu-Daudé #include "cc_helper_template.h.inc"
705918fffbSBlue Swirl #undef SHIFT
715918fffbSBlue Swirl 
725918fffbSBlue Swirl #ifdef TARGET_X86_64
735918fffbSBlue Swirl 
745918fffbSBlue Swirl #define SHIFT 3
75*f1cc7c28SPhilippe Mathieu-Daudé #include "cc_helper_template.h.inc"
765918fffbSBlue Swirl #undef SHIFT
775918fffbSBlue Swirl 
785918fffbSBlue Swirl #endif
795918fffbSBlue Swirl 
80cd7f97caSRichard Henderson static target_ulong compute_all_adcx(target_ulong dst, target_ulong src1,
81cd7f97caSRichard Henderson                                      target_ulong src2)
82cd7f97caSRichard Henderson {
83cd7f97caSRichard Henderson     return (src1 & ~CC_C) | (dst * CC_C);
84cd7f97caSRichard Henderson }
85cd7f97caSRichard Henderson 
86cd7f97caSRichard Henderson static target_ulong compute_all_adox(target_ulong dst, target_ulong src1,
87cd7f97caSRichard Henderson                                      target_ulong src2)
88cd7f97caSRichard Henderson {
89cd7f97caSRichard Henderson     return (src1 & ~CC_O) | (src2 * CC_O);
90cd7f97caSRichard Henderson }
91cd7f97caSRichard Henderson 
92cd7f97caSRichard Henderson static target_ulong compute_all_adcox(target_ulong dst, target_ulong src1,
93cd7f97caSRichard Henderson                                       target_ulong src2)
94cd7f97caSRichard Henderson {
95cd7f97caSRichard Henderson     return (src1 & ~(CC_C | CC_O)) | (dst * CC_C) | (src2 * CC_O);
96cd7f97caSRichard Henderson }
97cd7f97caSRichard Henderson 
98988c3eb0SRichard Henderson target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1,
99988c3eb0SRichard Henderson                                    target_ulong src2, int op)
1005918fffbSBlue Swirl {
1015918fffbSBlue Swirl     switch (op) {
1025918fffbSBlue Swirl     default: /* should never happen */
1035918fffbSBlue Swirl         return 0;
1045918fffbSBlue Swirl 
1055918fffbSBlue Swirl     case CC_OP_EFLAGS:
1068601c0b6SRichard Henderson         return src1;
107436ff2d2SRichard Henderson     case CC_OP_CLR:
108d2fe51bdSRichard Henderson         return CC_Z | CC_P;
1094885c3c4SRichard Henderson     case CC_OP_POPCNT:
1104885c3c4SRichard Henderson         return src1 ? 0 : CC_Z;
1115918fffbSBlue Swirl 
1125918fffbSBlue Swirl     case CC_OP_MULB:
1138601c0b6SRichard Henderson         return compute_all_mulb(dst, src1);
1145918fffbSBlue Swirl     case CC_OP_MULW:
1158601c0b6SRichard Henderson         return compute_all_mulw(dst, src1);
1165918fffbSBlue Swirl     case CC_OP_MULL:
1178601c0b6SRichard Henderson         return compute_all_mull(dst, src1);
1185918fffbSBlue Swirl 
1195918fffbSBlue Swirl     case CC_OP_ADDB:
1208601c0b6SRichard Henderson         return compute_all_addb(dst, src1);
1215918fffbSBlue Swirl     case CC_OP_ADDW:
1228601c0b6SRichard Henderson         return compute_all_addw(dst, src1);
1235918fffbSBlue Swirl     case CC_OP_ADDL:
1248601c0b6SRichard Henderson         return compute_all_addl(dst, src1);
1255918fffbSBlue Swirl 
1265918fffbSBlue Swirl     case CC_OP_ADCB:
127988c3eb0SRichard Henderson         return compute_all_adcb(dst, src1, src2);
1285918fffbSBlue Swirl     case CC_OP_ADCW:
129988c3eb0SRichard Henderson         return compute_all_adcw(dst, src1, src2);
1305918fffbSBlue Swirl     case CC_OP_ADCL:
131988c3eb0SRichard Henderson         return compute_all_adcl(dst, src1, src2);
1325918fffbSBlue Swirl 
1335918fffbSBlue Swirl     case CC_OP_SUBB:
1348601c0b6SRichard Henderson         return compute_all_subb(dst, src1);
1355918fffbSBlue Swirl     case CC_OP_SUBW:
1368601c0b6SRichard Henderson         return compute_all_subw(dst, src1);
1375918fffbSBlue Swirl     case CC_OP_SUBL:
1388601c0b6SRichard Henderson         return compute_all_subl(dst, src1);
1395918fffbSBlue Swirl 
1405918fffbSBlue Swirl     case CC_OP_SBBB:
141988c3eb0SRichard Henderson         return compute_all_sbbb(dst, src1, src2);
1425918fffbSBlue Swirl     case CC_OP_SBBW:
143988c3eb0SRichard Henderson         return compute_all_sbbw(dst, src1, src2);
1445918fffbSBlue Swirl     case CC_OP_SBBL:
145988c3eb0SRichard Henderson         return compute_all_sbbl(dst, src1, src2);
1465918fffbSBlue Swirl 
1475918fffbSBlue Swirl     case CC_OP_LOGICB:
1488601c0b6SRichard Henderson         return compute_all_logicb(dst, src1);
1495918fffbSBlue Swirl     case CC_OP_LOGICW:
1508601c0b6SRichard Henderson         return compute_all_logicw(dst, src1);
1515918fffbSBlue Swirl     case CC_OP_LOGICL:
1528601c0b6SRichard Henderson         return compute_all_logicl(dst, src1);
1535918fffbSBlue Swirl 
1545918fffbSBlue Swirl     case CC_OP_INCB:
1558601c0b6SRichard Henderson         return compute_all_incb(dst, src1);
1565918fffbSBlue Swirl     case CC_OP_INCW:
1578601c0b6SRichard Henderson         return compute_all_incw(dst, src1);
1585918fffbSBlue Swirl     case CC_OP_INCL:
1598601c0b6SRichard Henderson         return compute_all_incl(dst, src1);
1605918fffbSBlue Swirl 
1615918fffbSBlue Swirl     case CC_OP_DECB:
1628601c0b6SRichard Henderson         return compute_all_decb(dst, src1);
1635918fffbSBlue Swirl     case CC_OP_DECW:
1648601c0b6SRichard Henderson         return compute_all_decw(dst, src1);
1655918fffbSBlue Swirl     case CC_OP_DECL:
1668601c0b6SRichard Henderson         return compute_all_decl(dst, src1);
1675918fffbSBlue Swirl 
1685918fffbSBlue Swirl     case CC_OP_SHLB:
1698601c0b6SRichard Henderson         return compute_all_shlb(dst, src1);
1705918fffbSBlue Swirl     case CC_OP_SHLW:
1718601c0b6SRichard Henderson         return compute_all_shlw(dst, src1);
1725918fffbSBlue Swirl     case CC_OP_SHLL:
1738601c0b6SRichard Henderson         return compute_all_shll(dst, src1);
1745918fffbSBlue Swirl 
1755918fffbSBlue Swirl     case CC_OP_SARB:
1768601c0b6SRichard Henderson         return compute_all_sarb(dst, src1);
1775918fffbSBlue Swirl     case CC_OP_SARW:
1788601c0b6SRichard Henderson         return compute_all_sarw(dst, src1);
1795918fffbSBlue Swirl     case CC_OP_SARL:
1808601c0b6SRichard Henderson         return compute_all_sarl(dst, src1);
1815918fffbSBlue Swirl 
182bc4b43dcSRichard Henderson     case CC_OP_BMILGB:
183bc4b43dcSRichard Henderson         return compute_all_bmilgb(dst, src1);
184bc4b43dcSRichard Henderson     case CC_OP_BMILGW:
185bc4b43dcSRichard Henderson         return compute_all_bmilgw(dst, src1);
186bc4b43dcSRichard Henderson     case CC_OP_BMILGL:
187bc4b43dcSRichard Henderson         return compute_all_bmilgl(dst, src1);
188bc4b43dcSRichard Henderson 
189cd7f97caSRichard Henderson     case CC_OP_ADCX:
190cd7f97caSRichard Henderson         return compute_all_adcx(dst, src1, src2);
191cd7f97caSRichard Henderson     case CC_OP_ADOX:
192cd7f97caSRichard Henderson         return compute_all_adox(dst, src1, src2);
193cd7f97caSRichard Henderson     case CC_OP_ADCOX:
194cd7f97caSRichard Henderson         return compute_all_adcox(dst, src1, src2);
195cd7f97caSRichard Henderson 
1965918fffbSBlue Swirl #ifdef TARGET_X86_64
1975918fffbSBlue Swirl     case CC_OP_MULQ:
1988601c0b6SRichard Henderson         return compute_all_mulq(dst, src1);
1995918fffbSBlue Swirl     case CC_OP_ADDQ:
2008601c0b6SRichard Henderson         return compute_all_addq(dst, src1);
2015918fffbSBlue Swirl     case CC_OP_ADCQ:
202988c3eb0SRichard Henderson         return compute_all_adcq(dst, src1, src2);
2035918fffbSBlue Swirl     case CC_OP_SUBQ:
2048601c0b6SRichard Henderson         return compute_all_subq(dst, src1);
2055918fffbSBlue Swirl     case CC_OP_SBBQ:
206988c3eb0SRichard Henderson         return compute_all_sbbq(dst, src1, src2);
2075918fffbSBlue Swirl     case CC_OP_LOGICQ:
2088601c0b6SRichard Henderson         return compute_all_logicq(dst, src1);
2095918fffbSBlue Swirl     case CC_OP_INCQ:
2108601c0b6SRichard Henderson         return compute_all_incq(dst, src1);
2115918fffbSBlue Swirl     case CC_OP_DECQ:
2128601c0b6SRichard Henderson         return compute_all_decq(dst, src1);
2135918fffbSBlue Swirl     case CC_OP_SHLQ:
2148601c0b6SRichard Henderson         return compute_all_shlq(dst, src1);
2155918fffbSBlue Swirl     case CC_OP_SARQ:
2168601c0b6SRichard Henderson         return compute_all_sarq(dst, src1);
217bc4b43dcSRichard Henderson     case CC_OP_BMILGQ:
218bc4b43dcSRichard Henderson         return compute_all_bmilgq(dst, src1);
2195918fffbSBlue Swirl #endif
2205918fffbSBlue Swirl     }
2215918fffbSBlue Swirl }
2225918fffbSBlue Swirl 
223f0967a1aSBlue Swirl uint32_t cpu_cc_compute_all(CPUX86State *env, int op)
2245918fffbSBlue Swirl {
225988c3eb0SRichard Henderson     return helper_cc_compute_all(CC_DST, CC_SRC, CC_SRC2, op);
2265918fffbSBlue Swirl }
2275918fffbSBlue Swirl 
228988c3eb0SRichard Henderson target_ulong helper_cc_compute_c(target_ulong dst, target_ulong src1,
229988c3eb0SRichard Henderson                                  target_ulong src2, int op)
2305918fffbSBlue Swirl {
2315918fffbSBlue Swirl     switch (op) {
2325918fffbSBlue Swirl     default: /* should never happen */
2338601c0b6SRichard Henderson     case CC_OP_LOGICB:
2348601c0b6SRichard Henderson     case CC_OP_LOGICW:
2358601c0b6SRichard Henderson     case CC_OP_LOGICL:
2368601c0b6SRichard Henderson     case CC_OP_LOGICQ:
237436ff2d2SRichard Henderson     case CC_OP_CLR:
2384885c3c4SRichard Henderson     case CC_OP_POPCNT:
2395918fffbSBlue Swirl         return 0;
2405918fffbSBlue Swirl 
2415918fffbSBlue Swirl     case CC_OP_EFLAGS:
2428601c0b6SRichard Henderson     case CC_OP_SARB:
2438601c0b6SRichard Henderson     case CC_OP_SARW:
2448601c0b6SRichard Henderson     case CC_OP_SARL:
2458601c0b6SRichard Henderson     case CC_OP_SARQ:
246cd7f97caSRichard Henderson     case CC_OP_ADOX:
2478601c0b6SRichard Henderson         return src1 & 1;
2485918fffbSBlue Swirl 
2495918fffbSBlue Swirl     case CC_OP_INCB:
2505918fffbSBlue Swirl     case CC_OP_INCW:
2515918fffbSBlue Swirl     case CC_OP_INCL:
2528601c0b6SRichard Henderson     case CC_OP_INCQ:
2535918fffbSBlue Swirl     case CC_OP_DECB:
2545918fffbSBlue Swirl     case CC_OP_DECW:
2555918fffbSBlue Swirl     case CC_OP_DECL:
2568601c0b6SRichard Henderson     case CC_OP_DECQ:
2578601c0b6SRichard Henderson         return src1;
2588601c0b6SRichard Henderson 
2598601c0b6SRichard Henderson     case CC_OP_MULB:
2608601c0b6SRichard Henderson     case CC_OP_MULW:
2618601c0b6SRichard Henderson     case CC_OP_MULL:
2628601c0b6SRichard Henderson     case CC_OP_MULQ:
2638601c0b6SRichard Henderson         return src1 != 0;
2648601c0b6SRichard Henderson 
265cd7f97caSRichard Henderson     case CC_OP_ADCX:
266cd7f97caSRichard Henderson     case CC_OP_ADCOX:
267cd7f97caSRichard Henderson         return dst;
268cd7f97caSRichard Henderson 
2698601c0b6SRichard Henderson     case CC_OP_ADDB:
2708601c0b6SRichard Henderson         return compute_c_addb(dst, src1);
2718601c0b6SRichard Henderson     case CC_OP_ADDW:
2728601c0b6SRichard Henderson         return compute_c_addw(dst, src1);
2738601c0b6SRichard Henderson     case CC_OP_ADDL:
2748601c0b6SRichard Henderson         return compute_c_addl(dst, src1);
2758601c0b6SRichard Henderson 
2768601c0b6SRichard Henderson     case CC_OP_ADCB:
277988c3eb0SRichard Henderson         return compute_c_adcb(dst, src1, src2);
2788601c0b6SRichard Henderson     case CC_OP_ADCW:
279988c3eb0SRichard Henderson         return compute_c_adcw(dst, src1, src2);
2808601c0b6SRichard Henderson     case CC_OP_ADCL:
281988c3eb0SRichard Henderson         return compute_c_adcl(dst, src1, src2);
2828601c0b6SRichard Henderson 
2838601c0b6SRichard Henderson     case CC_OP_SUBB:
2848601c0b6SRichard Henderson         return compute_c_subb(dst, src1);
2858601c0b6SRichard Henderson     case CC_OP_SUBW:
2868601c0b6SRichard Henderson         return compute_c_subw(dst, src1);
2878601c0b6SRichard Henderson     case CC_OP_SUBL:
2888601c0b6SRichard Henderson         return compute_c_subl(dst, src1);
2898601c0b6SRichard Henderson 
2908601c0b6SRichard Henderson     case CC_OP_SBBB:
291988c3eb0SRichard Henderson         return compute_c_sbbb(dst, src1, src2);
2928601c0b6SRichard Henderson     case CC_OP_SBBW:
293988c3eb0SRichard Henderson         return compute_c_sbbw(dst, src1, src2);
2948601c0b6SRichard Henderson     case CC_OP_SBBL:
295988c3eb0SRichard Henderson         return compute_c_sbbl(dst, src1, src2);
2965918fffbSBlue Swirl 
2975918fffbSBlue Swirl     case CC_OP_SHLB:
2988601c0b6SRichard Henderson         return compute_c_shlb(dst, src1);
2995918fffbSBlue Swirl     case CC_OP_SHLW:
3008601c0b6SRichard Henderson         return compute_c_shlw(dst, src1);
3015918fffbSBlue Swirl     case CC_OP_SHLL:
3028601c0b6SRichard Henderson         return compute_c_shll(dst, src1);
3035918fffbSBlue Swirl 
304bc4b43dcSRichard Henderson     case CC_OP_BMILGB:
305bc4b43dcSRichard Henderson         return compute_c_bmilgb(dst, src1);
306bc4b43dcSRichard Henderson     case CC_OP_BMILGW:
307bc4b43dcSRichard Henderson         return compute_c_bmilgw(dst, src1);
308bc4b43dcSRichard Henderson     case CC_OP_BMILGL:
309bc4b43dcSRichard Henderson         return compute_c_bmilgl(dst, src1);
310bc4b43dcSRichard Henderson 
3115918fffbSBlue Swirl #ifdef TARGET_X86_64
3125918fffbSBlue Swirl     case CC_OP_ADDQ:
3138601c0b6SRichard Henderson         return compute_c_addq(dst, src1);
3145918fffbSBlue Swirl     case CC_OP_ADCQ:
315988c3eb0SRichard Henderson         return compute_c_adcq(dst, src1, src2);
3165918fffbSBlue Swirl     case CC_OP_SUBQ:
3178601c0b6SRichard Henderson         return compute_c_subq(dst, src1);
3185918fffbSBlue Swirl     case CC_OP_SBBQ:
319988c3eb0SRichard Henderson         return compute_c_sbbq(dst, src1, src2);
3205918fffbSBlue Swirl     case CC_OP_SHLQ:
3218601c0b6SRichard Henderson         return compute_c_shlq(dst, src1);
322bc4b43dcSRichard Henderson     case CC_OP_BMILGQ:
323bc4b43dcSRichard Henderson         return compute_c_bmilgq(dst, src1);
3245918fffbSBlue Swirl #endif
3255918fffbSBlue Swirl     }
3265918fffbSBlue Swirl }
3275918fffbSBlue Swirl 
328f0967a1aSBlue Swirl void helper_write_eflags(CPUX86State *env, target_ulong t0,
329f0967a1aSBlue Swirl                          uint32_t update_mask)
3305918fffbSBlue Swirl {
3315918fffbSBlue Swirl     cpu_load_eflags(env, t0, update_mask);
3325918fffbSBlue Swirl }
3335918fffbSBlue Swirl 
334f0967a1aSBlue Swirl target_ulong helper_read_eflags(CPUX86State *env)
3355918fffbSBlue Swirl {
3365918fffbSBlue Swirl     uint32_t eflags;
3375918fffbSBlue Swirl 
338db9f2597SRichard Henderson     eflags = cpu_cc_compute_all(env, CC_OP);
33980cf2c81Sliguang     eflags |= (env->df & DF_MASK);
3405918fffbSBlue Swirl     eflags |= env->eflags & ~(VM_MASK | RF_MASK);
3415918fffbSBlue Swirl     return eflags;
3425918fffbSBlue Swirl }
3435918fffbSBlue Swirl 
344f0967a1aSBlue Swirl void helper_clts(CPUX86State *env)
3455918fffbSBlue Swirl {
3465918fffbSBlue Swirl     env->cr[0] &= ~CR0_TS_MASK;
3475918fffbSBlue Swirl     env->hflags &= ~HF_TS_MASK;
3485918fffbSBlue Swirl }
349