X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Fsystem.lisp;h=9b66ca0a565f9ddf44b2a7cf488feb36cdccb050;hb=1e337a63f5a717b531752ed40021b01a86d89b51;hp=ca691a8fbcab44320ae15b42b7dbd95cda2e5d4f;hpb=f866d5d986cc920a8823549df5045b8182e7d92d;p=sbcl.git diff --git a/src/compiler/x86/system.lisp b/src/compiler/x86/system.lisp index ca691a8..9b66ca0 100644 --- a/src/compiler/x86/system.lisp +++ b/src/compiler/x86/system.lisp @@ -44,7 +44,7 @@ (inst jmp :ne done) ;; Pick off fixnums. - (inst and al-tn 3) + (inst and al-tn fixnum-tag-mask) (inst jmp :e done) ;; must be an other immediate @@ -142,7 +142,7 @@ (:results (res :scs (any-reg descriptor-reg) :from (:argument 0))) (:generator 2 (move res val) - (inst shl res (- n-widetag-bits 2)) + (inst shl res (- n-widetag-bits n-fixnum-tag-bits)) (inst or res (sc-case type (unsigned-reg type) (immediate (tn-value type)))))) @@ -267,8 +267,7 @@ (:arg-types unsigned-num) (:policy :fast-safe) (:generator 2 - (inst fs-segment-prefix) - (inst mov sap (make-ea :dword :disp 0 :index n :scale 4)))) + (inst mov sap (make-ea :dword :disp 0 :index n :scale 4) :fs))) (define-vop (halt) (:generator 1 @@ -330,14 +329,12 @@ (:result-types unsigned-num unsigned-num) (:generator 5 (inst xor eax eax) + ;; Intel docs seem quite consistent on only using CPUID before RDTSC, + ;; not both before and after. Go figure. (inst cpuid) (inst rdtsc) - (inst push edx) - (inst push eax) - (inst xor eax eax) - (inst cpuid) - (inst pop lo) - (inst pop hi))) + (move lo eax) + (move hi edx))) (defmacro with-cycle-counter (&body body) "Returns the primary value of BODY as the primary value, and the