Changeset 14822


Ignore:
Timestamp:
Jun 12, 2011, 11:37:52 PM (8 years ago)
Author:
gb
Message:

Use acode optimizers in x86 backend.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/x862.lisp

    r14777 r14822  
    69366936
    69376937(defx862 x862-numcmp numcmp (seg vreg xfer cc form1 form2)
    6938   (let* ((name (ecase (cadr cc)
    6939                  (:eq '=-2)
    6940                  (:ne '/=-2)
    6941                  (:lt '<-2)
    6942                  (:le '<=-2)
    6943                  (:gt '>-2)
    6944                  (:ge '>=-2))))
    6945     (if (or (x862-explicit-non-fixnum-type-p form1)
    6946             (x862-explicit-non-fixnum-type-p form2))
    6947       (x862-binary-builtin seg vreg xfer name form1 form2)
    6948       (let* ((fix1 (acode-fixnum-form-p form1))
    6949              (fix2 (acode-fixnum-form-p form2)))
    6950         (if (and fix1 fix2)
    6951           (if (funcall name fix1 fix2)
    6952             (x862-t seg vreg xfer)
    6953             (x862-nil seg vreg xfer))
    6954           (x862-inline-numcmp seg vreg xfer cc name form1 form2))))))
     6938  (or (acode-optimize-numcmp seg vreg xfer cc form1 form2 *x862-trust-declarations*)
     6939      (let* ((name (ecase (cadr cc)
     6940                     (:eq '=-2)
     6941                     (:ne '/=-2)
     6942                     (:lt '<-2)
     6943                     (:le '<=-2)
     6944                     (:gt '>-2)
     6945                     (:ge '>=-2))))
     6946        (if (or (x862-explicit-non-fixnum-type-p form1)
     6947                (x862-explicit-non-fixnum-type-p form2))
     6948          (x862-binary-builtin seg vreg xfer name form1 form2)
     6949          (let* ((fix1 (acode-fixnum-form-p form1))
     6950                 (fix2 (acode-fixnum-form-p form2)))
     6951            (if (and fix1 fix2)
     6952              (if (funcall name fix1 fix2)
     6953                (x862-t seg vreg xfer)
     6954                (x862-nil seg vreg xfer))
     6955              (x862-inline-numcmp seg vreg xfer cc name form1 form2)))))))
    69556956
    69566957(defun x862-inline-numcmp (seg vreg xfer cc name form1 form2)
     
    74527453           
    74537454(defx862 x862-add2 add2 (seg vreg xfer form1 form2)
    7454   (multiple-value-bind (form1 form2)
    7455       (nx-binop-numeric-contagion form1 form2 *x862-trust-declarations*)
    7456     (if (and (x862-form-typep form1 'double-float)
    7457              (x862-form-typep form2 'double-float))
    7458       (x862-use-operator (%nx1-operator %double-float+-2)
    7459                          seg
    7460                          vreg
    7461                          xfer
    7462                          form1
    7463                          form2)
    7464       (if (and (x862-form-typep form1 'single-float)
    7465                (x862-form-typep form2 'single-float))
    7466         (x862-use-operator (%nx1-operator %short-float+-2)
    7467                            seg
    7468                            vreg
    7469                            xfer
    7470                            form1
    7471                            form2)
    7472         (if (and (x862-form-typep form1 'fixnum)
    7473                  (x862-form-typep form2 'fixnum))
    7474           (x862-use-operator (%nx1-operator %i+)
    7475                              seg
    7476                              vreg
    7477                              xfer
    7478                              form1
    7479                              form2
    7480                              t)
    7481           (if (or (x862-explicit-non-fixnum-type-p form1)
    7482                   (x862-explicit-non-fixnum-type-p form2))
    7483             (x862-binary-builtin seg vreg xfer '+-2 form1 form2)
    7484             (x862-inline-add2 seg vreg xfer form1 form2)))))))
     7455  (or (acode-optimize-add2 seg vreg xfer form1 form2 *x862-trust-declarations*)
     7456      (if (or (x862-explicit-non-fixnum-type-p form1)
     7457              (x862-explicit-non-fixnum-type-p form2))
     7458        (x862-binary-builtin seg vreg xfer '+-2 form1 form2)
     7459        (x862-inline-add2 seg vreg xfer form1 form2))))
    74857460
    74867461(defx862 x862-sub2 sub2 (seg vreg xfer form1 form2)
    7487   (multiple-value-bind (form1 form2)
    7488       (nx-binop-numeric-contagion form1 form2 *x862-trust-declarations*)
    7489     (if (and (x862-form-typep form1 'double-float)
    7490              (x862-form-typep form2 'double-float))
    7491       (x862-use-operator (%nx1-operator %double-float--2)
    7492                          seg
    7493                          vreg
    7494                          xfer
    7495                          form1
    7496                          form2)
    7497       (if (and (x862-form-typep form1 'single-float)
    7498                (x862-form-typep form2 'single-float))
    7499         (x862-use-operator (%nx1-operator %short-float--2)
    7500                            seg
    7501                            vreg
    7502                            xfer
    7503                            form1
    7504                            form2)
    7505         (if (and (x862-form-typep form1 'fixnum)
    7506                  (x862-form-typep form2 'fixnum))
    7507           (x862-use-operator (%nx1-operator %i-)
    7508                              seg
    7509                              vreg
    7510                              xfer
    7511                              form1
    7512                              form2
    7513                              t)
    7514           (if (or (x862-explicit-non-fixnum-type-p form1)
    7515                   (x862-explicit-non-fixnum-type-p form2))
    7516             (x862-binary-builtin seg vreg xfer '--2 form1 form2)
    7517             (x862-inline-sub2 seg vreg xfer form1 form2)))))))
     7462  (or (acode-optimize-sub2 seg vreg xfer form1 form2 *x862-trust-declarations*)
     7463      (if (or (x862-explicit-non-fixnum-type-p form1)
     7464              (x862-explicit-non-fixnum-type-p form2))
     7465        (x862-binary-builtin seg vreg xfer '--2 form1 form2)
     7466        (x862-inline-sub2 seg vreg xfer form1 form2))))
    75187467
    75197468(defx862 x862-mul2 mul2 (seg vreg xfer form1 form2)
    7520   (multiple-value-bind (form1 form2)
    7521       (nx-binop-numeric-contagion form1 form2 *x862-trust-declarations*)
    7522     (if (and (x862-form-typep form1 'double-float)
    7523              (x862-form-typep form2 'double-float))
    7524       (x862-use-operator (%nx1-operator %double-float*-2)
    7525                          seg
    7526                          vreg
    7527                          xfer
    7528                          form1
    7529                          form2)
    7530       (if (and (x862-form-typep form1 'single-float)
    7531                (x862-form-typep form2 'single-float))
    7532         (x862-use-operator (%nx1-operator %short-float*-2)
    7533                            seg
    7534                            vreg
    7535                            xfer
    7536                            form1
    7537                            form2)
    7538         (x862-binary-builtin seg vreg xfer '*-2 form1 form2)))))
     7469  (or (acode-optimize-mul2 seg vreg xfer form1 form2 *x862-trust-declarations*)
     7470      (x862-binary-builtin seg vreg xfer '*-2 form1 form2)))
    75397471
    75407472(defx862 x862-div2 div2 (seg vreg xfer form1 form2)
    7541   (multiple-value-bind (form1 form2)
    7542       (nx-binop-numeric-contagion form1 form2 *x862-trust-declarations*)
    7543     (if (and (x862-form-typep form1 'double-float)
    7544              (x862-form-typep form2 'double-float))
    7545       (x862-use-operator (%nx1-operator %double-float/-2)
    7546                          seg
    7547                          vreg
    7548                          xfer
    7549                          form1
    7550                          form2)
    7551       (if (and (x862-form-typep form1 'single-float)
    7552                (x862-form-typep form2 'single-float))
    7553         (x862-use-operator (%nx1-operator %short-float/-2)
    7554                            seg
    7555                            vreg
    7556                            xfer
    7557                            form1
    7558                            form2)
    7559                 (let* ((f2 (acode-fixnum-form-p form2))
    7560                (unwrapped (acode-unwrapped-form form1))
    7561                (f1 nil)
    7562                (f1/f2 nil))
    7563           (if (and f2
    7564                    (not (zerop f2))
    7565                    (acode-p unwrapped)
    7566                    (or (eq (acode-operator unwrapped) (%nx1-operator mul2))
    7567                        (eq (acode-operator unwrapped) (%nx1-operator %i*)))
    7568                    (setq f1 (acode-fixnum-form-p (cadr unwrapped)))
    7569                    (typep (setq f1/f2 (/ f1 f2)) 'fixnum))
    7570             (x862-use-operator (%nx1-operator mul2)
    7571                                seg
    7572                                vreg
    7573                                xfer
    7574                                (make-acode (%nx1-operator fixnum) f1/f2)
    7575                                (caddr unwrapped))
    7576             (x862-binary-builtin seg vreg xfer '/-2 form1 form2)))))))
     7473  (or (acode-optimize-div2 seg vreg xfer form1 form2 *x862-trust-declarations*)
     7474      (x862-binary-builtin seg vreg xfer '/-2 form1 form2)))
    75777475
    75787476(defx862 x862-logbitp logbitp (seg vreg xfer bitnum int)
Note: See TracChangeset for help on using the changeset viewer.