Changeset 14695
- Timestamp:
- Mar 23, 2011, 2:41:10 PM (14 years ago)
- Location:
- trunk/source/compiler
- Files:
-
- 4 edited
-
ARM/arm2.lisp (modified) (4 diffs)
-
PPC/ppc2.lisp (modified) (4 diffs)
-
X86/x862.lisp (modified) (4 diffs)
-
nx2.lisp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/ARM/arm2.lisp
r14558 r14695 5417 5417 (fix2 (acode-fixnum-form-p form2))) 5418 5418 (if (and fix1 fix2) 5419 (arm2-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) )5420 (let* ((fixval (or fix1 fix2))5419 (arm2-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) 5420 (let* ((fixval (or fix1 fix2)) 5421 5421 (unboxed-fixval (if fixval (ash fixval *arm2-target-fixnum-shift*))) 5422 5422 (ok-imm (and unboxed-fixval … … 5430 5430 (multiple-value-bind (r1 r2) (arm2-two-untargeted-reg-forms seg form1 arm::arg_y form2 arm::arg_z) 5431 5431 (if vreg (ensuring-node-target (target vreg) (! %logior2 target r1 r2))))) 5432 (^)))) 5432 (^))))) 5433 5433 5434 5434 … … 5459 5459 (fix2 (acode-fixnum-form-p form2))) 5460 5460 (if (and fix1 fix2) 5461 (arm2-use-operator (%nx1-operator fixnum) seg vreg xfer (logxor fix1 fix2)) )5461 (arm2-use-operator (%nx1-operator fixnum) seg vreg xfer (logxor fix1 fix2)) 5462 5462 (let* ((fixval (or fix1 fix2)) 5463 5463 (unboxed-fixval (if fixval (ash fixval *arm2-target-fixnum-shift*))) … … 5471 5471 (multiple-value-bind (r1 r2) (arm2-two-untargeted-reg-forms seg form1 arm::arg_y form2 arm::arg_z) 5472 5472 (if vreg (ensuring-node-target (target vreg) (! %logxor2 vreg r1 r2))))) 5473 (^)))) 5473 (^))))) 5474 5474 5475 5475 (defarm2 arm2-%ineg %ineg (seg vreg xfer n) -
trunk/source/compiler/PPC/ppc2.lisp
r14417 r14695 5633 5633 (fix2 (acode-fixnum-form-p form2))) 5634 5634 (if (and fix1 fix2) 5635 (ppc2-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) )5635 (ppc2-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) 5636 5636 (let* ((fixval (or fix1 fix2)) 5637 5637 (unboxed-fixval (if fixval (ash fixval *ppc2-target-fixnum-shift*))) … … 5648 5648 (multiple-value-bind (r1 r2) (ppc2-two-untargeted-reg-forms seg form1 ppc::arg_y form2 ppc::arg_z) 5649 5649 (if vreg (ensuring-node-target (target vreg) (! %logior2 target r1 r2))))) 5650 (^)))) 5650 (^))))) 5651 5651 5652 5652 ;;; in a lot of (typical ?) cases, it might be possible to use a … … 5690 5690 (fix2 (acode-fixnum-form-p form2))) 5691 5691 (if (and fix1 fix2) 5692 (ppc2-use-operator (%nx1-operator fixnum) seg vreg xfer (logxor fix1 fix2)) )5693 (let* ((fixval (or fix1 fix2))5692 (ppc2-use-operator (%nx1-operator fixnum) seg vreg xfer (logxor fix1 fix2)) 5693 (let* ((fixval (or fix1 fix2)) 5694 5694 (unboxed-fixval (if fixval (ash fixval *ppc2-target-fixnum-shift*))) 5695 5695 (high (if fixval (if (= unboxed-fixval (logand #xffff0000 unboxed-fixval)) (ash unboxed-fixval -16)))) … … 5705 5705 (multiple-value-bind (r1 r2) (ppc2-two-untargeted-reg-forms seg form1 ppc::arg_y form2 ppc::arg_z) 5706 5706 (if vreg (ensuring-node-target (target vreg) (! %logxor2 vreg r1 r2))))) 5707 (^)))) 5707 (^))))) 5708 5708 5709 5709 (defppc2 ppc2-%ineg %ineg (seg vreg xfer n) -
trunk/source/compiler/X86/x862.lisp
r14417 r14695 6616 6616 (fix2 (acode-fixnum-form-p form2))) 6617 6617 (if (and fix1 fix2) 6618 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) )6619 (let* ((fixval (or fix1 fix2))6620 (fiximm (if fixval (<= (integer-length fixval)6621 (- 31 *x862-target-fixnum-shift*))))6622 (otherform (when fiximm (if fix1 form2 form1))))6623 (if otherform6624 (if (null vreg)6625 (x862-form seg nil xfer otherform)6626 (ensuring-node-target (target vreg)6627 (x862-one-targeted-reg-form seg otherform target)6628 (! %logior-c target target (ash fixval *x862-target-fixnum-shift*))))6629 (multiple-value-bind (r1 r2) (x862-two-untargeted-reg-forms seg form1 *x862-arg-y* form2 *x862-arg-z*)6618 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) 6619 (let* ((fixval (or fix1 fix2)) 6620 (fiximm (if fixval (<= (integer-length fixval) 6621 (- 31 *x862-target-fixnum-shift*)))) 6622 (otherform (when fiximm (if fix1 form2 form1)))) 6623 (if otherform 6624 (if (null vreg) 6625 (x862-form seg nil xfer otherform) 6626 (ensuring-node-target (target vreg) 6627 (x862-one-targeted-reg-form seg otherform target) 6628 (! %logior-c target target (ash fixval *x862-target-fixnum-shift*)))) 6629 (multiple-value-bind (r1 r2) (x862-two-untargeted-reg-forms seg form1 *x862-arg-y* form2 *x862-arg-z*) 6630 6630 (if vreg (ensuring-node-target (target vreg) (! %logior2 target r1 r2))))) 6631 (^))))6631 (^))))) 6632 6632 6633 6633 ;;; in a lot of (typical ?) cases, it might be possible to use a … … 6638 6638 (fix2 (acode-fixnum-form-p form2))) 6639 6639 (if (and fix1 fix2) 6640 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logand fix1 fix2)) )6640 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logand fix1 fix2)) 6641 6641 (let* ((fixval (or fix1 fix2)) 6642 6642 (fiximm (if fixval (<= (integer-length fixval) … … 6651 6651 (multiple-value-bind (r1 r2) (x862-two-untargeted-reg-forms seg form1 *x862-arg-y* form2 *x862-arg-z*) 6652 6652 (if vreg (ensuring-node-target (target vreg) (! %logand2 target r1 r2))))) 6653 (^)))) 6653 (^))))) 6654 6654 6655 6655 (defx862 x862-%ilogxor2 %ilogxor2 (seg vreg xfer form1 form2) … … 6657 6657 (fix2 (acode-fixnum-form-p form2))) 6658 6658 (if (and fix1 fix2) 6659 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logxor fix1 fix2)) )6660 (let* ((fixval (or fix1 fix2))6661 (fiximm (if fixval (<= (integer-length fixval)6662 (- 31 *x862-target-fixnum-shift*))))6663 (otherform (when fiximm (if fix1 form2 form1))))6664 (if otherform6665 (if (null vreg)6666 (x862-form seg nil xfer otherform)6667 (ensuring-node-target (target vreg)6668 (x862-one-targeted-reg-form seg otherform target)6669 (! %logxor-c target target (ash fixval *x862-target-fixnum-shift*))))6670 (multiple-value-bind (r1 r2) (x862-two-untargeted-reg-forms seg form1 *x862-arg-y* form2 *x862-arg-z*)6659 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logxor fix1 fix2)) 6660 (let* ((fixval (or fix1 fix2)) 6661 (fiximm (if fixval (<= (integer-length fixval) 6662 (- 31 *x862-target-fixnum-shift*)))) 6663 (otherform (when fiximm (if fix1 form2 form1)))) 6664 (if otherform 6665 (if (null vreg) 6666 (x862-form seg nil xfer otherform) 6667 (ensuring-node-target (target vreg) 6668 (x862-one-targeted-reg-form seg otherform target) 6669 (! %logxor-c target target (ash fixval *x862-target-fixnum-shift*)))) 6670 (multiple-value-bind (r1 r2) (x862-two-untargeted-reg-forms seg form1 *x862-arg-y* form2 *x862-arg-z*) 6671 6671 (if vreg (ensuring-node-target (target vreg) (! %logxor2 target r1 r2))))) 6672 (^))))6672 (^))))) 6673 6673 6674 6674 (defx862 x862-%ineg %ineg (seg vreg xfer n) -
trunk/source/compiler/nx2.lisp
r14348 r14695 282 282 (let* ((const-x (acode-integer-form-p x)) 283 283 (const-y (acode-integer-form-p y)) 284 (result (and const-x const-y (ignore-errors (funcall function xy)))))284 (result (and const-x const-y (ignore-errors (funcall function const-x const-y))))) 285 285 (when result 286 286 (backend-use-operator (if (nx1-target-fixnump result) … … 436 436 (defun acode-optimize-logior2 (seg vreg xfer num1 num2 trust-decls &optional (result-type 'integer)) 437 437 (declare (ignorable result-type)) 438 (or (a code-constant-fold-integer-binop seg vreg xfer num1 num2 'logior)438 (or (and nil (acode-constant-fold-integer-binop seg vreg xfer num1 num2 'logior)) 439 439 (let* ((unsigned-natural-type *nx-target-natural-type*) 440 440 (target-fixnum-type *nx-target-fixnum-type*))
Note:
See TracChangeset
for help on using the changeset viewer.
