From: stassats <sta...@us...> - 2014-02-22 15:43:43
|
The branch "master" has been updated in SBCL: via 67e380a36d809a0ca7881401115814d5639ea09b (commit) from ee98f831a2c77d7e61bf85e33c759457226971e4 (commit) - Log ----------------------------------------------------------------- commit 67e380a36d809a0ca7881401115814d5639ea09b Author: Stas Boukarev <sta...@gm...> Date: Sat Feb 22 19:34:04 2014 +0400 Improve LOGAND-BIGNUM/C VOP on x86-64. Avoid putting unboxed constants into the code when possible. --- src/compiler/x86-64/arith.lisp | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/compiler/x86-64/arith.lisp b/src/compiler/x86-64/arith.lisp index f455bff..62f718b 100644 --- a/src/compiler/x86-64/arith.lisp +++ b/src/compiler/x86-64/arith.lisp @@ -1921,17 +1921,17 @@ constant shift greater than word length"))) (:info mask) (:result-types unsigned-num) (:generator 4 - (let ((mask (constantize mask))) - (cond ((or (integerp mask) - (location= x r)) - (loadw r x bignum-digits-offset other-pointer-lowtag) - (unless (eql mask -1) - (inst and r mask))) - (t - (inst mov r mask) - (inst and r (make-ea-for-object-slot x - bignum-digits-offset - other-pointer-lowtag))))))) + (cond ((or (immediate32-p mask) + (location= x r)) + (loadw r x bignum-digits-offset other-pointer-lowtag) + (unless (or (eql mask -1) + (eql mask (ldb (byte n-word-bits 0) -1))) + (inst and r (constantize mask)))) + (t + (inst mov r mask) + (inst and r (make-ea-for-object-slot x + bignum-digits-offset + other-pointer-lowtag)))))) ;; Specialised mask-signed-field VOPs. (define-vop (mask-signed-field-word/c) ----------------------------------------------------------------------- hooks/post-receive -- SBCL |