FIX: Incorrect Code Generated in Function That Uses _asmLast reviewed: September 18, 1997Article ID: Q114070 |
1.00
WINDOWS
kbtool kbfixlist kbbuglist
The information in this article applies to:
SYMPTOMSExecuting a program built from the sample code shown below after compiling with the optimizing compiler causes the program to hang, crash, or generate a General Protection Fault.
CAUSEThe code generated for the return statements in the Test() function contains incorrect JMP instructions.
RESOLUTIONTo work around the problem, use the fast compiler instead of the optimizing compiler. Use of the fast compiler can be forced by compiling with the /f switch.
STATUSMicrosoft has confirmed this to be a problem with C/C++ for MS-DOS version 8.0. This problem was corrected with C/C++ for MS-DOS version 8.0c, include with Visual C++ for Windows, version 1.5.
MORE INFORMATIONThe incorrect code can be seen by either generating a code listing file with the /Fc compiler option or by running the executable built from the sample code in the CodeView debugger. The code generated for the two return statements in the Test() function specify the wrong displacement for the JMP instructions.
Sample Code
/* Compile options needed: /f-* * This sample code must also be compiled as a .CPP file. */double Test(const double x, double& dt); double dub;
void main(void){ Test(0.0, dub);} double Test(const double x, double& dt) { if(x == 0.0) return dt = 1.0; double y; _asm { fld x fld st(0) frndint fxch fsub st(0),st(1) f2xm1 fld1 faddp st(1),st(0) fscale fst st(1) fld1 fdiv st(0),st(1) fadd st(2),st(0) fsubp st(1),st(0) fdivrp st(1),st(0) fst y fmul st(0),st(0) fld1 fsubrp st(1),st(0) les bx,DWORD PTR dt fstp QWORD PTR es:[bx] fwait } return y;}
|
Additional reference words: 1.00 8.00 inline assembly
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |