1 /****************************************************************************
3 * Realmode X86 Emulator Library
5 * Copyright (C) 1996-1999 SciTech Software, Inc.
6 * Copyright (C) David Mosberger-Tang
7 * Copyright (C) 1999 Egbert Eich
9 * ========================================================================
11 * Permission to use, copy, modify, distribute, and sell this software and
12 * its documentation for any purpose is hereby granted without fee,
13 * provided that the above copyright notice appear in all copies and that
14 * both that copyright notice and this permission notice appear in
15 * supporting documentation, and that the name of the authors not be used
16 * in advertising or publicity pertaining to distribution of the software
17 * without specific, written prior permission. The authors makes no
18 * representations about the suitability of this software for any purpose.
19 * It is provided "as is" without express or implied warranty.
21 * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
22 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
23 * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
24 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
25 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
26 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
27 * PERFORMANCE OF THIS SOFTWARE.
29 * ========================================================================
33 * Developer: Kendall Bennett
35 * Description: This file contains the code to implement the decoding and
36 * emulation of the FPU instructions.
38 ****************************************************************************/
40 #include "x86emu/x86emui.h"
42 /*----------------------------- Implementation ----------------------------*/
45 void x86emuOp_esc_coprocess_d8(u8 X86EMU_UNUSED(op1))
48 DECODE_PRINTF("ESC D8\n");
49 DECODE_CLEAR_SEGOVR();
50 END_OF_INSTR_NO_TRACE();
55 static char *x86emu_fpu_op_d9_tab[] = {
56 "FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
57 "FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
59 "FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
60 "FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
62 "FLD\tDWORD PTR ", "ESC_D9\t", "FST\tDWORD PTR ", "FSTP\tDWORD PTR ",
63 "FLDENV\t", "FLDCW\t", "FSTENV\t", "FSTCW\t",
66 static char *x86emu_fpu_op_d9_tab1[] = {
67 "FLD\t", "FLD\t", "FLD\t", "FLD\t",
68 "FLD\t", "FLD\t", "FLD\t", "FLD\t",
70 "FXCH\t", "FXCH\t", "FXCH\t", "FXCH\t",
71 "FXCH\t", "FXCH\t", "FXCH\t", "FXCH\t",
73 "FNOP", "ESC_D9", "ESC_D9", "ESC_D9",
74 "ESC_D9", "ESC_D9", "ESC_D9", "ESC_D9",
76 "FSTP\t", "FSTP\t", "FSTP\t", "FSTP\t",
77 "FSTP\t", "FSTP\t", "FSTP\t", "FSTP\t",
79 "FCHS", "FABS", "ESC_D9", "ESC_D9",
80 "FTST", "FXAM", "ESC_D9", "ESC_D9",
82 "FLD1", "FLDL2T", "FLDL2E", "FLDPI",
83 "FLDLG2", "FLDLN2", "FLDZ", "ESC_D9",
85 "F2XM1", "FYL2X", "FPTAN", "FPATAN",
86 "FXTRACT", "ESC_D9", "FDECSTP", "FINCSTP",
88 "FPREM", "FYL2XP1", "FSQRT", "ESC_D9",
89 "FRNDINT", "FSCALE", "ESC_D9", "ESC_D9",
95 void x86emuOp_esc_coprocess_d9(u8 X86EMU_UNUSED(op1))
102 FETCH_DECODE_MODRM(mod, rh, rl);
105 DECODE_PRINTINSTR32(x86emu_fpu_op_d9_tab, mod, rh, rl);
107 DECODE_PRINTF(x86emu_fpu_op_d9_tab1[(rh << 3) + rl]);
112 destoffset = decode_rm00_address(rl);
116 destoffset = decode_rm01_address(rl);
120 destoffset = decode_rm10_address(rl);
123 case 3: /* register to register */
126 DECODE_PRINTF2("ST(%d)\n", stkelem);
132 #ifdef X86EMU_FPU_PRESENT
138 x86emu_fpu_R_fld(X86EMU_FPU_STKTOP, stkelem);
141 x86emu_fpu_R_fxch(X86EMU_FPU_STKTOP, stkelem);
149 x86emu_fpu_illegal();
153 x86emu_fpu_R_fstp(X86EMU_FPU_STKTOP, stkelem);
158 x86emu_fpu_R_fchs(X86EMU_FPU_STKTOP);
161 x86emu_fpu_R_fabs(X86EMU_FPU_STKTOP);
164 x86emu_fpu_R_ftst(X86EMU_FPU_STKTOP);
167 x86emu_fpu_R_fxam(X86EMU_FPU_STKTOP);
171 x86emu_fpu_illegal();
179 x86emu_fpu_R_fld1(X86EMU_FPU_STKTOP);
182 x86emu_fpu_R_fldl2t(X86EMU_FPU_STKTOP);
185 x86emu_fpu_R_fldl2e(X86EMU_FPU_STKTOP);
188 x86emu_fpu_R_fldpi(X86EMU_FPU_STKTOP);
191 x86emu_fpu_R_fldlg2(X86EMU_FPU_STKTOP);
194 x86emu_fpu_R_fldln2(X86EMU_FPU_STKTOP);
197 x86emu_fpu_R_fldz(X86EMU_FPU_STKTOP);
201 x86emu_fpu_illegal();
209 x86emu_fpu_R_f2xm1(X86EMU_FPU_STKTOP);
212 x86emu_fpu_R_fyl2x(X86EMU_FPU_STKTOP);
215 x86emu_fpu_R_fptan(X86EMU_FPU_STKTOP);
218 x86emu_fpu_R_fpatan(X86EMU_FPU_STKTOP);
221 x86emu_fpu_R_fxtract(X86EMU_FPU_STKTOP);
224 x86emu_fpu_illegal();
227 x86emu_fpu_R_decstp();
230 x86emu_fpu_R_incstp();
238 x86emu_fpu_R_fprem(X86EMU_FPU_STKTOP);
241 x86emu_fpu_R_fyl2xp1(X86EMU_FPU_STKTOP);
244 x86emu_fpu_R_fsqrt(X86EMU_FPU_STKTOP);
247 x86emu_fpu_illegal();
250 x86emu_fpu_R_frndint(X86EMU_FPU_STKTOP);
253 x86emu_fpu_R_fscale(X86EMU_FPU_STKTOP);
258 x86emu_fpu_illegal();
266 x86emu_fpu_M_fld(X86EMU_FPU_FLOAT, destoffset);
269 x86emu_fpu_illegal();
272 x86emu_fpu_M_fst(X86EMU_FPU_FLOAT, destoffset);
275 x86emu_fpu_M_fstp(X86EMU_FPU_FLOAT, destoffset);
278 x86emu_fpu_M_fldenv(X86EMU_FPU_WORD, destoffset);
281 x86emu_fpu_M_fldcw(X86EMU_FPU_WORD, destoffset);
284 x86emu_fpu_M_fstenv(X86EMU_FPU_WORD, destoffset);
287 x86emu_fpu_M_fstcw(X86EMU_FPU_WORD, destoffset);
292 #endif /* X86EMU_FPU_PRESENT */
293 DECODE_CLEAR_SEGOVR();
294 END_OF_INSTR_NO_TRACE();
299 char *x86emu_fpu_op_da_tab[] = {
300 "FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
301 "FICOMP\tDWORD PTR ",
302 "FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
303 "FIDIVR\tDWORD PTR ",
305 "FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
306 "FICOMP\tDWORD PTR ",
307 "FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
308 "FIDIVR\tDWORD PTR ",
310 "FIADD\tDWORD PTR ", "FIMUL\tDWORD PTR ", "FICOM\tDWORD PTR ",
311 "FICOMP\tDWORD PTR ",
312 "FISUB\tDWORD PTR ", "FISUBR\tDWORD PTR ", "FIDIV\tDWORD PTR ",
313 "FIDIVR\tDWORD PTR ",
315 "ESC_DA ", "ESC_DA ", "ESC_DA ", "ESC_DA ",
316 "ESC_DA ", "ESC_DA ", "ESC_DA ", "ESC_DA ",
322 void x86emuOp_esc_coprocess_da(u8 X86EMU_UNUSED(op1))
329 FETCH_DECODE_MODRM(mod, rh, rl);
330 DECODE_PRINTINSTR32(x86emu_fpu_op_da_tab, mod, rh, rl);
333 destoffset = decode_rm00_address(rl);
337 destoffset = decode_rm01_address(rl);
341 destoffset = decode_rm10_address(rl);
344 case 3: /* register to register */
346 DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
349 #ifdef X86EMU_FPU_PRESENT
352 x86emu_fpu_illegal();
357 x86emu_fpu_M_iadd(X86EMU_FPU_SHORT, destoffset);
360 x86emu_fpu_M_imul(X86EMU_FPU_SHORT, destoffset);
363 x86emu_fpu_M_icom(X86EMU_FPU_SHORT, destoffset);
366 x86emu_fpu_M_icomp(X86EMU_FPU_SHORT, destoffset);
369 x86emu_fpu_M_isub(X86EMU_FPU_SHORT, destoffset);
372 x86emu_fpu_M_isubr(X86EMU_FPU_SHORT, destoffset);
375 x86emu_fpu_M_idiv(X86EMU_FPU_SHORT, destoffset);
378 x86emu_fpu_M_idivr(X86EMU_FPU_SHORT, destoffset);
383 DECODE_CLEAR_SEGOVR();
384 END_OF_INSTR_NO_TRACE();
389 char *x86emu_fpu_op_db_tab[] = {
390 "FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
391 "ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
393 "FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
394 "ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
396 "FILD\tDWORD PTR ", "ESC_DB\t19", "FIST\tDWORD PTR ", "FISTP\tDWORD PTR ",
397 "ESC_DB\t1C", "FLD\tTBYTE PTR ", "ESC_DB\t1E", "FSTP\tTBYTE PTR ",
403 void x86emuOp_esc_coprocess_db(u8 X86EMU_UNUSED(op1))
409 FETCH_DECODE_MODRM(mod, rh, rl);
412 DECODE_PRINTINSTR32(x86emu_fpu_op_db_tab, mod, rh, rl);
413 } else if (rh == 4) { /* === 11 10 0 nnn */
416 DECODE_PRINTF("FENI\n");
419 DECODE_PRINTF("FDISI\n");
422 DECODE_PRINTF("FCLEX\n");
425 DECODE_PRINTF("FINIT\n");
429 DECODE_PRINTF2("ESC_DB %0x\n", (mod << 6) + (rh << 3) + (rl));
434 destoffset = decode_rm00_address(rl);
437 destoffset = decode_rm01_address(rl);
440 destoffset = decode_rm10_address(rl);
442 case 3: /* register to register */
445 #ifdef X86EMU_FPU_PRESENT
456 x86emu_fpu_R_fdisi();
459 x86emu_fpu_R_fclex();
462 x86emu_fpu_R_finit();
465 x86emu_fpu_illegal();
470 x86emu_fpu_illegal();
477 x86emu_fpu_M_fild(X86EMU_FPU_SHORT, destoffset);
480 x86emu_fpu_illegal();
483 x86emu_fpu_M_fist(X86EMU_FPU_SHORT, destoffset);
486 x86emu_fpu_M_fistp(X86EMU_FPU_SHORT, destoffset);
489 x86emu_fpu_illegal();
492 x86emu_fpu_M_fld(X86EMU_FPU_LDBL, destoffset);
495 x86emu_fpu_illegal();
498 x86emu_fpu_M_fstp(X86EMU_FPU_LDBL, destoffset);
503 DECODE_CLEAR_SEGOVR();
504 END_OF_INSTR_NO_TRACE();
508 char *x86emu_fpu_op_dc_tab[] = {
509 "FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
511 "FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
514 "FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
516 "FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
519 "FADD\tQWORD PTR ", "FMUL\tQWORD PTR ", "FCOM\tQWORD PTR ",
521 "FSUB\tQWORD PTR ", "FSUBR\tQWORD PTR ", "FDIV\tQWORD PTR ",
524 "FADD\t", "FMUL\t", "FCOM\t", "FCOMP\t",
525 "FSUBR\t", "FSUB\t", "FDIVR\t", "FDIV\t",
530 void x86emuOp_esc_coprocess_dc(u8 X86EMU_UNUSED(op1))
537 FETCH_DECODE_MODRM(mod, rh, rl);
538 DECODE_PRINTINSTR32(x86emu_fpu_op_dc_tab, mod, rh, rl);
541 destoffset = decode_rm00_address(rl);
545 destoffset = decode_rm01_address(rl);
549 destoffset = decode_rm10_address(rl);
552 case 3: /* register to register */
554 DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
557 #ifdef X86EMU_FPU_PRESENT
563 x86emu_fpu_R_fadd(stkelem, X86EMU_FPU_STKTOP);
566 x86emu_fpu_R_fmul(stkelem, X86EMU_FPU_STKTOP);
569 x86emu_fpu_R_fcom(stkelem, X86EMU_FPU_STKTOP);
572 x86emu_fpu_R_fcomp(stkelem, X86EMU_FPU_STKTOP);
575 x86emu_fpu_R_fsubr(stkelem, X86EMU_FPU_STKTOP);
578 x86emu_fpu_R_fsub(stkelem, X86EMU_FPU_STKTOP);
581 x86emu_fpu_R_fdivr(stkelem, X86EMU_FPU_STKTOP);
584 x86emu_fpu_R_fdiv(stkelem, X86EMU_FPU_STKTOP);
591 x86emu_fpu_M_fadd(X86EMU_FPU_DOUBLE, destoffset);
594 x86emu_fpu_M_fmul(X86EMU_FPU_DOUBLE, destoffset);
597 x86emu_fpu_M_fcom(X86EMU_FPU_DOUBLE, destoffset);
600 x86emu_fpu_M_fcomp(X86EMU_FPU_DOUBLE, destoffset);
603 x86emu_fpu_M_fsub(X86EMU_FPU_DOUBLE, destoffset);
606 x86emu_fpu_M_fsubr(X86EMU_FPU_DOUBLE, destoffset);
609 x86emu_fpu_M_fdiv(X86EMU_FPU_DOUBLE, destoffset);
612 x86emu_fpu_M_fdivr(X86EMU_FPU_DOUBLE, destoffset);
617 DECODE_CLEAR_SEGOVR();
618 END_OF_INSTR_NO_TRACE();
623 static char *x86emu_fpu_op_dd_tab[] = {
624 "FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
625 "FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
627 "FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
628 "FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
630 "FLD\tQWORD PTR ", "ESC_DD\t29,", "FST\tQWORD PTR ", "FSTP\tQWORD PTR ",
631 "FRSTOR\t", "ESC_DD\t2D,", "FSAVE\t", "FSTSW\t",
633 "FFREE\t", "FXCH\t", "FST\t", "FSTP\t",
634 "ESC_DD\t2C,", "ESC_DD\t2D,", "ESC_DD\t2E,", "ESC_DD\t2F,",
640 void x86emuOp_esc_coprocess_dd(u8 X86EMU_UNUSED(op1))
647 FETCH_DECODE_MODRM(mod, rh, rl);
648 DECODE_PRINTINSTR32(x86emu_fpu_op_dd_tab, mod, rh, rl);
651 destoffset = decode_rm00_address(rl);
655 destoffset = decode_rm01_address(rl);
659 destoffset = decode_rm10_address(rl);
662 case 3: /* register to register */
664 DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
667 #ifdef X86EMU_FPU_PRESENT
672 x86emu_fpu_R_ffree(stkelem);
675 x86emu_fpu_R_fxch(stkelem);
678 x86emu_fpu_R_fst(stkelem); /* register version */
681 x86emu_fpu_R_fstp(stkelem); /* register version */
684 x86emu_fpu_illegal();
691 x86emu_fpu_M_fld(X86EMU_FPU_DOUBLE, destoffset);
694 x86emu_fpu_illegal();
697 x86emu_fpu_M_fst(X86EMU_FPU_DOUBLE, destoffset);
700 x86emu_fpu_M_fstp(X86EMU_FPU_DOUBLE, destoffset);
703 x86emu_fpu_M_frstor(X86EMU_FPU_WORD, destoffset);
706 x86emu_fpu_illegal();
709 x86emu_fpu_M_fsave(X86EMU_FPU_WORD, destoffset);
712 x86emu_fpu_M_fstsw(X86EMU_FPU_WORD, destoffset);
717 DECODE_CLEAR_SEGOVR();
718 END_OF_INSTR_NO_TRACE();
723 static char *x86emu_fpu_op_de_tab[] =
725 "FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
727 "FISUB\tWORD PTR ", "FISUBR\tWORD PTR ", "FIDIV\tWORD PTR ",
730 "FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
732 "FISUB\tWORD PTR ", "FISUBR\tWORD PTR ", "FIDIV\tWORD PTR ",
735 "FIADD\tWORD PTR ", "FIMUL\tWORD PTR ", "FICOM\tWORD PTR ",
737 "FISUB\tWORD PTR ", "FISUBR\tWORD PTR ", "FIDIV\tWORD PTR ",
740 "FADDP\t", "FMULP\t", "FCOMP\t", "FCOMPP\t",
741 "FSUBRP\t", "FSUBP\t", "FDIVRP\t", "FDIVP\t",
747 void x86emuOp_esc_coprocess_de(u8 X86EMU_UNUSED(op1))
754 FETCH_DECODE_MODRM(mod, rh, rl);
755 DECODE_PRINTINSTR32(x86emu_fpu_op_de_tab, mod, rh, rl);
758 destoffset = decode_rm00_address(rl);
762 destoffset = decode_rm01_address(rl);
766 destoffset = decode_rm10_address(rl);
769 case 3: /* register to register */
771 DECODE_PRINTF2("\tST(%d),ST\n", stkelem);
774 #ifdef X86EMU_FPU_PRESENT
779 x86emu_fpu_R_faddp(stkelem, X86EMU_FPU_STKTOP);
782 x86emu_fpu_R_fmulp(stkelem, X86EMU_FPU_STKTOP);
785 x86emu_fpu_R_fcomp(stkelem, X86EMU_FPU_STKTOP);
789 x86emu_fpu_R_fcompp(stkelem, X86EMU_FPU_STKTOP);
791 x86emu_fpu_illegal();
794 x86emu_fpu_R_fsubrp(stkelem, X86EMU_FPU_STKTOP);
797 x86emu_fpu_R_fsubp(stkelem, X86EMU_FPU_STKTOP);
800 x86emu_fpu_R_fdivrp(stkelem, X86EMU_FPU_STKTOP);
803 x86emu_fpu_R_fdivp(stkelem, X86EMU_FPU_STKTOP);
810 x86emu_fpu_M_fiadd(X86EMU_FPU_WORD, destoffset);
813 x86emu_fpu_M_fimul(X86EMU_FPU_WORD, destoffset);
816 x86emu_fpu_M_ficom(X86EMU_FPU_WORD, destoffset);
819 x86emu_fpu_M_ficomp(X86EMU_FPU_WORD, destoffset);
822 x86emu_fpu_M_fisub(X86EMU_FPU_WORD, destoffset);
825 x86emu_fpu_M_fisubr(X86EMU_FPU_WORD, destoffset);
828 x86emu_fpu_M_fidiv(X86EMU_FPU_WORD, destoffset);
831 x86emu_fpu_M_fidivr(X86EMU_FPU_WORD, destoffset);
836 DECODE_CLEAR_SEGOVR();
837 END_OF_INSTR_NO_TRACE();
842 static char *x86emu_fpu_op_df_tab[] = {
844 "FILD\tWORD PTR ", "ESC_DF\t39\n", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
845 "FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
849 "FILD\tWORD PTR ", "ESC_DF\t39 ", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
850 "FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
854 "FILD\tWORD PTR ", "ESC_DF\t39 ", "FIST\tWORD PTR ", "FISTP\tWORD PTR ",
855 "FBLD\tTBYTE PTR ", "FILD\tQWORD PTR ", "FBSTP\tTBYTE PTR ",
859 "FFREE\t", "FXCH\t", "FST\t", "FSTP\t",
860 "ESC_DF\t3C,", "ESC_DF\t3D,", "ESC_DF\t3E,", "ESC_DF\t3F,"
866 void x86emuOp_esc_coprocess_df(u8 X86EMU_UNUSED(op1))
873 FETCH_DECODE_MODRM(mod, rh, rl);
874 DECODE_PRINTINSTR32(x86emu_fpu_op_df_tab, mod, rh, rl);
877 destoffset = decode_rm00_address(rl);
881 destoffset = decode_rm01_address(rl);
885 destoffset = decode_rm10_address(rl);
888 case 3: /* register to register */
890 DECODE_PRINTF2("\tST(%d)\n", stkelem);
893 #ifdef X86EMU_FPU_PRESENT
898 x86emu_fpu_R_ffree(stkelem);
901 x86emu_fpu_R_fxch(stkelem);
904 x86emu_fpu_R_fst(stkelem); /* register version */
907 x86emu_fpu_R_fstp(stkelem); /* register version */
910 x86emu_fpu_illegal();
917 x86emu_fpu_M_fild(X86EMU_FPU_WORD, destoffset);
920 x86emu_fpu_illegal();
923 x86emu_fpu_M_fist(X86EMU_FPU_WORD, destoffset);
926 x86emu_fpu_M_fistp(X86EMU_FPU_WORD, destoffset);
929 x86emu_fpu_M_fbld(X86EMU_FPU_BSD, destoffset);
932 x86emu_fpu_M_fild(X86EMU_FPU_LONG, destoffset);
935 x86emu_fpu_M_fbstp(X86EMU_FPU_BSD, destoffset);
938 x86emu_fpu_M_fistp(X86EMU_FPU_LONG, destoffset);
943 DECODE_CLEAR_SEGOVR();
944 END_OF_INSTR_NO_TRACE();