nelson@bolyard.wpd.sgi.com (Nelson Bolyard) (10/02/90)
I have an application which uses long integer arithmetic extensively.
I have compiled and run this application on my 25 Mhz 386 clone with
Turbo C 2.0 and also on a 20 Mhz MIPS system. The performance on the
386 system is about 1/20th of the performance on the MIPS. When I look at
the assembly code generated by each compiler, the reason for the speed
difference becomes obvious - there are at least 6 8086 instructions being
generated for each 1 mips instruction. This is not a complaint about Turbo
C's optimization. This is mainly due to the 16-bit registers in the 8086
model.
I want to be able to use the 32-bit registers on the 386. To do this, I
need a c compiler that will generate 386 instructions. The entire
application runs now in Turbo C's tiny model, so memory space is not an
issue. I don't need to use the 386 descriptor tables; that is, 8086 style
memory addressing is just fine, I only need wider registers.
I've heard of things called "DOS Extenders", but they're always advertised
as existing to solve problems caused by the 8086's 1 MB memory limit - which
is not my problem. The Turbo Debugger manual states that with the "virtual
debugger device driver" tdh386 (which I use all the time) "Your program can
use nearly all the 80386 instructions, with the exception of the
protected-mode instructions CLTS, LMSW, LTR, LGDT, LIDT, LLDT."
So my questions are these:
1. Do I need a dos extender to be able to use the 32-bit registers?
Evidently not if I'm using TD386H, but what about when I'm not
debugging the program? I might want to someday sell this program, so I
want a solution that won't require every customer to buy a DOS extender.
2. Where can I get a c compiler that will generate code that uses the 32-bit
386 registers efficiently, but still use DOS for I/O? I guess I could
buy some flavor of UNIX/XENIX as these come with 386 compilers, and
reportedly some flavors run DOS as a process, but this seems like a big
investment to reach my simple goal.
3. Turbo C has a compiler option to generate 186/286 instructions, that
I've never used. What does that do for me?
4. Do you have any suggestions?
Please e-mail your responses to me at the address below, and I will
summarize to the net, if asked to do so.
Thanks in advance for your replies.
-----------------------------------------------------------------------------
Nelson Bolyard nelson@sgi.COM {decwrl,sun}!sgi!whizzer!nelson
Disclaimer: Views expressed herein do not represent the views of my employer.
-----------------------------------------------------------------------------jagrogan@vax1.tcd.ie (10/25/90)
You really need to get Watcom C (386). This compiler generates code specifically
for a 386 processor. I don't know of any other compiler that will generate 386
code. I use TC2.0 myself, and haven't found a way to improve the assembly
generated.
John.
--
-------------------------------------------------------------------------------
jagrogan@vax1.tcd.ie@cunyvm.cuny.edu
3rd Year Computer Science jagrogan@vax1.tcd.ie
Trinity College Dublin. jagrogan@unix1.tcd.ie
jagrogan@tcdmath.uucp
-------------------------------------------------------------------------------
"I haven't lost my mind.....I'm sure it's backed up here somewhere!"