<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>I'm looking for guidance on the 64 bit integer support in the x86 code generator.<BR>What level does it belong in?<BR>
<BR>The code appears to be in three primary files, that are layered mostly like so:<BR>M3x86.m3<BR> Stackx86.m3<BR>   Codex86.m3<BR>
<BR>Stackx86 implements, I guess, a "virtual stack" which, I guess, makes<BR> certain optimizations easy, stuff like avoiding redundant moves,<BR> because the stack knows which register corresponds to which variable.<BR>
<BR>M3x86 does call directly into Codex86, a lot actually.<BR>And so of course does Stackx86 (per the layering).<BR>
<BR>There is trafficing in:<BR>
<BR>  Operand = RECORD<BR>    loc: OLoc;<BR>    mvar: MVar := NoStore;<BR>    reg: Regno := 0;<BR>    reg2: Regno := 0; << maybe add this??<BR>    imm: INTEGER := 0;<BR>    stackp: INTEGER := 0;<BR>    opcode := FALSE;<BR>  END;<BR>
<BR>notice just one register.<BR>These are x86 registers, not some abtract thing.<BR>That is what the virtual stack contains.<BR>
<BR>One might imagine the support going one level higher even,<BR>implement int64 as a record/struct, but add some notion of<BR>add-with-carry, sub-with-carry, multiply64, divide64,<BR>multiply64x64to32, etc.?<BR>
<BR>You know, when doing add, there's no canonical required<BR>register pair to use, they all work, and the upper 32 bits might even<BR>be thrown out, so don't even necessarily compute them.<BR>
<BR>I'd be a bit wary of the carry surviving though.<BR>
<BR>Or maybe a pseudo register eax_edx should be defined?<BR>
<BR>I'm thinking add reg2 might be easiest, though it seems wrong -- unclean.<BR>And always compute the full add/sub/mult/div.<BR>
<BR>Maybe an array of registers?<BR>
<BR> - Jay<BR><br /><hr />Peek-a-boo FREE Tricks & Treats for You! <a href='http://www.reallivemoms.com?ocid=TXT_TAGHM&loc=us' target='_new'>Get 'em!</a></body>
</html>