Archives
D Programming
DD.gnu digitalmars.D digitalmars.D.bugs digitalmars.D.dtl digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript electronics |
c++ - DMC Compiler error in __asm section
Hi! I've got code that looks like this: __asm { L4: FCHS; L5: FADD ST(3),ST(0); L6: FXCH ST(1); L15: FSUB ST(0),ST(3); } and the DMC (v849) compiler reports the errors: ad_high.cpp(101) : Error: Illegal type/size of operands for the fadd instruction ad_high.cpp(103) : Error: Illegal type/size of operands for the fsub instruction This compiles fine with Microsoft C++ Professional 6.0. Any ideas what's wrong? Thanks! -- Glenn Lewis Feb 20 2007
Glenn Lewis wrote:Hi! I've got code that looks like this: __asm { L4: FCHS; L5: FADD ST(3),ST(0); L6: FXCH ST(1); L15: FSUB ST(0),ST(3); } and the DMC (v849) compiler reports the errors: ad_high.cpp(101) : Error: Illegal type/size of operands for the fadd instruction ad_high.cpp(103) : Error: Illegal type/size of operands for the fsub instruction This compiles fine with Microsoft C++ Professional 6.0. Any ideas what's wrong? Feb 28 2007
OK, so I'm assuming that the ST(0) is implied as well in FSUB, to give me: FSUB ST(3); Thanks. -- Glenn Feb 28 2007
Unfortunately, I'm still stuck... I'm told that this is compilable by any ANSI Standard C compiler... maybe the company that generated this code is wrong. Here's what I tried: ruby -p -e "if ($_ =~ /FSUB/); $_.gsub!(/,ST\(0\)/, ''); end; if ($_ =~ /FADD/); $_.gsub!(/ST\(0\),/, ''); end" ad_close.cpp > tmp.cpp dmc -c tmp.cpp -o ad_close.obj tmp.cpp: L4: FSUB ST(1); ^ tmp.cpp(91) : Warning 13: Illegal type/size of operands for the fsub instruction L5: FADD dword ptr [ESI+20]; ^ tmp.cpp(92) : Warning 13: Illegal type/size of operands for the fsub instruction L9: FMUL dword ptr [ESI+200]; ^ tmp.cpp(96) : Error: Illegal type/size of operands for the fadd instruction L12: FADD ST(1),ST(0); ^ tmp.cpp(99) : Warning 13: Illegal type/size of operands for the fadd instruction L13: FSUB dword ptr [ESI+16]; ^ tmp.cpp(100) : Error: Illegal type/size of operands for the fadd instruction L15: FDIV dword ptr [ESI+176]; ^ tmp.cpp(102) : Error: Illegal type/size of operands for the fdiv instruction L19: FCOMI ST(0),ST(2); ^ tmp.cpp(106) : Warning 13: Illegal type/size of operands for the fadd instruction L20: FCMOVNB ST(0),ST(3); ^ tmp.cpp(107) : Error: Illegal type/size of operands for the fcomi instruction L23: FADD ST(1); ^ tmp.cpp(110) : Warning 13: Illegal type/size of operands for the fsub instruction L24: FADD ST(0); ^ tmp.cpp(111) : Warning 13: Illegal type/size of operands for the fadd instruction L25: FCOMI ST(0),ST(3); ^ tmp.cpp(112) : Warning 13: Illegal type/size of operands for the fadd instruction L26: FSUB ST(0); ^ tmp.cpp(113) : Error: Illegal type/size of operands for the fcomi instruction Unfortunately, the compiler spits out the line *after* the error, but you get the general idea. -- Glenn Lewis Feb 28 2007
Glenn Lewis wrote:Unfortunately, I'm still stuck... I'm told that this is compilable by any ANSI Standard C compiler... maybe the company that generated this code is wrong. Mar 01 2007
Since I continue to get more and more errors with the __asm section from DMC, and since it compiles fine with MSVC++6.0, is it possible to go and ahead compile this code with MS Visual C++ 6.0 and then link it into my D program? I can't seem to get that to work either. Thanks! -- Glenn Lewis Mar 01 2007
Glenn Lewis wrote:Since I continue to get more and more errors with the __asm section from DMC, and since it compiles fine with MSVC++6.0, is it possible to go and ahead compile this code with MS Visual C++ 6.0 and then link it into my D program? I can't seem to get that to work either. Mar 02 2007
|