- Timestamp:
- Nov 26, 2007, 9:22:11 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp
r7659 r7765 154 154 ()) 155 155 (movsbl (:@ (:apply + x8632::misc-data-offset idx) (:%l v)) (:%l dest))) 156 157 (define-x8632-vinsn misc-set-c-s8 (((val :s8)) 158 ((v :lisp) 159 (idx :u32const)) 160 ()) 161 (movb (:%b val) (:@ (:apply + x8632::misc-data-offset idx) (:%l v)))) 162 163 (define-x8632-vinsn misc-set-s8 (((val :s8)) 164 ((v :lisp) 165 (scaled-idx :s32)) 166 ()) 167 (movb (:%b val) (:@ x8632::misc-data-offset (:%l v) (:%l scaled-idx)))) 168 169 (define-x8632-vinsn mem-ref-s8 (((dest :s8)) 170 ((src :address) 171 (index :s32))) 172 (movsbl (:@ (:%l src) (:%l index)) (:%l dest))) 156 173 157 174 (define-x8632-vinsn misc-set-c-node (() … … 1711 1728 (movl (:$l val) (:@ offset (:%l dest))))) 1712 1729 1730 (define-x8632-vinsn mem-set-c-halfword (() 1731 ((val :u16) 1732 (dest :address) 1733 (offset :s32const))) 1734 ((:pred = offset 0) 1735 (movw (:%w val) (:@ (:%l dest)))) 1736 ((:not (:pred = offset 0)) 1737 (movw (:%w val) (:@ offset (:%l dest))))) 1738 1713 1739 (define-x8632-vinsn mem-set-c-constant-halfword (() 1714 1740 ((val :s16const) … … 1729 1755 (movb (:$b val) (:@ offset (:%l dest))))) 1730 1756 1757 (define-x8632-vinsn mem-set-c-byte (() 1758 ((val :u8) 1759 (dest :address) 1760 (offset :s32const))) 1761 ((:pred = offset 0) 1762 (movb (:%b val) (:@ (:%l dest)))) 1763 ((:not (:pred = offset 0)) 1764 (movb (:%b val) (:@ offset (:%l dest))))) 1765 1731 1766 (define-x8632-vinsn mem-ref-c-absolute-u8 (((dest :u8)) 1732 1767 ((addr :s32const))) … … 1761 1796 (index :s32))) 1762 1797 (movzbl (:@ (:%l src) (:%l index)) (:%l dest))) 1798 1799 (define-x8632-vinsn mem-ref-c-u16 (((dest :u16)) 1800 ((src :address) 1801 (index :s32const))) 1802 ((:pred = index 0) 1803 (movzwl (:@ (:%l src)) (:%l dest))) 1804 ((:not (:pred = index 0)) 1805 (movzwl (:@ index (:%l src)) (:%l dest)))) 1806 1807 (define-x8632-vinsn mem-ref-u16 (((dest :u16)) 1808 ((src :address) 1809 (index :s32))) 1810 (movzwl (:@ (:%l src) (:%l index)) (:%l dest))) 1763 1811 1764 1812 (define-x8632-vinsn mem-set-constant-fullword (() … … 1781 1829 (movb (:$b val) (:@ (:%l ptr) (:%l offset)))) 1782 1830 1831 (define-x8632-vinsn misc-set-u8 (((val :u8)) 1832 ((v :lisp) 1833 (scaled-idx :s32)) 1834 ()) 1835 (movb (:%b val) (:@ x8632::misc-data-offset (:%l v) (:%l scaled-idx)))) 1836 1837 (define-x8632-vinsn misc-set-u16 (() 1838 ((val :u16) 1839 (v :lisp) 1840 (scaled-idx :s32)) 1841 ()) 1842 (movw (:%w val) (:@ x8632::misc-data-offset (:%l v) (:%l scaled-idx)))) 1843 1844 (define-x8632-vinsn misc-set-c-s16 (() 1845 ((val :s16) 1846 (v :lisp) 1847 (idx :s32const)) 1848 ()) 1849 (movw (:%w val) (:@ (:apply + x8632::misc-data-offset (:apply * 2 idx)) (:%l v)))) 1850 1851 (define-x8632-vinsn misc-set-s16 (() 1852 ((val :s16) 1853 (v :lisp) 1854 (scaled-idx :s32)) 1855 ()) 1856 (movw (:%w val) (:@ x8632::misc-data-offset (:%l v) (:%l scaled-idx)))) 1857 1858 (define-x8632-vinsn misc-set-c-u32 (() 1859 ((val :u32) 1860 (v :lisp) 1861 (idx :u32const)) ; sic 1862 ()) 1863 (movl (:%l val) (:@ (:apply + x8632::misc-data-offset idx) (:%l v)))) 1864 1783 1865 (define-x8632-vinsn misc-set-u32 (() 1784 1866 ((val :u32) 1867 (v :lisp) 1868 (scaled-idx :s32)) 1869 ()) 1870 (movl (:%l val) (:@ x8632::misc-data-offset (:%l v) (:%l scaled-idx)))) 1871 1872 (define-x8632-vinsn misc-set-c-s32 (() 1873 ((val :s32) 1874 (v :lisp) 1875 (idx :u32const)) ; sic 1876 ()) 1877 (movl (:%l val) (:@ (:apply + x8632::misc-data-offset idx) (:%l v)))) 1878 1879 (define-x8632-vinsn misc-set-s32 (() 1880 ((val :s32) 1785 1881 (v :lisp) 1786 1882 (scaled-idx :s32)) … … 1987 2083 (cmpb (:$b x8632::fulltag-cons) (:%b tag)) 1988 2084 (je :good) 1989 (uuo-error-reg-not-type (:% qobject) (:$ub arch::error-object-not-list))2085 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-list)) 1990 2086 (jmp :again) 1991 2087 :good) … … 2004 2100 (je :got-it) 2005 2101 :bad 2006 (uuo-error-reg-not-type (:% qobject) (:$ub arch::error-object-not-symbol))2102 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-symbol)) 2007 2103 (jmp :again) 2008 2104 :got-it) … … 2013 2109 (cmpl (:$l x8632::subtag-character) (:%l object)) 2014 2110 (je.pt :ok) 2015 (uuo-error-reg-not-type (:%q object) (:$ub arch::error-object-not-character)) 2111 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-character)) 2112 (jmp :again) 2113 :ok) 2114 2115 (define-x8632-vinsn require-s8 (() 2116 ((object :lisp)) 2117 ((tag :u32))) 2118 :again 2119 (movl (:%l object) (:%l tag)) 2120 (shll (:$ub (- x8632::nbits-in-word (+ 8 x8632::fixnumshift))) (:%l tag)) 2121 (sarl (:$ub (- x8632::nbits-in-word 8)) (:%l tag)) 2122 (shll (:$ub x8632::fixnumshift) (:%l tag)) 2123 (cmpl (:%l object) (:%l tag)) 2124 (je.pt :ok) 2125 :bad 2126 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-signed-byte-8)) 2127 (jmp :again) 2128 :ok) 2129 2130 (define-x8632-vinsn require-u8 (() 2131 ((object :lisp)) 2132 ((tag :u32))) 2133 :again 2134 (movl (:$l (lognot (ash #xff x8632::fixnumshift))) (:%l tag)) 2135 (andl (:%l object) (:%l tag)) 2136 (je.pt :ok) 2137 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-unsigned-byte-8)) 2138 (jmp :again) 2139 :ok) 2140 2141 (define-x8632-vinsn require-s16 (() 2142 ((object :lisp)) 2143 ((tag :s32))) 2144 :again 2145 (movl (:%l object) (:%l tag)) 2146 (shll (:$ub (- x8632::nbits-in-word (+ 16 x8632::fixnumshift))) (:%l tag)) 2147 (sarl (:$ub (- x8632::nbits-in-word 16)) (:%l tag)) 2148 (shll (:$ub x8632::fixnumshift) (:%l tag)) 2149 (cmpl (:%l object) (:%l tag)) 2150 (je.pt :ok) 2151 :bad 2152 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-signed-byte-16)) 2153 (jmp :again) 2154 :ok) 2155 2156 (define-x8632-vinsn require-u16 (() 2157 ((object :lisp)) 2158 ((tag :u32))) 2159 :again 2160 (movl (:$l (lognot (ash #xffff x8632::fixnumshift))) (:%l tag)) 2161 (andl (:%l object) (:%l tag)) 2162 (je.pt :ok) 2163 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-unsigned-byte-16)) 2164 (jmp :again) 2165 :ok) 2166 2167 (define-x8632-vinsn require-s32 (() 2168 ((object :lisp)) 2169 ((tag :s32))) 2170 :again 2171 (testl (:$l x8632::fixnummask) (:%l object)) 2172 (movl (:%l object) (:%l tag)) 2173 (je.pt :ok) 2174 (andl (:$l x8632::fulltagmask) (:%l tag)) 2175 (cmpl (:$l x8632::fulltag-misc) (:%l tag)) 2176 (jne.pn :bad) 2177 (cmpl (:$l x8632::one-digit-bignum-header) (:@ x8632::misc-header-offset (:%l object))) 2178 (je.pt :ok) 2179 :bad 2180 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-signed-byte-32)) 2181 (jmp :again) 2182 :ok) 2183 2184 (define-x8632-vinsn require-u32 (() 2185 ((object :lisp)) 2186 ((tag :s32))) 2187 :again 2188 (testl (:$l x8632::fixnummask) (:%l object)) 2189 (movl (:%l object) (:%l tag)) 2190 (je.pt :ok-if-non-negative) 2191 (andl (:$l x8632::fulltagmask) (:%l tag)) 2192 (cmpl (:$l x8632::fulltag-misc) (:%l tag)) 2193 (jne.pn :bad) 2194 (cmpl (:$l x8632::one-digit-bignum-header) (:@ x8632::misc-header-offset (:%l object))) 2195 (je :one) 2196 (cmpl (:$l x8632::two-digit-bignum-header) (:@ x8632::misc-header-offset (:%l object))) 2197 (jne.pn :bad) 2198 (cmpl (:$b 0) (:@ (+ x8632::misc-data-offset 4) (:%l object))) 2199 (je :ok) 2200 :bad 2201 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-unsigned-byte-32)) 2202 (jmp :again) 2203 :one 2204 (movl (:@ x8632::misc-data-offset (:%l object)) (:%l tag)) 2205 :ok-if-non-negative 2206 (testl (:%l tag) (:%l tag)) 2207 (js :bad) 2208 :ok) 2209 2210 (define-x8632-vinsn require-char-code (() 2211 ((object :lisp)) 2212 ((tag :u32))) 2213 :again 2214 (testb (:$b x8632::fixnummask) (:%b object)) 2215 (jne.pn :bad) 2216 (cmpl (:$l (ash #x110000 x8632::fixnumshift)) (:%l object)) 2217 (jb.pt :ok) 2218 :bad 2219 (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-mod-char-code-limit)) 2016 2220 (jmp :again) 2017 2221 :ok) … … 2144 2348 (je :nilsym) 2145 2349 ;; tag-misc? 2146 (andb (:$b x86 64::tagmask) (:%b tag))2147 (cmpb (:$b x86 64::tag-misc) (:%b tag))2350 (andb (:$b x8632::tagmask) (:%b tag)) 2351 (cmpb (:$b x8632::tag-misc) (:%b tag)) 2148 2352 (jne :bad) 2149 2353 ;; symbol? … … 2157 2361 (jmp :ok) 2158 2362 :bad 2159 (uuo-error-reg-not-tag (:% qsrc) (:$ub x8632::subtag-symbol))2363 (uuo-error-reg-not-tag (:%l src) (:$ub x8632::subtag-symbol)) 2160 2364 :nilsym 2161 2365 (movl (:$l (+ x8632::nil-value x8632::nilsym-offset)) (:%l dest)) … … 2271 2475 2272 2476 2477 ;; xxx 2273 2478 (define-x8632-vinsn setup-double-float-allocation (() 2274 2479 ()) … … 2279 2484 ((node :lisp) 2280 2485 (val :double-float))) 2281 (movsd (:%xmm val) (:@ x86 64::double-float.value (:%l node))))2486 (movsd (:%xmm val) (:@ x8632::double-float.value (:%l node)))) 2282 2487 2283 2488 (define-x8632-vinsn set-macptr-address (() … … 2301 2506 ((ptr :lisp))) 2302 2507 (movd (:%mmx x8632::mm1) (:@ x8632::macptr.address (:%l ptr)))) 2508 2509 (define-x8632-vinsn mem-ref-c-fullword (((dest :u32)) 2510 ((src :address) 2511 (index :s32const))) 2512 ((:pred = index 0) 2513 (movl (:@ (:%l src)) (:%l dest))) 2514 ((:not (:pred = index 0)) 2515 (movl (:@ index (:%l src)) (:%l dest)))) 2516 2517 (define-x8632-vinsn mem-ref-c-signed-fullword (((dest :s32)) 2518 ((src :address) 2519 (index :s32const))) 2520 ((:pred = index 0) 2521 (movl (:@ (:%l src)) (:%l dest))) 2522 ((:not (:pred = index 0)) 2523 (movl (:@ index (:%l src)) (:%l dest)))) 2524 2525 (define-x8632-vinsn mem-ref-fullword (((dest :u32)) 2526 ((src :address) 2527 (index :s32))) 2528 (movl (:@ (:%l src) (:%l index)) (:%l dest))) 2529 2530 (define-x8632-vinsn mem-ref-signed-fullword (((dest :s32)) 2531 ((src :address) 2532 (index :s32))) 2533 (movl (:@ (:%l src) (:%l index)) (:%l dest))) 2303 2534 2304 2535 ;;; xxx 16? movapd? … … 2319 2550 (movl (:%l src) (:%l dest)) 2320 2551 (sarl (:$ub x8632::fixnumshift) (:%l dest))) 2552 2553 (define-x8632-vinsn mem-set-double-float (() 2554 ((val :double-float) 2555 (src :address) 2556 (index :s32))) 2557 (movsd (:%xmm val) (:@ (:%l src) (:%l index)))) 2558 2559 (define-x8632-vinsn mem-set-single-float (() 2560 ((val :single-float) 2561 (src :address) 2562 (index :s32))) 2563 (movss (:%xmm val) (:@ (:%l src) (:%l index)))) 2564 2565 (define-x8632-vinsn mem-set-c-fullword (() 2566 ((val :u32) 2567 (dest :address) 2568 (offset :s32const))) 2569 ((:pred = offset 0) 2570 (movl (:%l val) (:@ (:%l dest)))) 2571 ((:not (:pred = offset 0)) 2572 (movl (:%l val) (:@ offset (:%l dest))))) 2321 2573 2322 2574 (define-x8632-vinsn %natural+ (((result :u32)) … … 2482 2734 (jne :bad) 2483 2735 :go 2484 (jmp (:%l x86 64::xfn))2736 (jmp (:%l x8632::xfn)) 2485 2737 :bad 2486 2738 (uuo-error-not-callable)) … … 2750 3002 (movsd (:%xmm source) (:@ x8632::double-float.value (:%l dest)))) 2751 3003 3004 (define-x8632-vinsn fixnum->char (((dest :lisp)) 3005 ((src :imm)) 3006 ((temp :u32))) 3007 (movl (:%l src) (:%l temp)) 3008 (sarl (:$ub (+ x8632::fixnumshift 11)) (:%l temp)) 3009 (cmpl (:$b (ash #xd800 -11))(:%l temp)) 3010 (movl (:$l x8632::nil-value) (:%l temp)) 3011 (cmovel (:%l temp) (:%l dest)) 3012 (je :done) 3013 ((:not (:pred = 3014 (:apply %hard-regspec-value dest) 3015 (:apply %hard-regspec-value src))) 3016 (movl (:%l src) (:%l dest))) 3017 (shll (:$ub (- x8632::charcode-shift x8632::fixnumshift)) (:%l dest)) 3018 (addb (:$b x8632::subtag-character) (:%b dest)) 3019 :done) 3020 2752 3021 2753 3022 (define-x8632-subprim-jump-vinsn (tail-funcall-gen) .SPtfuncallgen) … … 2829 3098 :ok) 2830 3099 3100 (define-x8632-subprim-lea-jmp-vinsn (heap-cons-rest-arg) .SPheap-cons-rest-arg) 3101 3102 (define-x8632-subprim-lea-jmp-vinsn (stack-cons-rest-arg) .SPstack-cons-rest-arg) 3103 3104 (define-x8632-subprim-lea-jmp-vinsn (make-stack-vector) .SPmkstackv) 3105 2831 3106 (define-x8632-vinsn %slot-ref (((dest :lisp)) 2832 3107 ((instance (:lisp (:ne dest))) 2833 3108 (index :lisp))) 2834 3109 (movl (:@ x8632::misc-data-offset (:%l instance) (:%l index)) (:%l dest)) 2835 (cmpl (:$l x86 64::slot-unbound-marker) (:%l dest))3110 (cmpl (:$l x8632::slot-unbound-marker) (:%l dest)) 2836 3111 (jne.pt :ok) 2837 3112 (uuo-error-slot-unbound (:%l dest) (:%l instance) (:%l index)) … … 2882 3157 (define-x8632-vinsn one-opt-supplied-p (() 2883 3158 ()) 2884 (testw (:%w x86 64::nargs) (:%w x8664::nargs))3159 (testw (:%w x8632::nargs) (:%w x8632::nargs)) 2885 3160 (je :one) 2886 3161 (pushl (:$l x8632::nil-value)) … … 2925 3200 (btsl (:$ub (:apply %hard-regspec-value reg)) (:@ (:%seg :rcontext) x8632::tcr.node-regs-mask))) 2926 3201 3202 ;;; need 16 byte alignment here? 3203 (define-x8632-vinsn (temp-push-unboxed-word :push :word :csp) 3204 (() 3205 ((w :u32))) 3206 (movd (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%mmx x8632::stack-temp)) 3207 (subl (:$b 8) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp)) 3208 (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l x8632::ra0)) 3209 (movd (:%mmx x8632::stack-temp) (:@ (:%l x8632::ra0))) 3210 (movl (:%l w) (:@ 4 (:%l x8632::ra0)))) 3211 3212 (define-x8632-vinsn (temp-pop-unboxed-word :pop :word :csp) 3213 (((w :u32)) 3214 ()) 3215 (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l x8632::ra0)) 3216 (movl (:@ 4 (:%l x8632::ra0)) (:%l w)) 3217 (addl (:$b 8) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp))) 3218 2927 3219 (queue-fixup 2928 3220 (fixup-x86-vinsn-templates
Note:
See TracChangeset
for help on using the changeset viewer.
