X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-rotate-byte%2Fx86-vm.lisp;h=4a43d00eee70fea78340654adf232be338e25537;hb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;hp=de13b6b321108d4c294c6c658321ce7274fbd291;hpb=79cc569a97e444389350ea3f5b1017374fe16bec;p=sbcl.git diff --git a/contrib/sb-rotate-byte/x86-vm.lisp b/contrib/sb-rotate-byte/x86-vm.lisp index de13b6b..4a43d00 100644 --- a/contrib/sb-rotate-byte/x86-vm.lisp +++ b/contrib/sb-rotate-byte/x86-vm.lisp @@ -15,8 +15,8 @@ (aver (not (= count 0))) (move res integer) (if (> count 0) - (inst rol res count) - (inst ror res (- count))))) + (inst rol res count) + (inst ror res (- count))))) (define-vop (%32bit-rotate-byte-fixnum/c) (:policy :fast-safe) @@ -37,30 +37,30 @@ (t (inst ror res (- 2 count)))))) (macrolet ((def (name arg-type) - `(define-vop (,name) - (:policy :fast-safe) - (:translate %unsigned-32-rotate-byte) - (:note "inline 32-bit rotation") - (:args (count :scs (sb-vm::signed-reg) :target ecx) - (integer :scs (sb-vm::unsigned-reg) :target res)) - (:arg-types sb-vm::tagged-num ,arg-type) - (:temporary (:sc sb-vm::signed-reg :offset sb-vm::ecx-offset) - ecx) - (:results (res :scs (sb-vm::unsigned-reg))) - (:result-types sb-vm::unsigned-byte-32) - (:generator 10 - (let ((label (gen-label)) - (end (gen-label))) - (move res integer) - (move ecx count) - (inst cmp ecx 0) - (inst jmp :ge label) - (inst neg ecx) - (inst ror res :cl) - (inst jmp end) - (emit-label label) - (inst rol res :cl) - (emit-label end)))))) + `(define-vop (,name) + (:policy :fast-safe) + (:translate %unsigned-32-rotate-byte) + (:note "inline 32-bit rotation") + (:args (count :scs (sb-vm::signed-reg) :target ecx) + (integer :scs (sb-vm::unsigned-reg) :target res)) + (:arg-types sb-vm::tagged-num ,arg-type) + (:temporary (:sc sb-vm::signed-reg :offset sb-vm::ecx-offset) + ecx) + (:results (res :scs (sb-vm::unsigned-reg))) + (:result-types sb-vm::unsigned-byte-32) + (:generator 10 + (let ((label (gen-label)) + (end (gen-label))) + (move res integer) + (move ecx count) + (inst cmp ecx 0) + (inst jmp :ge label) + (inst neg ecx) + (inst ror res :cl) + (inst jmp end) + (emit-label label) + (inst rol res :cl) + (emit-label end)))))) (def %32bit-rotate-byte sb-vm::unsigned-byte-32) ;; FIXME: it's not entirely clear to me why we need this second ;; definition -- or rather, why the compiler isn't smart enough to