Changeset 9412


Ignore:
Timestamp:
May 9, 2008, 9:03:42 AM (11 years ago)
Author:
gb
Message:

Port rme's SBIT improvements from trunk to this branch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711-perf/ccl/compiler/X86/X8664/x8664-vinsns.lisp

    r8031 r9412  
    5050  (shrq (:$ub 3) (:%q dest)))
    5151
     52;;; same as above, but looks better in bit vector contexts
     53(define-x8664-vinsn scale-1bit-misc-index (((dest :u64))
     54                                            ((idx :imm) ; A fixnum
     55                                             )
     56                                            ())
     57  (movq (:%q idx) (:%q dest))
     58  (shrq (:$ub 3) (:%q dest)))
    5259
    5360(define-x8664-vinsn misc-ref-u64  (((dest :u64))
     
    20972104  (andl (:$l x8664::fixnumone) (:%l bitnum))
    20982105  (movl (:%l bitnum) (:%l dest)))
    2099                                            
    2100                                                      
     2106
     2107
     2108(define-x8664-vinsn nref-bit-vector-fixnum (((dest :imm)
     2109                                             (bitnum :s64))
     2110                                            ((bitnum :s64)
     2111                                             (bitvector :lisp))
     2112                                            ())
     2113  (btq (:%q bitnum) (:@ x8664::misc-data-offset (:%q bitvector)))
     2114  (setc (:%b bitnum))
     2115  (movzbl (:%b bitnum) (:%l bitnum))
     2116  (imull (:$b x8664::fixnumone) (:%l bitnum) (:%l dest)))                                     
     2117
     2118(define-x8664-vinsn nref-bit-vector-flags (()
     2119                                            ((bitnum :s64)
     2120                                             (bitvector :lisp))
     2121                                            ())
     2122  (btq (:%q bitnum) (:@ x8664::misc-data-offset (:%q bitvector))))
     2123
    21012124(define-x8664-vinsn misc-ref-c-bit-fixnum (((dest :imm))
    21022125                                           ((src :lisp)
     
    21092132  (andl (:$l x8664::fixnumone) (:%l temp))
    21102133  (movl (:%l temp) (:%l dest)))
     2134
     2135(define-x8664-vinsn misc-ref-c-bit-flags (()
     2136                                           ((src :lisp)
     2137                                            (idx :u64const))
     2138                                          )
     2139  (btq (:$ub (:apply logand 63 idx))
     2140       (:@ (:apply + x8664::misc-data-offset (:apply ash (:apply ash idx -6) x8664::word-shift)) (:%q src))))
    21112141
    21122142(define-x8664-vinsn deref-macptr (((addr :address))
     
    26952725                                               (bitnum :u8)))
    26962726  (btsq (:%q bitnum) (:@ x8664::misc-data-offset (:%q vec) (:%q word-index) 8)))
     2727
     2728;;; In safe code, something else has ensured that the value is of type
     2729;;; BIT.
     2730(define-x8664-vinsn nset-variable-bit-to-variable-value (()
     2731                                                        ((vec :lisp)
     2732                                                         (index :s64)
     2733                                                         (value :lisp)))
     2734  (testb (:%b value) (:%b value))
     2735  (je :clr)
     2736  (btsq (:%q index) (:@ x8664::misc-data-offset (:%q vec)))
     2737  (jmp :done)
     2738  :clr
     2739  (btrq (:%q index) (:@ x8664::misc-data-offset (:%q vec)))
     2740  :done)
     2741
     2742(define-x8664-vinsn nset-variable-bit-to-zero (()
     2743                                              ((vec :lisp)
     2744                                               (index :s64)))
     2745  (btrq (:%q index) (:@ x8664::misc-data-offset (:%q vec))))
     2746
     2747(define-x8664-vinsn nset-variable-bit-to-one (()
     2748                                              ((vec :lisp)
     2749                                               (index :s64)))
     2750  (btsq (:%q index) (:@ x8664::misc-data-offset (:%q vec))))
    26972751
    26982752(define-x8664-vinsn set-constant-bit-to-zero (()
Note: See TracChangeset for help on using the changeset viewer.