Changeset 16675


Ignore:
Timestamp:
Dec 23, 2015, 12:11:19 AM (3 years ago)
Author:
rme
Message:

When negating flonums on x86, let the vinsn machinery deal with
the assignment of a temporary rather than trying to do it by hand in
x862-%single-float-negate and x862-%double-float-negate.

See ticket:1335. This should be merged to 1.11 after a week or so.

Location:
trunk/source/compiler/X86
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/X8632/x8632-vinsns.lisp

    r16548 r16675  
    46044604
    46054605(define-x8632-vinsn double-float-negate (((reg :double-float))
    4606                                          ((reg :double-float)
    4607                                           (tmp :double-float)))
     4606                                         ((reg :double-float))
     4607                                         ((tmp :double-float)))
    46084608  (movsd (:@ (:^ :const) (:% x8632::fn)) (:%xmm tmp))
    46094609  (pxor (:%xmm tmp) (:%xmm reg))
     
    46154615
    46164616(define-x8632-vinsn single-float-negate (((reg :single-float))
    4617                                          ((reg :single-float)
    4618                                           (tmp :single-float)))
     4617                                         ((reg :single-float))
     4618                                         ((tmp :single-float)))
    46194619  (movss (:@ (:^ :const) (:% x8632::fn)) (:%xmm tmp))
    46204620  (pxor (:%xmm tmp) (:%xmm reg))
  • trunk/source/compiler/X86/X8664/x8664-vinsns.lisp

    r16645 r16675  
    51515151
    51525152(define-x8664-vinsn double-float-negate (((reg :double-float))
    5153                                          ((reg :double-float)
    5154                                           (tmp :double-float)))
    5155   (movsd (:@ (:^ :const) (:% x8664::fn)) (:%xmm tmp)) 
     5153                                         ((reg :double-float))
     5154                                         ((tmp :double-float)))
     5155  (movsd (:@ (:^ :const) (:% x8664::fn)) (:%xmm tmp))
    51565156  (pxor (:%xmm tmp) (:%xmm reg))
    51575157  (:uuo-section)
     
    51615161
    51625162(define-x8664-vinsn single-float-negate (((reg :single-float))
    5163                                          ((reg :single-float)
    5164                                           (tmp :single-float)))
     5163                                         ((reg :single-float))
     5164                                         ((tmp :single-float)))
    51655165  (movss (:@ (:^ :const) (:% x8664::fn)) (:%xmm tmp))
    51665166  (pxor (:%xmm tmp) (:%xmm reg))
  • trunk/source/compiler/X86/x862.lisp

    r16652 r16675  
    86948694    (progn
    86958695      (x862-one-targeted-reg-form seg form vreg)
    8696       (with-fp-target (vreg) (r2 :double-float)
    8697         (! double-float-negate vreg r2)))
     8696      (! double-float-negate vreg))
    86988697    (with-fp-target () (r1 :double-float)
    86998698      (setq r1 (x862-one-untargeted-reg-form seg form r1))
    8700       (with-fp-target (r1) (r2 :double-float)
    8701         (! double-float-negate r1 r2))
     8699      (! double-float-negate r1)
    87028700      (ensuring-node-target (target vreg)
    87038701        (x862-copy-register seg target r1))))
     
    87108708    (progn
    87118709      (x862-one-targeted-reg-form seg form vreg)
    8712       (with-fp-target (vreg) (r2 :single-float)
    8713         (! single-float-negate vreg r2)))
     8710      (! single-float-negate vreg))
    87148711    (with-fp-target () (r1 :single-float)
    87158712      (setq r1 (x862-one-untargeted-reg-form seg form r1))
    8716       (with-fp-target (r1) (r2 :single-float)
    8717         (! single-float-negate r1 r2))
     8713      (! single-float-negate r1)
    87188714      (ensuring-node-target (target vreg)
    87198715        (x862-copy-register seg target r1))))
Note: See TracChangeset for help on using the changeset viewer.