Changeset 7360


Ignore:
Timestamp:
Oct 5, 2007, 4:52:01 PM (12 years ago)
Author:
rme
Message:

More vinsns. Some wrong for sure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp

    r7339 r7360  
    14601460(define-x8632-subprim-call-vinsn (unbind-interrupt-level) .SPunbind-interrupt-level)
    14611461
     1462;;; xxx
     1463(define-x8632-vinsn (nmkcatchmv :call :subprim-call) (()
     1464                                                      ((lab :label))
     1465                                                      ((entry (:label 1))
     1466                                                       (xfn (:lisp #.x8632::xfn))))
     1467  (leal (:@ (:^ lab)  (:%l x8632::fn)) (:%l xfn))
     1468  (:talign 5)
     1469  (call (:@ .SPmkcatchmv))
     1470  :back
     1471  (movl (:$self 0) (:%l x8632::fn)))
     1472
     1473
    14621474(define-x8632-subprim-jump-vinsn (tail-call-fn-gen) .SPtcallnfngen)
    14631475
     
    18011813  (movl (:$self 0) (:%l x8632::fn)))
    18021814
     1815(define-x8632-vinsn vcell-ref (((dest :lisp))
     1816                               ((vcell :lisp)))
     1817  (movl (:@ x8632::misc-data-offset (:%l vcell)) (:%l dest)))
     1818
     1819(define-x8632-vinsn setup-vcell-allocation (()
     1820                                            ())
     1821  (movl (:$l x8632::value-cell-header) (:%l x8632::imm0))
     1822  (movd (:%l x8632::imm0) (:%mmx x8632::mm0))
     1823  (movl (:$l (- x8632::value-cell.size x8632::fulltag-misc)) (:%l x8632::imm0)))
     1824
     1825(define-x8632-vinsn %init-vcell (()
     1826                                 ((vcell :lisp)
     1827                                  (closed :lisp)))
     1828  (movl (:%l closed) (:@ x8632::value-cell.value (:%l vcell))))
     1829
     1830;;; Magic numbers in here include the address of .SPcall-closure.
     1831
     1832;;; movl $self, %fn
     1833;;; jmp *20660 (.SPcall-closure)
     1834(define-x8632-vinsn init-nclosure (()
     1835                                   ((closure :lisp)))
     1836  (movb (:$b 4) (:@ x8632::misc-data-offset (:%l closure))) ;imm word count
     1837  (movb (:$b #xbf) (:@ (+ x8632::misc-data-offset 2) (:%l closure))) ;movl $self, %fn
     1838  (movl (:%l closure) (:@ (+ x8632::misc-data-offset 3) (:%l closure)))
     1839  (movb (:$b #xff) (:@ (+ x8632::misc-data-offset 7) (:%l closure))) ;jmp
     1840  (movl (:$l #x0050b425) (:@ (+ x8632::misc-data-offset 8) (:%l closure))) ;.SPcall-closure
     1841  ;; already aligned
     1842  (movl (:%l closure) (:@ (+ x8632::misc-data-offset 16) (:%l closure))) ;self-reference entry
     1843  (movb (:$b x8632::function-boundary-marker) (:@ (+ x8632::misc-data-offset 20) (:%l closure))))
     1844
     1845(define-x8632-vinsn finalize-closure (((closure :lisp))
     1846                                      ((closure :lisp)))
     1847  (nop))
     1848
     1849
     1850(define-x8632-vinsn (ref-symbol-value :call :subprim-call)
     1851    (((val :lisp))
     1852     ((sym (:lisp (:ne val)))))
     1853  (:talign 5)
     1854  (call (:@ .SPspecrefcheck))
     1855  (movl (:$self 0) (:%l x8632::fn)))
     1856
     1857(define-x8632-subprim-lea-jmp-vinsn (bind-nil)  .SPbind-nil)
     1858
     1859(define-x8632-subprim-lea-jmp-vinsn (bind-self)  .SPbind-self)
     1860
     1861(define-x8632-subprim-lea-jmp-vinsn (bind-self-boundp-check)  .SPbind-self-boundp-check)
     1862
     1863(define-x8632-subprim-lea-jmp-vinsn (bind)  .SPbind)
     1864
     1865(define-x8632-vinsn (dpayback :call :subprim-call) (()
     1866                                                    ((n :s16const))
     1867                                                    ((temp (:u32 #.x8632::imm0))
     1868                                                     (entry (:label 1))))
     1869  ((:pred > n 0)
     1870   ((:pred > n 1)
     1871    (movl (:$l n) (:%l temp))
     1872    (:talign 4)
     1873    (call (:@ .SPunbind-n)))
     1874   ((:pred = n 1)
     1875    (:talign 5)
     1876    (call (:@ .SPunbind)))
     1877   (movl (:$self 0) (:%l x8632::fn))))
     1878
     1879(define-x8632-vinsn (setq-special :call :subprim-call)
     1880    (()
     1881     ((sym :lisp)
     1882      (val :lisp))
     1883     ((entry (:label 1))))
     1884  (:talign 5)
     1885  (call (:@ .SPspecset))
     1886  (movl (:$self 0) (:%l x8632::fn)))
     1887
     1888(define-x8632-vinsn %symptr->symvector (((target :lisp))
     1889                                        ((target :lisp)))
     1890  (nop))
     1891
     1892(define-x8632-vinsn %symvector->symptr (((target :lisp))
     1893                                        ((target :lisp)))
     1894  (nop))
     1895
     1896(define-x8632-vinsn symbol-function (((val :lisp))
     1897                                     ((sym (:lisp (:ne val))))
     1898                                     ((tag :u8)))
     1899  (movl (:@ x8632::symbol.fcell (:%l sym)) (:%l val))
     1900  (movl (:%l val) (:%l tag))
     1901  (andb (:$b x8632::tagmask) (:%b tag))
     1902  (cmpb (:$b x8632::tag-misc) (:%b tag))
     1903  (jne.pn :bad)
     1904  (movb (:@ x8632::misc-subtag-offset (:%l val)) (:%b tag))
     1905  (cmpb (:$b x8632::subtag-function) (:%b tag))
     1906  (je.pt :ok)
     1907  :bad
     1908  (uuo-error-udf (:%l sym))
     1909  :ok)
     1910
     1911(define-x8632-vinsn  %slot-ref (((dest :lisp))
     1912                                ((instance (:lisp (:ne dest)))
     1913                                 (index :lisp)))
     1914  (movl (:@ x8632::misc-data-offset (:%l instance) (:%l index)) (:%l dest))
     1915  (cmpl (:$l x8664::slot-unbound-marker) (:%l dest))
     1916  (jne.pt :ok)
     1917  (uuo-error-slot-unbound (:%l dest) (:%l instance) (:%l index))
     1918  :ok)
     1919
     1920(define-x8632-vinsn symbol-ref (((dest :lisp))
     1921                                ((src :lisp)
     1922                                 (cellno :u32const)))
     1923  (movl (:@ (:apply + (- x8632::node-size x8632::fulltag-misc)
     1924                    (:apply ash cellno 2))
     1925              (:%l src)) (:%l dest)))
     1926
     1927(define-x8632-vinsn scale-nargs (()
     1928                                 ((nfixed :s16const)))
     1929  ((:pred > nfixed 0)
     1930   (addw (:$w (:apply - (:apply ash nfixed x8632::word-shift))) (:%w x8632::nargs))))
     1931
     1932;; xxx wrong for sure
     1933(define-x8632-vinsn two-opt-supplied-p (()
     1934                                        ()
     1935                                        ((temp0 :u32)
     1936                                         (temp1 :u32)))
     1937  (rcmpw (:%w x8632::nargs) (:$w x8632::node-size))
     1938  (setae (:%b temp0))
     1939  (seta (:%b temp1))
     1940  (negb (:%b temp0))
     1941  (negb (:%b temp1))
     1942  (andl (:$b x8632::t-offset) (:%l temp0))
     1943  (andl (:$b x8632::t-offset) (:%l temp1))
     1944  (addl (:$l x8632::nil-value) (:%l temp0))
     1945  (addl (:$l x8632::nil-value) (:%l temp1))
     1946  (pushl (:%l temp0))
     1947  (pushl (:%l temp1)))
     1948
    18031949(queue-fixup
    18041950 (fixup-x86-vinsn-templates
Note: See TracChangeset for help on using the changeset viewer.