brooks@MADDOG.LLNL.GOV (Eugene Brooks) (03/11/89)
VERSION: Unmolested gcc 1.34 bootstrapped with cc -pcc on first
build then normal bootstrap.
The following code:
main()
{
int i;
i = 0;
if(1./4. == i)
printf(" bug1 FAILED\n");
else
printf(" bug1 PASSED\n");
}
when compiled with gcc -O will produce the following assembler
instruction on line 13
fmoveld #0,fp0
which the assembler will report as having an invalid operand.
Evidently a constant operand is not allowed, I checked that the FX
compiler did generate fmoveld, and it did, but it never generated it with
a constand operand. I do not know how to constrain the machine description
entry to rule out a constand operand, but allow register and memory
references, which seems to be the ticket here.
weening@GANG-OF-FOUR.STANFORD.EDU (Joe Weening) (03/12/89)
The following patch should fix the "invalid operand" bug. It turns out that none of the Alliant fix-to-float instructions allow immediate data operands. *** alliant.md.old Sat Mar 11 13:12:18 1989 --- alliant.md Sat Mar 11 13:13:15 1989 *************** *** 987,991 **** (define_insn "" [(set (match_operand:SF 0 "general_operand" "=f") ! (float:SF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "fmovels %1,%0") --- 987,991 ---- (define_insn "" [(set (match_operand:SF 0 "general_operand" "=f") ! (float:SF (match_operand:SI 1 "general_operand" "dm")))] "TARGET_68881" "fmovels %1,%0") *************** *** 999,1003 **** (define_insn "" [(set (match_operand:DF 0 "general_operand" "=f") ! (float:DF (match_operand:SI 1 "general_operand" "dmi")))] "TARGET_68881" "fmoveld %1,%0") --- 999,1003 ---- (define_insn "" [(set (match_operand:DF 0 "general_operand" "=f") ! (float:DF (match_operand:SI 1 "general_operand" "dm")))] "TARGET_68881" "fmoveld %1,%0") *************** *** 1005,1009 **** (define_insn "floathisf2" [(set (match_operand:SF 0 "general_operand" "=f") ! (float:SF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "fmovews %1,%0") --- 1005,1009 ---- (define_insn "floathisf2" [(set (match_operand:SF 0 "general_operand" "=f") ! (float:SF (match_operand:HI 1 "general_operand" "dm")))] "TARGET_68881" "fmovews %1,%0") *************** *** 1011,1015 **** (define_insn "floathidf2" [(set (match_operand:DF 0 "general_operand" "=f") ! (float:DF (match_operand:HI 1 "general_operand" "dmn")))] "TARGET_68881" "fmovewd %1,%0") --- 1011,1015 ---- (define_insn "floathidf2" [(set (match_operand:DF 0 "general_operand" "=f") ! (float:DF (match_operand:HI 1 "general_operand" "dm")))] "TARGET_68881" "fmovewd %1,%0") *************** *** 1017,1021 **** (define_insn "floatqisf2" [(set (match_operand:SF 0 "general_operand" "=f") ! (float:SF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "fmovebs %1,%0") --- 1017,1021 ---- (define_insn "floatqisf2" [(set (match_operand:SF 0 "general_operand" "=f") ! (float:SF (match_operand:QI 1 "general_operand" "dm")))] "TARGET_68881" "fmovebs %1,%0") *************** *** 1023,1027 **** (define_insn "floatqidf2" [(set (match_operand:DF 0 "general_operand" "=f") ! (float:DF (match_operand:QI 1 "general_operand" "dmn")))] "TARGET_68881" "fmovebd %1,%0") --- 1023,1027 ---- (define_insn "floatqidf2" [(set (match_operand:DF 0 "general_operand" "=f") ! (float:DF (match_operand:QI 1 "general_operand" "dm")))] "TARGET_68881" "fmovebd %1,%0")