From: John Reagan [reagan@hiyall.zko.dec.com] Sent: Tuesday, April 04, 2000 10:29 PM To: Info-VAX@Mvb.Saic.Com Subject: Re: VAX-Macro problems on Alpha VMS 7.2-1 Johan Devos wrote: > > I already received a message from John Reagan (Compaq Pascal/Macro-32 > Project Leader) confirming the bug in all the 2-operand autoincrement and > autodecrement f_floating instructions (ADDF2, SUBF2, MULF2, DIVF2). > > As temporary workaround, the 3-operand version can be used, but Compaq will > make a official fix as soon as possible. > > Thanks for the quick response, > > Johan Devos To clarify... The Macro-32 compiler does not directly support any floating point operations. There are a set of macros in STARLET.MLB (AMAC_FLT$MACROS.MAR) that provide some emulation of many floating instructions. For V7.2, the macros and floating emulation support underwent extensive rework to fix various problems. However, the rework didn't properly consider operands with side-effects. So for ADDF2 (actually, any 2-operand floating opcode), the macros turn ADDF2 (R5),(R6)+ into MOVL (R5), R16 MOVL (R6)+, R17 CALL AMAC$FLT_ADDF MOVL R18, (R6)+ you can see that the ADDF2 macro just used its 2nd operand untouched as both an input operand and an output operand. That would be fine except for the operands with side-effects (ie, auto-inc and auto-dec). If the 3-operand version is used, (ie, ADDF3 (R5),(R6),(R6)+) then the resulting macro expansion would be fine. The macros will be corrected to detect auto-inc/auto-dec and strip them off the correct use. So the 2-operand floating instructions work except for the cases that involve auto-inc/auto-dec on the 2nd-operand (ie, the read and write operand). Note that 2-operand integer instructions work just fine even with auto-inc and auto-dec operands. Its just the floating 2-operand instructions (ADDF2, ADDD2, ADDG2, DIVF2, DIVD2, DIVG2, MULF2, MULD2, MULG2, SUBF2, SUBD2, SUBG2) John Reagan