Changeset 11290


Ignore:
Timestamp:
Nov 3, 2008, 1:13:19 AM (11 years ago)
Author:
gb
Message:

MISC-REF-DOUBLE-FLOAT, MISC-SET-DOUBLE-FLOAT: need to scale index.

Use :discard (and other vinsn attributes) on things that adjust stack
pointers/discard stack frames.

Add MARK-AS-NODE-PRESERVING-FLAGS, which might help with natural comparisons.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/X8632/x8632-vinsns.lisp

    r11107 r11290  
    4949                                            ((v :lisp)
    5050                                             (scaled-idx :imm)))
    51   (movsd (:@ x8632::misc-dfloat-offset (:%l v) (:%l scaled-idx)) (:%xmm dest)))
     51  (movsd (:@ x8632::misc-dfloat-offset (:%l v) (:%l scaled-idx) 2) (:%xmm dest)))
    5252
    5353(define-x8632-vinsn misc-ref-c-double-float  (((dest :double-float))
     
    9292                                    (unscaled-idx :imm))
    9393                                   ())
    94   (movsd (:%xmm val) (:@ x8632::misc-dfloat-offset (:%l v) (:%l unscaled-idx))))
     94  (movsd (:%xmm val) (:@ x8632::misc-dfloat-offset (:%l v) (:%l unscaled-idx) 2)))
    9595
    9696(define-x8632-vinsn misc-ref-u8 (((dest :u8))
     
    16501650;; make-fixed-stack-gvector
    16511651
    1652 (define-x8632-vinsn discard-temp-frame (()
    1653                                         ()
    1654                                         ((temp :imm)))
     1652(define-x8632-vinsn (discard-temp-frame :tsp :pop :discard) (()
     1653                                                             ()
     1654                                                             ((temp :imm)))
    16551655  (movl (:@ (:%seg :rcontext) x8632::tcr.save-tsp) (:%l temp))
    16561656  (movl (:@ (:%l temp)) (:%l temp))
     
    16591659  )
    16601660
    1661 (define-x8632-vinsn discard-c-frame (()
    1662                                      ()
    1663                                      ((temp :imm)))
     1661(define-x8632-vinsn (discard-c-frame :csp :pop :discard) (()
     1662                                                          ()
     1663                                                          ((temp :imm)))
    16641664  (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l temp))
    16651665  (movl (:@ (:%l temp)) (:%l temp))
     
    16671667
    16681668 
    1669 (define-x8632-vinsn vstack-discard (()
     1669(define-x8632-vinsn (vstack-discard :vsp :pop :discard) (()
    16701670                                    ((nwords :u32const)))
    16711671  ((:not (:pred = nwords 0))
     
    39493949  (btsl (:$ub (:apply %hard-regspec-value reg)) (:@ (:%seg :rcontext) x8632::tcr.node-regs-mask)))
    39503950
     3951;;; We can't safely push %eflags on the lisp stack, so we have to clobber
     3952;;; %ah.
     3953(define-x8632-vinsn mark-as-node-preserving-flags (()
     3954                                                   ((reg :imm))
     3955                                                   ((ah (:u8 #.x8632::imm0))))
     3956  (:byte #x9f)                          ;lahf
     3957  (xorl (:%l reg) (:%l reg))
     3958  (btsl (:$ub (:apply %hard-regspec-value reg)) (:@ (:%seg :rcontext) x8632::tcr.node-regs-mask))
     3959  (:byte #x9e))
     3960 
    39513961(define-x8632-vinsn (temp-push-unboxed-word :push :word :csp)
    39523962    (()
Note: See TracChangeset for help on using the changeset viewer.