chris@basser.SUN (Chris Maltby) (04/06/84)
x - marks the spot Here is a better fix to pcc for the problem described by Jeff of DEC western research labs. The real code generation problem is that the result of the cvtfd instruction can't be shared with its 'float' source. Of course, the double intermediate value needs 2 AREGS. In fact, the second table entry is unnecessary, as there is a rewrite rule which will convert the left operand to double (correctly) and then compare it. I leave it here mostly to keep the linenumbers right (and in case I overlooked something). ====== "table.c" line 228 - 238 OPLOG, FORCC, SAREG|AWD, TDOUBLE, SAREG|AWD, TFLOAT, - NAREG|NASR, RESCC, " cvtfd AR,A1\n cmpd AL,A1\nZP", OPLOG, FORCC, SAREG|AWD, TFLOAT, SAREG|AWD, TDOUBLE, - NAREG|NASL, RESCC, " cvtfd AL,A1\n cmpd A1,AR\nZP", ====== OPLOG, FORCC, SAREG|AWD, TDOUBLE, SAREG|AWD, TFLOAT, + 2*NAREG, RESCC, " cvtfd AR,A1\n cmpd AL,A1\nZP", OPLOG, FORCC, SAREG|AWD, TFLOAT, SAREG|AWD, TDOUBLE, + 2*NAREG, RESCC, " cvtfd AL,A1\n cmpd A1,AR\nZP", ======