Changeset 7765


Ignore:
Timestamp:
Nov 27, 2007, 5:22:11 AM (12 years ago)
Author:
rme
Message:

More.

File:
1 edited

Legend:

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

    r7659 r7765  
    154154                                     ())
    155155  (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)))
    156173
    157174(define-x8632-vinsn misc-set-c-node (()
     
    17111728   (movl (:$l val) (:@ offset (:%l dest)))))
    17121729
     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
    17131739(define-x8632-vinsn mem-set-c-constant-halfword (()
    17141740                                                 ((val :s16const)
     
    17291755   (movb (:$b val) (:@ offset (:%l dest)))))
    17301756
     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
    17311766(define-x8632-vinsn mem-ref-c-absolute-u8 (((dest :u8))
    17321767                                           ((addr :s32const)))
     
    17611796                                 (index :s32)))
    17621797  (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)))
    17631811
    17641812(define-x8632-vinsn mem-set-constant-fullword (()
     
    17811829  (movb (:$b val) (:@ (:%l ptr) (:%l offset))))
    17821830
     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
    17831865(define-x8632-vinsn misc-set-u32  (()
    17841866                                   ((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)
    17851881                                    (v :lisp)
    17861882                                    (scaled-idx :s32))
     
    19872083  (cmpb (:$b x8632::fulltag-cons) (:%b tag))
    19882084  (je :good)
    1989   (uuo-error-reg-not-type (:%q object) (:$ub arch::error-object-not-list))
     2085  (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-list))
    19902086  (jmp :again)
    19912087  :good)
     
    20042100  (je :got-it)
    20052101  :bad
    2006   (uuo-error-reg-not-type (:%q object) (:$ub arch::error-object-not-symbol))
     2102  (uuo-error-reg-not-type (:%l object) (:$ub arch::error-object-not-symbol))
    20072103  (jmp :again)
    20082104  :got-it)
     
    20132109  (cmpl (:$l x8632::subtag-character) (:%l object))
    20142110  (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))
    20162220  (jmp :again)
    20172221  :ok)
     
    21442348  (je :nilsym)
    21452349  ;; tag-misc?
    2146   (andb (:$b x8664::tagmask) (:%b tag))
    2147   (cmpb (:$b x8664::tag-misc) (:%b tag))
     2350  (andb (:$b x8632::tagmask) (:%b tag))
     2351  (cmpb (:$b x8632::tag-misc) (:%b tag))
    21482352  (jne :bad)
    21492353  ;; symbol?
     
    21572361  (jmp :ok)
    21582362  :bad
    2159   (uuo-error-reg-not-tag (:%q src) (:$ub x8632::subtag-symbol))
     2363  (uuo-error-reg-not-tag (:%l src) (:$ub x8632::subtag-symbol))
    21602364  :nilsym
    21612365  (movl (:$l (+ x8632::nil-value x8632::nilsym-offset)) (:%l dest))
     
    22712475
    22722476
     2477;; xxx
    22732478(define-x8632-vinsn setup-double-float-allocation (()
    22742479                                                   ())
     
    22792484                                            ((node :lisp)
    22802485                                             (val :double-float)))
    2281   (movsd (:%xmm val) (:@ x8664::double-float.value (:%l node))))
     2486  (movsd (:%xmm val) (:@ x8632::double-float.value (:%l node))))
    22822487
    22832488(define-x8632-vinsn set-macptr-address (()
     
    23012506                                           ((ptr :lisp)))
    23022507  (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)))
    23032534
    23042535;;; xxx 16? movapd?
     
    23192550  (movl (:%l src) (:%l dest))
    23202551  (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)))))
    23212573
    23222574(define-x8632-vinsn %natural+  (((result :u32))
     
    24822734  (jne :bad)
    24832735  :go
    2484   (jmp (:%l x8664::xfn))
     2736  (jmp (:%l x8632::xfn))
    24852737  :bad
    24862738  (uuo-error-not-callable))
     
    27503002  (movsd (:%xmm source) (:@  x8632::double-float.value (:%l dest))))
    27513003
     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
    27523021
    27533022(define-x8632-subprim-jump-vinsn (tail-funcall-gen) .SPtfuncallgen)
     
    28293098  :ok)
    28303099
     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
    28313106(define-x8632-vinsn  %slot-ref (((dest :lisp))
    28323107                                ((instance (:lisp (:ne dest)))
    28333108                                 (index :lisp)))
    28343109  (movl (:@ x8632::misc-data-offset (:%l instance) (:%l index)) (:%l dest))
    2835   (cmpl (:$l x8664::slot-unbound-marker) (:%l dest))
     3110  (cmpl (:$l x8632::slot-unbound-marker) (:%l dest))
    28363111  (jne.pt :ok)
    28373112  (uuo-error-slot-unbound (:%l dest) (:%l instance) (:%l index))
     
    28823157(define-x8632-vinsn one-opt-supplied-p (()
    28833158                                        ())
    2884   (testw (:%w x8664::nargs) (:%w x8664::nargs))
     3159  (testw (:%w x8632::nargs) (:%w x8632::nargs))
    28853160  (je :one)
    28863161  (pushl (:$l x8632::nil-value))
     
    29253200  (btsl (:$ub (:apply %hard-regspec-value reg)) (:@ (:%seg :rcontext) x8632::tcr.node-regs-mask)))
    29263201
     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
    29273219(queue-fixup
    29283220 (fixup-x86-vinsn-templates
Note: See TracChangeset for help on using the changeset viewer.