Changeset 6300


Ignore:
Timestamp:
Apr 18, 2007, 11:27:17 AM (15 years ago)
Author:
gb
Message:

When recovering %fn from %rip, use a temporary to reference the entry label (# 1).

File:
1 edited

Legend:

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

    r6293 r6300  
    277277
    278278(define-x8664-vinsn (call-known-symbol :call) (((result (:lisp x8664::arg_z)))
    279                                                ())
     279                                               ()
     280                                               ((entry (:label 1))))
    280281  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    281282  (movq (:@ x8664::symbol.fcell (:% x8664::fname)) (:%q x8664::fn))
     
    284285  (:long (:^ :back))
    285286  :back
    286   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    287   :disp)
     287  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    288288
    289289;;; It's neccessary to use x8664:xfn to reference the current function
     
    992992
    993993(define-x8664-vinsn (call-subprim :call)  (()
    994                                   ((spno :s32const)))
     994                                           ((spno :s32const))
     995                                           ((entry (:label 1))))
    995996  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    996997  (jmp (:@ spno))
     
    998999  (:long (:^ :back))
    9991000  :back
    1000   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1001   :disp
    1002 )
     1001  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    10031002
    10041003(define-x8664-vinsn fixnum-subtract-from (((dest t)
     
    11431142     ((val :lisp))
    11441143     ((unboxed (:s64 #.x8664::imm1))
    1145       (header (:u64 #.x8664::imm0))))
     1144      (header (:u64 #.x8664::imm0))
     1145      (entry (:label 1))))
    11461146  (jno.pt :done)
    11471147  ((:not (:pred = x8664::arg_z
     
    11531153  (:long (:^ :back))
    11541154  :back
    1155   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1156   :disp
     1155  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn))
    11571156  ((:not (:pred = x8664::arg_z
    11581157                (:apply %hard-regspec-value val)))
     
    11651164      (lab :label))
    11661165     ((unboxed (:s64 #.x8664::imm1))
    1167       (header (:u64 #.x8664::imm0))))
     1166      (header (:u64 #.x8664::imm0))
     1167      (entry (:label 1))))
    11681168  (jno.pt lab)
    11691169  ((:not (:pred = x8664::arg_z
     
    11751175  (:long (:^ :back))
    11761176  :back
    1177   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1178   :disp
     1177  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn))
    11791178  ((:not (:pred = x8664::arg_z
    11801179                (:apply %hard-regspec-value val)))
     
    12961295
    12971296(define-x8664-vinsn (call-label :call) (()
    1298                                         ((label :label)))
     1297                                        ((label :label))
     1298                                        ((entry (:label 1))))
    12991299  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    13001300  (jmp label)
     
    13021302  (:long (:^ :back))
    13031303  :back
    1304   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1305   :disp
    1306   )
     1304  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    13071305
    13081306(define-x8664-vinsn double-float-compare (()
     
    15921590
    15931591(define-x8664-vinsn (call-known-function :call) (()
    1594                                                  ())
     1592                                                 ()
     1593                                                 ((entry (:label 1))))
    15951594  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    15961595  (movq (:%q x8664::temp0) (:%q x8664::fn))
     
    15991598  (:long (:^ :back))
    16001599  :back
    1601   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1602   :disp
    1603 )
     1600  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    16041601
    16051602(define-x8664-vinsn (jump-known-function :jumplr) (()
     
    16101607
    16111608(define-x8664-vinsn (list :call) (()
    1612                                   ())
     1609                                  ()
     1610                                  ((entry (:label 1))))
    16131611  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    16141612  (jmp (:@ .SPconslist))
     
    16161614  (:long (:^ :back))
    16171615  :back
    1618   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1619   :disp  )
     1616  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    16201617
    16211618
     
    16891686
    16901687(defmacro define-x8664-subprim-call-vinsn ((name &rest other-attrs) spno)
    1691   `(define-x8664-vinsn (,name :call :subprim-call ,@other-attrs) (() ())
     1688  `(define-x8664-vinsn (,name :call :subprim-call ,@other-attrs) (() () ((entry (:label 1))))
    16921689    (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    16931690    (jmp (:@ ,spno))
     
    16951692    (:long (:^ :back))
    16961693    :back
    1697     (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1698     :disp))
     1694    (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn))))
    16991695
    17001696(defmacro define-x8664-subprim-jump-vinsn ((name &rest other-attrs) spno)
     
    17791775
    17801776(define-x8664-vinsn (mkcatchmv :call :subprim-call) (()
    1781                                                      ((lab :label)))
     1777                                                     ((lab :label))
     1778                                                     ((entry (:label 1))))
    17821779  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    17831780  (leaq (:@ (:^ lab)  (:%q x8664::fn)) (:%q x8664::xfn))
     
    17861783  (:long (:^ :back))
    17871784  :back
    1788   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1789   :disp )
     1785  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    17901786
    17911787(define-x8664-vinsn (mkcatch1v :call :subprim-call) (()
    1792                                                      ((lab :label)))
     1788                                                     ((lab :label))
     1789                                                     ((entry (:label 1))))
    17931790  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    17941791  (leaq (:@ (:^ lab)  (:%q x8664::fn)) (:%q x8664::xfn))
     
    17971794  (:long (:^ :back))
    17981795  :back
    1799   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1800   :disp)
     1796  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    18011797
    18021798(define-x8664-vinsn (mkunwind :call :subprim-call) (()
     
    18161812(define-x8664-vinsn funcall (()
    18171813                             ()
    1818                              ((tag :u8)))
     1814                             ((tag :u8)
     1815                              (entry (:label 1))))
    18191816  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    18201817  (movb (:%b x8664::temp0) (:%b tag))
     
    18301827  (:long (:^ :back))
    18311828  :back
    1832   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1833   :disp)
     1829  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    18341830
    18351831(define-x8664-vinsn tail-funcall (()
     
    18661862(define-x8664-vinsn (ref-symbol-value :call :subprim-call)
    18671863    (((val :lisp))
    1868      ((sym (:lisp (:ne val)))))
     1864     ((sym (:lisp (:ne val))))
     1865     ((entry (:label 1))))
    18691866  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    18701867  (jmp (:@ .SPspecrefcheck))
     
    18721869  (:long (:^ :back)) 
    18731870  :back
    1874   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1875   :disp )
     1871  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)) )
    18761872
    18771873(define-x8664-vinsn ref-symbol-value-inline (((dest :lisp))
     
    18971893(define-x8664-vinsn (%ref-symbol-value :call :subprim-call)
    18981894    (((val :lisp))
    1899      ((sym (:lisp (:ne val)))))
     1895     ((sym (:lisp (:ne val))))
     1896     ((entry (:label 1))))
    19001897  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    19011898  (jmp (:@ .SPspecref))
     
    19031900  (:long (:^ :back))
    19041901  :back
    1905   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    1906   :disp  )
     1902  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    19071903
    19081904(define-x8664-vinsn %ref-symbol-value-inline (((dest :lisp))
     
    29762972                                                           (x t)
    29772973                                                           (y t)
    2978                                                            (z t)))
     2974                                                           (z t))
     2975                                                          ((entry (:label 1))))
    29792976  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    29802977  (jmp (:@ spno))
     
    29822979  (:long (:^ :back))
    29832980  :back
    2984   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    2985   :disp)
     2981  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    29862982
    29872983(define-x8664-vinsn setup-vcell-allocation (()
     
    31993195    (()
    32003196     ((sym :lisp)
    3201       (val :lisp)))
     3197      (val :lisp))
     3198     ((entry (:label 1))))
    32023199  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    32033200  (jmp (:@ .SPspecset))
     
    32053202  (:long (:^ :back))
    32063203  :back
    3207   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    3208   :disp)
     3204  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    32093205
    32103206(define-x8664-vinsn set-z-flag-if-istruct-typep (()
     
    32803276                                                          ((spno :s32const)
    32813277                                                           (y t)
    3282                                                            (z t)))
     3278                                                           (z t))
     3279                                                          ((entry (:label 1))))
    32833280  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    32843281  (jmp (:@ spno))
     
    32863283  (:long (:^ :back))
    32873284  :back
    3288   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    3289   :disp)
     3285  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    32903286
    32913287(define-x8664-vinsn set-macptr-address (()
     
    33483344;;; transfer & jump ...)
    33493345(define-x8664-vinsn (throw :jump :jump-unknown) (()
    3350                                                  ())
     3346                                                 ()
     3347                                                 ((entry (:label 1))))
    33513348  (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
    33523349  (jmp (:@ .SPthrow))
     
    33543351  (:long (:^ :back))
    33553352  :back
    3356   (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    3357   :disp )
     3353  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    33583354
    33593355
     
    35663562(define-x8664-vinsn (dpayback :call :subprim-call) (()
    35673563                                                    ((n :s16const))
    3568                                                     ((temp (:u32 #.x8664::imm0))))
     3564                                                    ((temp (:u32 #.x8664::imm0))
     3565                                                     (entry (:label 1))))
    35693566  ((:pred > n 0)
    35703567   (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
     
    35773574   (:long (:^ :back))   
    35783575   :back
    3579    (leaq (:@ (:apply - (:^ :disp)) (:% x8664::rip)) (:%q x8664::fn))
    3580    :disp)) 
     3576   (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))) 
    35813577
    35823578(define-x8664-subprim-jump-vinsn (tail-call-sym-gen) .SPtcallsymgen)
Note: See TracChangeset for help on using the changeset viewer.