(unless (constant-continuation-p y)
(give-up))
(let ((val (continuation-value y)))
- (multiple-value-bind (frac exp sign)
- (decode-float val)
- (unless (= frac 0.5)
- (give-up))
- `(* x (float (/ ,val) x)))))
+ (unless (= (decode-float val) 0.5)
+ (give-up))
+ `(* x (float (/ ,val) x))))
;; Convert 2*x to x+x.
(deftransform * ((x y) (float real) * :when :both)
(:arg-types unsigned-num)
(:results (result :scs (unsigned-reg)))
(:result-types positive-fixnum)
- (:temporary (:sc unsigned-reg :from (:argument 0)) temp)
(:guard (backend-featurep :sse3))
(:generator 2
(inst popcnt result arg)))
(defun prefilter-reg-r (value dstate)
(declare (type reg value)
- (type disassem:disassem-state dstate))
+ (type disassem:disassem-state dstate)
+ (ignore dstate))
value)
;;; This is a sort of bogus prefilter that just
(imm :type 'imm-data))
(defun emit-sse-inst (segment dst src prefix opcode &key operand-size)
+ (declare (ignore operand-size))
(when prefix
(emit-byte segment prefix))
(emit-byte segment #x0f)
;; MOVHPS (respectively). I (rtoy) don't know how to fix that;
;; instead. just print a note with the correct instruction name.
(defun movlps-control (chunk inst stream dstate)
+ (declare (ignore inst))
(when stream
(when (>= (ldb (byte 8 16) chunk) #xc0)
(disassem:note "MOVHLPS" dstate))))
(defun movhps-control (chunk inst stream dstate)
+ (declare (ignore inst))
(when stream
(when (>= (ldb (byte 8 16) chunk) #xc0)
(disassem:note "MOVLHPS" dstate))))
:from :eval :to :result) ecx)
(:temporary (:sc unsigned-reg :offset edx-offset
:from :eval :to :result) edx)
- (:temporary (:sc double-stack) temp)
(:node-var node)
(:vop-var vop)
(:save-p t)
(define-vop (alloc-number-stack-space)
(:info amount)
(:results (result :scs (sap-reg any-reg)))
- (:node-var node)
(:generator 0
(assert (location= result esp-tn))
(define-vop (dealloc-number-stack-space)
(:info amount)
- (:node-var node)
(:generator 0
(unless (zerop amount)
(let ((delta (logandc2 (+ amount 3) 3)))