Changeset 5359


Ignore:
Timestamp:
Oct 17, 2006, 12:45:25 PM (18 years ago)
Author:
Gary Byers
Message:

bind/unbind *interrupt-level* inline.

Location:
trunk/ccl/compiler/X86
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/compiler/X86/X8664/x8664-vinsns.lisp

    r5343 r5359  
    16541654(define-x8664-subprim-call-vinsn (bind-interrupt-level-0) .SPbind-interrupt-level-0)
    16551655
     1656(define-x8664-vinsn bind-interrupt-level-0-inline (()
     1657                                                   ()
     1658                                                   ((temp :imm)))
     1659  (movq (:@ (:%seg :rcontext) x8664::tcr.tlb-pointer) (:%q temp))
     1660  (cmpq (:$b 0) (:@ x8664::interrupt-level-binding-index (:%q temp)))
     1661  (pushq (:@ x8664::interrupt-level-binding-index (:%q temp)))
     1662  (pushq (:$b x8664::interrupt-level-binding-index))
     1663  (pushq (:@ (:%seg :rcontext) x8664::tcr.db-link))
     1664  (movq (:$l 0) (:@ x8664::interrupt-level-binding-index (:%q temp)))
     1665  (movq (:%q x8664::rsp) (:@ (:%seg :rcontext) x8664::tcr.db-link))
     1666  (jns.pt :done)
     1667  (btrq (:$ub 63) (:@ (:%seg :rcontext) x8664::tcr.interrupt-pending))
     1668  (jae.pt :done)
     1669  (ud2a)
     1670  (:byte 2)
     1671  :done)
     1672 
     1673 
     1674
    16561675(define-x8664-subprim-call-vinsn (bind-interrupt-level-m1) .SPbind-interrupt-level-m1)
    16571676
     1677(define-x8664-vinsn bind-interrupt-level-m1-inline (()
     1678                                                   ()
     1679                                                   ((temp :imm)))
     1680  (movq (:@ (:%seg :rcontext) x8664::tcr.tlb-pointer) (:%q temp))
     1681  (pushq (:@ x8664::interrupt-level-binding-index (:%q temp)))
     1682  (pushq (:$b x8664::interrupt-level-binding-index))
     1683  (pushq (:@ (:%seg :rcontext) x8664::tcr.db-link))
     1684  (movq (:$l (ash -1 x8664::fixnumshift)) (:@ x8664::interrupt-level-binding-index (:%q temp)))
     1685  (movq (:%q x8664::rsp) (:@ (:%seg :rcontext) x8664::tcr.db-link)))
     1686
    16581687(define-x8664-subprim-call-vinsn (bind-interrupt-level) .SPbind-interrupt-level)
    16591688
    16601689(define-x8664-subprim-call-vinsn (unbind-interrupt-level) .SPunbind-interrupt-level)
     1690
     1691(define-x8664-vinsn unbind-interrupt-level-inline (()
     1692                                                   ()
     1693                                                   ((link :imm)
     1694                                                    (curval :imm)
     1695                                                    (oldval :imm)
     1696                                                    (tlb :imm)))
     1697  (movq (:@ (:%seg :rcontext) x8664::tcr.tlb-pointer) (:%q tlb))
     1698  (movq (:@ (:%seg :rcontext) x8664::tcr.db-link) (:%q link))
     1699  (movq (:@ x8664::interrupt-level-binding-index (:%q tlb)) (:%q curval))
     1700  (testq (:%q curval) (:%q curval))
     1701  (movq (:@ 8 #|binding.val|# (:%q link)) (:%q oldval))
     1702  (movq (:@ #|binding.link|# (:%q link)) (:%q link))
     1703  (movq (:%q oldval) (:@ x8664::interrupt-level-binding-index (:%q tlb)))
     1704  (movq (:%q link) (:@ (:%seg :rcontext) x8664::tcr.db-link))
     1705  (jns.pt :done)
     1706  (testq (:%q oldval) (:%q oldval))
     1707  (js.pt :done)
     1708  (btrq (:$ub 63) (:@ (:%seg :rcontext) x8664::tcr.interrupt-pending))
     1709  (jae.pt :done)
     1710  (ud2a)
     1711  (:byte 2)
     1712  :done) 
    16611713
    16621714(define-x8664-vinsn (jump-return-pc :jumpLR)
  • trunk/ccl/compiler/X86/x862.lisp

    r5346 r5359  
    37643764      (cond ((eq sym '*interrupt-level*)
    37653765             (let* ((fixval (acode-fixnum-form-p value)))
    3766                (cond ((eql fixval 0) (! bind-interrupt-level-0))
    3767                      ((eql fixval -1) (! bind-interrupt-level-m1))
     3766               (cond ((eql fixval 0)
     3767                      (if *x862-open-code-inline*
     3768                        (! bind-interrupt-level-0-inline)
     3769                        (! bind-interrupt-level-0)))
     3770                     ((eql fixval -1)
     3771                      (if *x862-open-code-inline*
     3772                        (! bind-interrupt-level-m1-inline)
     3773                        (! bind-interrupt-level-m1)))
    37683774                     (t
    37693775                      (if ea-p
     
    48034809                (! dpayback n)
    48044810                (setq n 0))
    4805               (! unbind-interrupt-level))
     4811              (if *x862-open-code-inline*
     4812                (! unbind-interrupt-level-inline)
     4813                (! unbind-interrupt-level)))
    48064814            (nx-error "unknown payback token ~s" r)))))))
    48074815
Note: See TracChangeset for help on using the changeset viewer.