Skip to content
  • rtoy's avatar
    Fix issue with complex contagion on sparc. The vops for complex+real · f1399c10
    rtoy authored
    and complex-real didn't compute the imaginary part correctly; we need
    to add (or subtract) 0 to get the correct signed zero.
    
    (+ #c(1d0 -0d0) 1d0) -> #c(2d0 0d0), not #c(2d0 -0d0)
    
    code/sparc-svr4-vm.lisp:
    o Define *FP-CONSTANT-0F0* and *FP-CONSTANT-0D0*, floating point
      zeroes.
    
    compiler/generic/new-genesis.lisp:
    o Initialize *FP-CONSTANT-0F0* and *FP-CONSTANT-0D0* during genesis.
    
    compiler/sparc/parms.lisp:
    o Add *FP-CONSTANT-0F0* and *FP-CONSTANT-0D0* to the static symbols so
      vops can access them easily.  For bootstrapping purposes, we steal
      the spare-9 and sparc-8 symbols.
    
    compiler/sparc/float.lisp:
    o Update vops for complex + float and complex - float.  Need to add
      (or subtract) 0 to the imaginary part to get the correct signed
      zero.
    o Update vop for float+complex as above.
    f1399c10