Changeset 7772
- Timestamp:
- Nov 28, 2007, 2:30:48 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp
r7765 r7772 1810 1810 (movzwl (:@ (:%l src) (:%l index)) (:%l dest))) 1811 1811 1812 (define-x8632-vinsn mem-ref-c-u8 (((dest :u8)) 1813 ((src :address) 1814 (index :s16const))) 1815 ((:pred = index 0) 1816 (movzbl (:@ (:%l src)) (:%l dest))) 1817 ((:not (:pred = index 0)) 1818 (movzbl (:@ index (:%l src)) (:%l dest)))) 1819 1820 (define-x8632-vinsn mem-ref-u8 (((dest :u8)) 1821 ((src :address) 1822 (index :s32))) 1823 (movzbl (:@ (:%l src) (:%l index)) (:%l dest))) 1824 1825 (define-x8632-vinsn mem-ref-c-s8 (((dest :s8)) 1826 ((src :address) 1827 (index :s16const))) 1828 ((:pred = index 0) 1829 (movsbl (:@ (:%l src)) (:%l dest))) 1830 ((:not (:pred = index 0)) 1831 (movsbl (:@ index (:%l src)) (:%l dest)))) 1832 1833 (define-x8632-vinsn misc-set-c-s8 (((val :s8)) 1834 ((v :lisp) 1835 (idx :u32const)) 1836 ()) 1837 (movb (:%b val) (:@ (:apply + x8632::misc-data-offset idx) (:%l v)))) 1838 1839 (define-x8632-vinsn misc-set-s8 (((val :s8)) 1840 ((v :lisp) 1841 (scaled-idx :s32)) 1842 ()) 1843 (movb (:%b val) (:@ x8632::misc-data-offset (:%l v) (:%l scaled-idx)))) 1844 1845 (define-x8632-vinsn mem-ref-s8 (((dest :s8)) 1846 ((src :address) 1847 (index :s32))) 1848 (movsbl (:@ (:%l src) (:%l index)) (:%l dest))) 1849 1812 1850 (define-x8632-vinsn mem-set-constant-fullword (() 1813 1851 ((val :s32const) … … 2507 2545 (movd (:%mmx x8632::mm1) (:@ x8632::macptr.address (:%l ptr)))) 2508 2546 2547 (define-x8632-vinsn mem-ref-natural (((dest :u32)) 2548 ((src :address) 2549 (index :s32))) 2550 (movl (:@ (:%l src) (:%l index)) (:%l dest))) 2551 2509 2552 (define-x8632-vinsn mem-ref-c-fullword (((dest :u32)) 2510 2553 ((src :address) … … 2522 2565 ((:not (:pred = index 0)) 2523 2566 (movl (:@ index (:%l src)) (:%l dest)))) 2567 2568 (define-x8632-vinsn mem-ref-c-single-float (((dest :single-float)) 2569 ((src :address) 2570 (index :s32const))) 2571 ((:pred = index 0) 2572 (movss (:@ (:%l src)) (:%xmm dest))) 2573 ((:not (:pred = index 0)) 2574 (movss (:@ index (:%l src)) (:%xmm dest)))) 2575 2576 (define-x8632-vinsn mem-set-c-single-float (() 2577 ((val :single-float) 2578 (src :address) 2579 (index :s16const))) 2580 ((:pred = index 0) 2581 (movss (:%xmm val) (:@ (:%l src)))) 2582 ((:not (:pred = index 0)) 2583 (movss (:%xmm val) (:@ index (:%l src))))) 2584 2585 (define-x8632-vinsn mem-ref-c-natural (((dest :u32)) 2586 ((src :address) 2587 (index :s32const))) 2588 ((:pred = index 0) 2589 (movl (:@ (:%l src)) (:%l dest))) 2590 ((:not (:pred = index 0)) 2591 (movl (:@ index (:%l src)) (:%l dest)))) 2592 2524 2593 2525 2594 (define-x8632-vinsn mem-ref-fullword (((dest :u32)) … … 2583 2652 2584 2653 (define-x8632-vinsn %natural- (((result :u32)) 2585 ((result :u32)2586 (other :u32)))2654 ((result :u32) 2655 (other :u32))) 2587 2656 (subl (:%l other) (:%l result))) 2588 2657 … … 2799 2868 :done) 2800 2869 2870 (define-x8632-vinsn ref-interrupt-level (((dest :imm)) 2871 () 2872 ((temp :u32))) 2873 (movl (:@ (:%seg :rcontext) x8632::tcr.tlb-pointer) (:%l temp)) 2874 (movl (:@ x8632::interrupt-level-binding-index (:%l temp)) (:%l dest))) 2875 2801 2876 (define-x8632-subprim-lea-jmp-vinsn (bind-nil) .SPbind-nil) 2802 2877 … … 2921 2996 (define-x8632-subprim-lea-jmp-vinsn (spread-lexpr) .SPspread-lexpr-z) 2922 2997 2998 (define-x8632-vinsn mem-ref-double-float (((dest :double-float)) 2999 ((src :address) 3000 (index :s32))) 3001 (movsd (:@ (:%l src) (:%l index)) (:%xmm dest))) 3002 3003 (define-x8632-vinsn mem-ref-single-float (((dest :single-float)) 3004 ((src :address) 3005 (index :s32))) 3006 (movss (:@ (:%l src) (:%l index)) (:%xmm dest))) 3007 3008 (define-x8632-vinsn zero-extend-nargs (() 3009 ()) 3010 (movzwl (:%w x8632::nargs) (:%l x8632::nargs))) 3011 3012 (define-x8632-vinsn load-adl (() 3013 ((n :u32const))) 3014 (movl (:$l n) (:%l x8632::nargs))) 3015 3016 (define-x8632-subprim-lea-jmp-vinsn (macro-bind) .SPmacro-bind) 3017 3018 (define-x8632-subprim-lea-jmp-vinsn (destructuring-bind-inner) .SPdestructuring-bind-inner) 3019 3020 (define-x8632-subprim-lea-jmp-vinsn (destructuring-bind) .SPdestructuring-bind) 3021 3022 2923 3023 (define-x8632-vinsn symbol-function (((val :lisp)) 2924 3024 ((sym (:lisp (:ne val)))) … … 3019 3119 :done) 3020 3120 3121 (define-x8632-vinsn sign-extend-halfword (((dest :imm)) 3122 ((src :imm))) 3123 (movl (:%l src ) (:%l dest)) 3124 (shll (:$ub (- 48 x8632::fixnumshift)) (:%l dest)) 3125 (sarl (:$ub (- 48 x8632::fixnumshift)) (:%l dest))) 3021 3126 3022 3127 (define-x8632-subprim-jump-vinsn (tail-funcall-gen) .SPtfuncallgen) … … 3103 3208 3104 3209 (define-x8632-subprim-lea-jmp-vinsn (make-stack-vector) .SPmkstackv) 3210 3211 (define-x8632-vinsn %current-frame-ptr (((dest :imm)) 3212 ()) 3213 (movl (:%l x8632::ebp) (:%l dest))) 3214 3215 (define-x8632-vinsn %foreign-stack-pointer (((dest :imm)) 3216 ()) 3217 (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l dest))) 3218 3105 3219 3106 3220 (define-x8632-vinsn %slot-ref (((dest :lisp)) … … 3191 3305 (btl (:$ub bit) (:%l int))) 3192 3306 3307 (define-x8632-vinsn multiply-immediate (((dest :imm)) 3308 ((src :imm) 3309 (const :s32const))) 3310 ((:and (:pred >= const -128) (:pred <= const 127)) 3311 (imull (:$b const) (:%l src) (:%l dest))) 3312 ((:not (:and (:pred >= const -128) (:pred <= const 127))) 3313 (imull (:$l const) (:%l src) (:%l dest)))) 3314 3315 (define-x8632-vinsn multiply-fixnums (((dest :imm)) 3316 ((x :imm) 3317 (y :imm)) 3318 ((unboxed :s32))) 3319 ((:pred = 3320 (:apply %hard-regspec-value x) 3321 (:apply %hard-regspec-value dest)) 3322 (movl (:%l y) (:%l unboxed)) 3323 (sarl (:$ub x8632::fixnumshift) (:%l unboxed)) 3324 (imull (:%l unboxed) (:%l dest))) 3325 ((:and (:not (:pred = 3326 (:apply %hard-regspec-value x) 3327 (:apply %hard-regspec-value dest))) 3328 (:pred = 3329 (:apply %hard-regspec-value y) 3330 (:apply %hard-regspec-value dest))) 3331 (movl (:%l x) (:%l unboxed)) 3332 (sarl (:$ub x8632::fixnumshift) (:%l unboxed)) 3333 (imull (:%l unboxed) (:%l dest))) 3334 ((:and (:not (:pred = 3335 (:apply %hard-regspec-value x) 3336 (:apply %hard-regspec-value dest))) 3337 (:not (:pred = 3338 (:apply %hard-regspec-value y) 3339 (:apply %hard-regspec-value dest)))) 3340 (movl (:%l y) (:%l dest)) 3341 (movl (:%l x) (:%l unboxed)) 3342 (sarl (:$ub x8632::fixnumshift) (:%l unboxed)) 3343 (imull (:%l unboxed) (:%l dest)))) 3344 3345 3193 3346 (define-x8632-vinsn mark-as-imm (() 3194 3347 ((reg :imm)))
Note:
See TracChangeset
for help on using the changeset viewer.
