xref: /qemu/target/i386/tcg/cc_helper.c (revision d9ff33ada7f32ca59f99b270a2d0eb223b3c9c8f)
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"
235918fffbSBlue Swirl 
245918fffbSBlue Swirl const uint8_t parity_table[256] = {
255918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
265918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
275918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
285918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
295918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
305918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
315918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
325918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
335918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
345918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
355918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
365918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
375918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
385918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
395918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
405918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
415918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
425918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
435918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
445918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
455918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
465918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
475918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
485918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
495918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
505918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
515918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
525918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
535918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
545918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
555918fffbSBlue Swirl     CC_P, 0, 0, CC_P, 0, CC_P, CC_P, 0,
565918fffbSBlue Swirl     0, CC_P, CC_P, 0, CC_P, 0, 0, CC_P,
575918fffbSBlue Swirl };
585918fffbSBlue Swirl 
595918fffbSBlue Swirl #define SHIFT 0
605918fffbSBlue Swirl #include "cc_helper_template.h"
615918fffbSBlue Swirl #undef SHIFT
625918fffbSBlue Swirl 
635918fffbSBlue Swirl #define SHIFT 1
645918fffbSBlue Swirl #include "cc_helper_template.h"
655918fffbSBlue Swirl #undef SHIFT
665918fffbSBlue Swirl 
675918fffbSBlue Swirl #define SHIFT 2
685918fffbSBlue Swirl #include "cc_helper_template.h"
695918fffbSBlue Swirl #undef SHIFT
705918fffbSBlue Swirl 
715918fffbSBlue Swirl #ifdef TARGET_X86_64
725918fffbSBlue Swirl 
735918fffbSBlue Swirl #define SHIFT 3
745918fffbSBlue Swirl #include "cc_helper_template.h"
755918fffbSBlue Swirl #undef SHIFT
765918fffbSBlue Swirl 
775918fffbSBlue Swirl #endif
785918fffbSBlue Swirl 
79cd7f97caSRichard Henderson static target_ulong compute_all_adcx(target_ulong dst, target_ulong src1,
80cd7f97caSRichard Henderson                                      target_ulong src2)
81cd7f97caSRichard Henderson {
82cd7f97caSRichard Henderson     return (src1 & ~CC_C) | (dst * CC_C);
83cd7f97caSRichard Henderson }
84cd7f97caSRichard Henderson 
85cd7f97caSRichard Henderson static target_ulong compute_all_adox(target_ulong dst, target_ulong src1,
86cd7f97caSRichard Henderson                                      target_ulong src2)
87cd7f97caSRichard Henderson {
88cd7f97caSRichard Henderson     return (src1 & ~CC_O) | (src2 * CC_O);
89cd7f97caSRichard Henderson }
90cd7f97caSRichard Henderson 
91cd7f97caSRichard Henderson static target_ulong compute_all_adcox(target_ulong dst, target_ulong src1,
92cd7f97caSRichard Henderson                                       target_ulong src2)
93cd7f97caSRichard Henderson {
94cd7f97caSRichard Henderson     return (src1 & ~(CC_C | CC_O)) | (dst * CC_C) | (src2 * CC_O);
95cd7f97caSRichard Henderson }
96cd7f97caSRichard Henderson 
97988c3eb0SRichard Henderson target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1,
98988c3eb0SRichard Henderson                                    target_ulong src2, int op)
995918fffbSBlue Swirl {
1005918fffbSBlue Swirl     switch (op) {
1015918fffbSBlue Swirl     default: /* should never happen */
1025918fffbSBlue Swirl         return 0;
1035918fffbSBlue Swirl 
1045918fffbSBlue Swirl     case CC_OP_EFLAGS:
1058601c0b6SRichard Henderson         return src1;
106436ff2d2SRichard Henderson     case CC_OP_CLR:
107d2fe51bdSRichard Henderson         return CC_Z | CC_P;
1084885c3c4SRichard Henderson     case CC_OP_POPCNT:
1094885c3c4SRichard Henderson         return src1 ? 0 : CC_Z;
1105918fffbSBlue Swirl 
1115918fffbSBlue Swirl     case CC_OP_MULB:
1128601c0b6SRichard Henderson         return compute_all_mulb(dst, src1);
1135918fffbSBlue Swirl     case CC_OP_MULW:
1148601c0b6SRichard Henderson         return compute_all_mulw(dst, src1);
1155918fffbSBlue Swirl     case CC_OP_MULL:
1168601c0b6SRichard Henderson         return compute_all_mull(dst, src1);
1175918fffbSBlue Swirl 
1185918fffbSBlue Swirl     case CC_OP_ADDB:
1198601c0b6SRichard Henderson         return compute_all_addb(dst, src1);
1205918fffbSBlue Swirl     case CC_OP_ADDW:
1218601c0b6SRichard Henderson         return compute_all_addw(dst, src1);
1225918fffbSBlue Swirl     case CC_OP_ADDL:
1238601c0b6SRichard Henderson         return compute_all_addl(dst, src1);
1245918fffbSBlue Swirl 
1255918fffbSBlue Swirl     case CC_OP_ADCB:
126988c3eb0SRichard Henderson         return compute_all_adcb(dst, src1, src2);
1275918fffbSBlue Swirl     case CC_OP_ADCW:
128988c3eb0SRichard Henderson         return compute_all_adcw(dst, src1, src2);
1295918fffbSBlue Swirl     case CC_OP_ADCL:
130988c3eb0SRichard Henderson         return compute_all_adcl(dst, src1, src2);
1315918fffbSBlue Swirl 
1325918fffbSBlue Swirl     case CC_OP_SUBB:
1338601c0b6SRichard Henderson         return compute_all_subb(dst, src1);
1345918fffbSBlue Swirl     case CC_OP_SUBW:
1358601c0b6SRichard Henderson         return compute_all_subw(dst, src1);
1365918fffbSBlue Swirl     case CC_OP_SUBL:
1378601c0b6SRichard Henderson         return compute_all_subl(dst, src1);
1385918fffbSBlue Swirl 
1395918fffbSBlue Swirl     case CC_OP_SBBB:
140988c3eb0SRichard Henderson         return compute_all_sbbb(dst, src1, src2);
1415918fffbSBlue Swirl     case CC_OP_SBBW:
142988c3eb0SRichard Henderson         return compute_all_sbbw(dst, src1, src2);
1435918fffbSBlue Swirl     case CC_OP_SBBL:
144988c3eb0SRichard Henderson         return compute_all_sbbl(dst, src1, src2);
1455918fffbSBlue Swirl 
1465918fffbSBlue Swirl     case CC_OP_LOGICB:
1478601c0b6SRichard Henderson         return compute_all_logicb(dst, src1);
1485918fffbSBlue Swirl     case CC_OP_LOGICW:
1498601c0b6SRichard Henderson         return compute_all_logicw(dst, src1);
1505918fffbSBlue Swirl     case CC_OP_LOGICL:
1518601c0b6SRichard Henderson         return compute_all_logicl(dst, src1);
1525918fffbSBlue Swirl 
1535918fffbSBlue Swirl     case CC_OP_INCB:
1548601c0b6SRichard Henderson         return compute_all_incb(dst, src1);
1555918fffbSBlue Swirl     case CC_OP_INCW:
1568601c0b6SRichard Henderson         return compute_all_incw(dst, src1);
1575918fffbSBlue Swirl     case CC_OP_INCL:
1588601c0b6SRichard Henderson         return compute_all_incl(dst, src1);
1595918fffbSBlue Swirl 
1605918fffbSBlue Swirl     case CC_OP_DECB:
1618601c0b6SRichard Henderson         return compute_all_decb(dst, src1);
1625918fffbSBlue Swirl     case CC_OP_DECW:
1638601c0b6SRichard Henderson         return compute_all_decw(dst, src1);
1645918fffbSBlue Swirl     case CC_OP_DECL:
1658601c0b6SRichard Henderson         return compute_all_decl(dst, src1);
1665918fffbSBlue Swirl 
1675918fffbSBlue Swirl     case CC_OP_SHLB:
1688601c0b6SRichard Henderson         return compute_all_shlb(dst, src1);
1695918fffbSBlue Swirl     case CC_OP_SHLW:
1708601c0b6SRichard Henderson         return compute_all_shlw(dst, src1);
1715918fffbSBlue Swirl     case CC_OP_SHLL:
1728601c0b6SRichard Henderson         return compute_all_shll(dst, src1);
1735918fffbSBlue Swirl 
1745918fffbSBlue Swirl     case CC_OP_SARB:
1758601c0b6SRichard Henderson         return compute_all_sarb(dst, src1);
1765918fffbSBlue Swirl     case CC_OP_SARW:
1778601c0b6SRichard Henderson         return compute_all_sarw(dst, src1);
1785918fffbSBlue Swirl     case CC_OP_SARL:
1798601c0b6SRichard Henderson         return compute_all_sarl(dst, src1);
1805918fffbSBlue Swirl 
181bc4b43dcSRichard Henderson     case CC_OP_BMILGB:
182bc4b43dcSRichard Henderson         return compute_all_bmilgb(dst, src1);
183bc4b43dcSRichard Henderson     case CC_OP_BMILGW:
184bc4b43dcSRichard Henderson         return compute_all_bmilgw(dst, src1);
185bc4b43dcSRichard Henderson     case CC_OP_BMILGL:
186bc4b43dcSRichard Henderson         return compute_all_bmilgl(dst, src1);
187bc4b43dcSRichard Henderson 
188cd7f97caSRichard Henderson     case CC_OP_ADCX:
189cd7f97caSRichard Henderson         return compute_all_adcx(dst, src1, src2);
190cd7f97caSRichard Henderson     case CC_OP_ADOX:
191cd7f97caSRichard Henderson         return compute_all_adox(dst, src1, src2);
192cd7f97caSRichard Henderson     case CC_OP_ADCOX:
193cd7f97caSRichard Henderson         return compute_all_adcox(dst, src1, src2);
194cd7f97caSRichard Henderson 
1955918fffbSBlue Swirl #ifdef TARGET_X86_64
1965918fffbSBlue Swirl     case CC_OP_MULQ:
1978601c0b6SRichard Henderson         return compute_all_mulq(dst, src1);
1985918fffbSBlue Swirl     case CC_OP_ADDQ:
1998601c0b6SRichard Henderson         return compute_all_addq(dst, src1);
2005918fffbSBlue Swirl     case CC_OP_ADCQ:
201988c3eb0SRichard Henderson         return compute_all_adcq(dst, src1, src2);
2025918fffbSBlue Swirl     case CC_OP_SUBQ:
2038601c0b6SRichard Henderson         return compute_all_subq(dst, src1);
2045918fffbSBlue Swirl     case CC_OP_SBBQ:
205988c3eb0SRichard Henderson         return compute_all_sbbq(dst, src1, src2);
2065918fffbSBlue Swirl     case CC_OP_LOGICQ:
2078601c0b6SRichard Henderson         return compute_all_logicq(dst, src1);
2085918fffbSBlue Swirl     case CC_OP_INCQ:
2098601c0b6SRichard Henderson         return compute_all_incq(dst, src1);
2105918fffbSBlue Swirl     case CC_OP_DECQ:
2118601c0b6SRichard Henderson         return compute_all_decq(dst, src1);
2125918fffbSBlue Swirl     case CC_OP_SHLQ:
2138601c0b6SRichard Henderson         return compute_all_shlq(dst, src1);
2145918fffbSBlue Swirl     case CC_OP_SARQ:
2158601c0b6SRichard Henderson         return compute_all_sarq(dst, src1);
216bc4b43dcSRichard Henderson     case CC_OP_BMILGQ:
217bc4b43dcSRichard Henderson         return compute_all_bmilgq(dst, src1);
2185918fffbSBlue Swirl #endif
2195918fffbSBlue Swirl     }
2205918fffbSBlue Swirl }
2215918fffbSBlue Swirl 
222f0967a1aSBlue Swirl uint32_t cpu_cc_compute_all(CPUX86State *env, int op)
2235918fffbSBlue Swirl {
224988c3eb0SRichard Henderson     return helper_cc_compute_all(CC_DST, CC_SRC, CC_SRC2, op);
2255918fffbSBlue Swirl }
2265918fffbSBlue Swirl 
227988c3eb0SRichard Henderson target_ulong helper_cc_compute_c(target_ulong dst, target_ulong src1,
228988c3eb0SRichard Henderson                                  target_ulong src2, int op)
2295918fffbSBlue Swirl {
2305918fffbSBlue Swirl     switch (op) {
2315918fffbSBlue Swirl     default: /* should never happen */
2328601c0b6SRichard Henderson     case CC_OP_LOGICB:
2338601c0b6SRichard Henderson     case CC_OP_LOGICW:
2348601c0b6SRichard Henderson     case CC_OP_LOGICL:
2358601c0b6SRichard Henderson     case CC_OP_LOGICQ:
236436ff2d2SRichard Henderson     case CC_OP_CLR:
2374885c3c4SRichard Henderson     case CC_OP_POPCNT:
2385918fffbSBlue Swirl         return 0;
2395918fffbSBlue Swirl 
2405918fffbSBlue Swirl     case CC_OP_EFLAGS:
2418601c0b6SRichard Henderson     case CC_OP_SARB:
2428601c0b6SRichard Henderson     case CC_OP_SARW:
2438601c0b6SRichard Henderson     case CC_OP_SARL:
2448601c0b6SRichard Henderson     case CC_OP_SARQ:
245cd7f97caSRichard Henderson     case CC_OP_ADOX:
2468601c0b6SRichard Henderson         return src1 & 1;
2475918fffbSBlue Swirl 
2485918fffbSBlue Swirl     case CC_OP_INCB:
2495918fffbSBlue Swirl     case CC_OP_INCW:
2505918fffbSBlue Swirl     case CC_OP_INCL:
2518601c0b6SRichard Henderson     case CC_OP_INCQ:
2525918fffbSBlue Swirl     case CC_OP_DECB:
2535918fffbSBlue Swirl     case CC_OP_DECW:
2545918fffbSBlue Swirl     case CC_OP_DECL:
2558601c0b6SRichard Henderson     case CC_OP_DECQ:
2568601c0b6SRichard Henderson         return src1;
2578601c0b6SRichard Henderson 
2588601c0b6SRichard Henderson     case CC_OP_MULB:
2598601c0b6SRichard Henderson     case CC_OP_MULW:
2608601c0b6SRichard Henderson     case CC_OP_MULL:
2618601c0b6SRichard Henderson     case CC_OP_MULQ:
2628601c0b6SRichard Henderson         return src1 != 0;
2638601c0b6SRichard Henderson 
264cd7f97caSRichard Henderson     case CC_OP_ADCX:
265cd7f97caSRichard Henderson     case CC_OP_ADCOX:
266cd7f97caSRichard Henderson         return dst;
267cd7f97caSRichard Henderson 
2688601c0b6SRichard Henderson     case CC_OP_ADDB:
2698601c0b6SRichard Henderson         return compute_c_addb(dst, src1);
2708601c0b6SRichard Henderson     case CC_OP_ADDW:
2718601c0b6SRichard Henderson         return compute_c_addw(dst, src1);
2728601c0b6SRichard Henderson     case CC_OP_ADDL:
2738601c0b6SRichard Henderson         return compute_c_addl(dst, src1);
2748601c0b6SRichard Henderson 
2758601c0b6SRichard Henderson     case CC_OP_ADCB:
276988c3eb0SRichard Henderson         return compute_c_adcb(dst, src1, src2);
2778601c0b6SRichard Henderson     case CC_OP_ADCW:
278988c3eb0SRichard Henderson         return compute_c_adcw(dst, src1, src2);
2798601c0b6SRichard Henderson     case CC_OP_ADCL:
280988c3eb0SRichard Henderson         return compute_c_adcl(dst, src1, src2);
2818601c0b6SRichard Henderson 
2828601c0b6SRichard Henderson     case CC_OP_SUBB:
2838601c0b6SRichard Henderson         return compute_c_subb(dst, src1);
2848601c0b6SRichard Henderson     case CC_OP_SUBW:
2858601c0b6SRichard Henderson         return compute_c_subw(dst, src1);
2868601c0b6SRichard Henderson     case CC_OP_SUBL:
2878601c0b6SRichard Henderson         return compute_c_subl(dst, src1);
2888601c0b6SRichard Henderson 
2898601c0b6SRichard Henderson     case CC_OP_SBBB:
290988c3eb0SRichard Henderson         return compute_c_sbbb(dst, src1, src2);
2918601c0b6SRichard Henderson     case CC_OP_SBBW:
292988c3eb0SRichard Henderson         return compute_c_sbbw(dst, src1, src2);
2938601c0b6SRichard Henderson     case CC_OP_SBBL:
294988c3eb0SRichard Henderson         return compute_c_sbbl(dst, src1, src2);
2955918fffbSBlue Swirl 
2965918fffbSBlue Swirl     case CC_OP_SHLB:
2978601c0b6SRichard Henderson         return compute_c_shlb(dst, src1);
2985918fffbSBlue Swirl     case CC_OP_SHLW:
2998601c0b6SRichard Henderson         return compute_c_shlw(dst, src1);
3005918fffbSBlue Swirl     case CC_OP_SHLL:
3018601c0b6SRichard Henderson         return compute_c_shll(dst, src1);
3025918fffbSBlue Swirl 
303bc4b43dcSRichard Henderson     case CC_OP_BMILGB:
304bc4b43dcSRichard Henderson         return compute_c_bmilgb(dst, src1);
305bc4b43dcSRichard Henderson     case CC_OP_BMILGW:
306bc4b43dcSRichard Henderson         return compute_c_bmilgw(dst, src1);
307bc4b43dcSRichard Henderson     case CC_OP_BMILGL:
308bc4b43dcSRichard Henderson         return compute_c_bmilgl(dst, src1);
309bc4b43dcSRichard Henderson 
3105918fffbSBlue Swirl #ifdef TARGET_X86_64
3115918fffbSBlue Swirl     case CC_OP_ADDQ:
3128601c0b6SRichard Henderson         return compute_c_addq(dst, src1);
3135918fffbSBlue Swirl     case CC_OP_ADCQ:
314988c3eb0SRichard Henderson         return compute_c_adcq(dst, src1, src2);
3155918fffbSBlue Swirl     case CC_OP_SUBQ:
3168601c0b6SRichard Henderson         return compute_c_subq(dst, src1);
3175918fffbSBlue Swirl     case CC_OP_SBBQ:
318988c3eb0SRichard Henderson         return compute_c_sbbq(dst, src1, src2);
3195918fffbSBlue Swirl     case CC_OP_SHLQ:
3208601c0b6SRichard Henderson         return compute_c_shlq(dst, src1);
321bc4b43dcSRichard Henderson     case CC_OP_BMILGQ:
322bc4b43dcSRichard Henderson         return compute_c_bmilgq(dst, src1);
3235918fffbSBlue Swirl #endif
3245918fffbSBlue Swirl     }
3255918fffbSBlue Swirl }
3265918fffbSBlue Swirl 
327f0967a1aSBlue Swirl void helper_write_eflags(CPUX86State *env, target_ulong t0,
328f0967a1aSBlue Swirl                          uint32_t update_mask)
3295918fffbSBlue Swirl {
3305918fffbSBlue Swirl     cpu_load_eflags(env, t0, update_mask);
3315918fffbSBlue Swirl }
3325918fffbSBlue Swirl 
333f0967a1aSBlue Swirl target_ulong helper_read_eflags(CPUX86State *env)
3345918fffbSBlue Swirl {
3355918fffbSBlue Swirl     uint32_t eflags;
3365918fffbSBlue Swirl 
337db9f2597SRichard Henderson     eflags = cpu_cc_compute_all(env, CC_OP);
33880cf2c81Sliguang     eflags |= (env->df & DF_MASK);
3395918fffbSBlue Swirl     eflags |= env->eflags & ~(VM_MASK | RF_MASK);
3405918fffbSBlue Swirl     return eflags;
3415918fffbSBlue Swirl }
3425918fffbSBlue Swirl 
343f0967a1aSBlue Swirl void helper_clts(CPUX86State *env)
3445918fffbSBlue Swirl {
3455918fffbSBlue Swirl     env->cr[0] &= ~CR0_TS_MASK;
3465918fffbSBlue Swirl     env->hflags &= ~HF_TS_MASK;
3475918fffbSBlue Swirl }
3485918fffbSBlue Swirl 
349f0967a1aSBlue Swirl void helper_reset_rf(CPUX86State *env)
3505918fffbSBlue Swirl {
3515918fffbSBlue Swirl     env->eflags &= ~RF_MASK;
3525918fffbSBlue Swirl }
3535918fffbSBlue Swirl 
354f0967a1aSBlue Swirl void helper_cli(CPUX86State *env)
3555918fffbSBlue Swirl {
3565918fffbSBlue Swirl     env->eflags &= ~IF_MASK;
3575918fffbSBlue Swirl }
3585918fffbSBlue Swirl 
359f0967a1aSBlue Swirl void helper_sti(CPUX86State *env)
3605918fffbSBlue Swirl {
3615918fffbSBlue Swirl     env->eflags |= IF_MASK;
3625918fffbSBlue Swirl }
3635918fffbSBlue Swirl 
364a9321a4dSH. Peter Anvin void helper_clac(CPUX86State *env)
365a9321a4dSH. Peter Anvin {
366a9321a4dSH. Peter Anvin     env->eflags &= ~AC_MASK;
367a9321a4dSH. Peter Anvin }
368a9321a4dSH. Peter Anvin 
369a9321a4dSH. Peter Anvin void helper_stac(CPUX86State *env)
370a9321a4dSH. Peter Anvin {
371a9321a4dSH. Peter Anvin     env->eflags |= AC_MASK;
372a9321a4dSH. Peter Anvin }
373a9321a4dSH. Peter Anvin 
3745918fffbSBlue Swirl #if 0
3755918fffbSBlue Swirl /* vm86plus instructions */
376f0967a1aSBlue Swirl void helper_cli_vm(CPUX86State *env)
3775918fffbSBlue Swirl {
3785918fffbSBlue Swirl     env->eflags &= ~VIF_MASK;
3795918fffbSBlue Swirl }
3805918fffbSBlue Swirl 
381f0967a1aSBlue Swirl void helper_sti_vm(CPUX86State *env)
3825918fffbSBlue Swirl {
3835918fffbSBlue Swirl     env->eflags |= VIF_MASK;
3845918fffbSBlue Swirl     if (env->eflags & VIP_MASK) {
3854054cdecSPavel Dovgalyuk         raise_exception_ra(env, EXCP0D_GPF, GETPC());
3865918fffbSBlue Swirl     }
3875918fffbSBlue Swirl }
3885918fffbSBlue Swirl #endif
389