Changeset 7772


Ignore:
Timestamp:
Nov 28, 2007, 10:30:48 PM (12 years ago)
Author:
rme
Message:

Add yet more vinsns.

File:
1 edited

Legend:

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

    r7765 r7772  
    18101810  (movzwl (:@ (:%l src) (:%l index)) (:%l dest)))
    18111811
     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
    18121850(define-x8632-vinsn mem-set-constant-fullword (()
    18131851                                               ((val :s32const)
     
    25072545  (movd (:%mmx x8632::mm1) (:@ x8632::macptr.address (:%l ptr))))
    25082546
     2547(define-x8632-vinsn mem-ref-natural (((dest :u32))
     2548                                     ((src :address)
     2549                                      (index :s32)))
     2550  (movl (:@ (:%l src) (:%l index)) (:%l dest)))
     2551
    25092552(define-x8632-vinsn mem-ref-c-fullword (((dest :u32))
    25102553                                        ((src :address)
     
    25222565  ((:not (:pred = index 0))
    25232566   (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
    25242593
    25252594(define-x8632-vinsn mem-ref-fullword (((dest :u32))
     
    25832652
    25842653(define-x8632-vinsn %natural-  (((result :u32))
    2585                                ((result :u32)
    2586                                 (other :u32)))
     2654                                ((result :u32)
     2655                                (other :u32)))
    25872656  (subl (:%l other) (:%l result)))
    25882657
     
    27992868  :done)
    28002869
     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
    28012876(define-x8632-subprim-lea-jmp-vinsn (bind-nil)  .SPbind-nil)
    28022877
     
    29212996(define-x8632-subprim-lea-jmp-vinsn (spread-lexpr)  .SPspread-lexpr-z)
    29222997
     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
    29233023(define-x8632-vinsn symbol-function (((val :lisp))
    29243024                                     ((sym (:lisp (:ne val))))
     
    30193119  :done)
    30203120
     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)))
    30213126
    30223127(define-x8632-subprim-jump-vinsn (tail-funcall-gen) .SPtfuncallgen)
     
    31033208
    31043209(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
    31053219
    31063220(define-x8632-vinsn  %slot-ref (((dest :lisp))
     
    31913305  (btl (:$ub bit) (:%l int)))
    31923306
     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
    31933346(define-x8632-vinsn mark-as-imm (()
    31943347                                 ((reg :imm)))
Note: See TracChangeset for help on using the changeset viewer.