Changeset 14776


Ignore:
Timestamp:
May 2, 2011, 4:08:22 PM (14 years ago)
Author:
Gary Byers
Message:

Floating-point negation in the x86 backends.

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

Legend:

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

    r14338 r14776  
    41374137)
    41384138
     4139(define-x8632-vinsn double-float-negate (((reg :double-float))
     4140                                         ((reg :double-float)))
     4141  (pxor (:@ (:^ :const) (:% x8632::fn)) (:%xmm reg))
     4142  (:uuo-section)
     4143  (:align 4)
     4144  :const
     4145  (:long 0)
     4146  (:long #x-80000000)
     4147  (:long 0)
     4148  (:long 0))
     4149
     4150(define-x8632-vinsn single-float-negate (((reg :single-float))
     4151                                         ((reg :single-float)))
     4152  (pxor (:@ (:^ :const) (:% x8632::fn)) (:%xmm reg))
     4153  (:uuo-section)
     4154  (:align 4)
     4155  :const
     4156  (:long #x80000000)
     4157  (:long 0)
     4158  (:long 0)
     4159  (:long 0))
     4160
    41394161(queue-fixup
    41404162 (fixup-x86-vinsn-templates
  • trunk/source/compiler/X86/X8664/x8664-vinsns.lisp

    r14457 r14776  
    45574557                                     ()))
    45584558
     4559(define-x8664-vinsn double-float-negate (((reg :double-float))
     4560                                         ((reg :double-float)))
     4561  (pxor (:@ (:^ :const) (:% x8664::fn)) (:%xmm reg))
     4562  (:uuo-section)
     4563  (:align 4)
     4564  :const
     4565  (:long 0)
     4566  (:long #x-80000000)
     4567  (:long 0)
     4568  (:long 0))
     4569
     4570(define-x8664-vinsn single-float-negate (((reg :single-float))
     4571                                         ((reg :single-float)))
     4572  (pxor (:@ (:^ :const) (:% x8664::fn)) (:%xmm reg))
     4573  (:uuo-section)
     4574  (:align 4)
     4575  :const
     4576  (:long #x80000000)
     4577  (:long 0)
     4578  (:long 0)
     4579  (:long 0))
     4580
    45594581(queue-fixup
    45604582 (fixup-x86-vinsn-templates
  • trunk/source/compiler/X86/x862.lisp

    r14695 r14776  
    73517351
    73527352(defx862 x862-minus1 minus1 (seg vreg xfer form)
    7353   (x862-unary-builtin seg vreg xfer '%negate form))
     7353  (or (acode-optimize-minus1 seg vreg xfer form *x862-trust-declarations*)
     7354      (x862-unary-builtin seg vreg xfer '%negate form)))
     7355
     7356(defx862 x862-%double-float-negate %double-float-negate (seg vreg xfer form)
     7357  (if (and vreg
     7358           (= (hard-regspec-class vreg) hard-reg-class-fpr)
     7359           (= (get-regspec-mode vreg) hard-reg-class-fpr-mode-double))
     7360    (progn
     7361      (x862-one-targeted-reg-form seg form vreg)
     7362      (! double-float-negate vreg))
     7363    (with-fp-target () (r1 :double-float)
     7364      (setq r1 (x862-one-untargeted-reg-form seg form r1))
     7365      (! double-float-negate r1)
     7366      (ensuring-node-target (target vreg)
     7367        (x862-copy-register seg target r1))))
     7368  (^))
     7369
     7370(defx862 x862-%single-float-negate %single-float-negate (seg vreg xfer form)
     7371  (if (and vreg
     7372           (= (hard-regspec-class vreg) hard-reg-class-fpr)
     7373           (= (get-regspec-mode vreg) hard-reg-class-fpr-mode-single))
     7374    (progn
     7375      (x862-one-targeted-reg-form seg form vreg)
     7376      (! single-float-negate vreg))
     7377    (with-fp-target () (r1 :single-float)
     7378      (setq r1 (x862-one-untargeted-reg-form seg form r1))
     7379      (! single-float-negate r1)
     7380      (ensuring-node-target (target vreg)
     7381        (x862-copy-register seg target r1))))
     7382  (^))
    73547383
    73557384;;; Return T if form is declare to be something that couldn't be a fixnum.
Note: See TracChangeset for help on using the changeset viewer.