- Timestamp:
- Oct 5, 2007, 9:52:01 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp
r7339 r7360 1460 1460 (define-x8632-subprim-call-vinsn (unbind-interrupt-level) .SPunbind-interrupt-level) 1461 1461 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 1462 1474 (define-x8632-subprim-jump-vinsn (tail-call-fn-gen) .SPtcallnfngen) 1463 1475 … … 1801 1813 (movl (:$self 0) (:%l x8632::fn))) 1802 1814 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 1803 1949 (queue-fixup 1804 1950 (fixup-x86-vinsn-templates
Note:
See TracChangeset
for help on using the changeset viewer.
