Re: code generation on 8086?

john_reiser@MENTORG.COM (John Reiser)
Tue, 7 Mar 1995 20:54:02 GMT

          From comp.compilers

Related articles
Re: code generation on 8086? maccer@MT.net (1995-03-01)
Re: code generation on 8086? norman@britain.eu.net (1995-03-06)
Re: code generation on 8086? john_reiser@MENTORG.COM (1995-03-07)
| List of all articles for this month |
Newsgroups: comp.compilers
From: john_reiser@MENTORG.COM (John Reiser)
Keywords: 386, code, optimize
Organization: Mentor Graphics Corporation
References: 95-02-194
Date: Tue, 7 Mar 1995 20:54:02 GMT

Paul Rubin (phr@netcom.com) wrote:
: What are the basic techniques for code generation on the 8086?


The first basic technique is, "Let somebody else do it for you."
PowerSoft [Watcom] C/C++ 10.x is under $200 and delivers excellent
code for i286, which needs only minor care to be useful on 8086.
Perhaps there is a 8086 mode. An old version of MetaWare HighC
is good, too. There are others.


A second basic technique is to abstract the peculiarities of the
registers. Once upon a time, I generated code for i286 using
(DX<<16)|AX as the accumulator (32/16/8 bits), (CX<<16)|BX as a second
[rarely-used] accumulator, DS:SI as the source pointer register,
ES:DI as the destination pointer register, BX as the indexing
register, and CL as the shift count register. What would have
been "registers" in a more regular architecture became on-stack
local variables, with the i86 registers caching them in peep-hole
fashion. Static data went into a single 64KB stack segment,
with accesses always requiring an SS: prefix byte and full 16-bit
address. My output from code generation was entire code segments,
with subroutines placed first come, first served. All calls were
long calls written "PUSH CS; CALL NEAR xxx". If the target was
unknown or in another segment, then a 5-byte "JMP FAR" was inserted
at the high end of the current segment, and chained to calls from the
current segment. If the target became defined, then the the 5-byte
trampoline was removed. The non-REP string instructions LODSW/STOSW/
MOVSW become important, as does tracking their side effects on SI and DI.
The XCH instruction does yeoman duty.
--


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.