Changeset 10363


Ignore:
Timestamp:
Aug 6, 2008, 12:54:33 AM (11 years ago)
Author:
rme
Message:

Port r10361, more or less.

(update set-nargs, fixnum->char; new nref-bitvector-flags,
misc-ref-c-bit-fixnum, misc-ref-c-bit-flags, code-char->char)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/X86/X8632/x8632-vinsns.lisp

    r10339 r10363  
    231231(define-x8632-vinsn set-nargs (()
    232232                               ((n :u16const)))
    233   ((:pred < n 32)
    234    (xorl (:%l x8632::nargs) (:%l x8632::nargs))
    235    ((:pred > n 0)
    236     (addl (:$b (:apply ash n x8632::fixnumshift)) (:%l x8632::nargs))))
    237   ((:pred >= n 32)
     233  ((:pred = n 0)
     234   (xorl (:%l x8632::nargs) (:%l x8632::nargs)))
     235  ((:not (:pred = n 0))
    238236   (movl (:$l (:apply ash n x8632::fixnumshift)) (:%l x8632::nargs))))
    239237
     
    28872885  (imull (:$b x8632::fixnumone) (:%l bitnum) (:%l dest)))
    28882886
     2887(define-x8632-vinsn nref-bit-vector-flags (()
     2888                                           ((bitnum :s32)
     2889                                            (bitvector :lisp))
     2890                                           ())
     2891  (btl (:%l bitnum) (:@ x8632::misc-data-offset (:%l bitvector))))
     2892
     2893(define-x8632-vinsn misc-ref-c-bit-fixnum (((dest :imm))
     2894                                           ((src :lisp)
     2895                                            (idx :u32const))
     2896                                           ((temp :u8)))
     2897  (btl (:$ub (:apply logand 31 idx))
     2898       (:@ (:apply + x8632::misc-data-offset (:apply ash (:apply ash idx -5) x8632::word-shift)) (:%l src)))
     2899  (setc (:%b temp))
     2900  (movzbl (:%b temp) (:%l temp))
     2901  (imull (:$b x8632::fixnumone) (:%l temp) (:%l dest)))
     2902
     2903(define-x8632-vinsn misc-ref-c-bit-flags (()
     2904                                          ((src :lisp)
     2905                                           (idx :u64const)))
     2906  (btl (:$ub (:apply logand 31 idx))
     2907       (:@ (:apply + x8632::misc-data-offset (:apply ash (:apply ash idx -5) x8632::word-shift)) (:%l src))))
     2908
    28892909(define-x8632-vinsn set-macptr-address (()
    28902910                                        ((addr :address)
     
    35013521                                  ((temp :u32)))
    35023522  (movl (:%l src) (:%l temp))
    3503   (sarl (:$ub (+ x8632::fixnumshift 11)) (:%l temp))
     3523  (sarl (:$ub (+ x8632::fixnumshift 1)) (:%l temp))
     3524  (cmpl (:$l (ash #xfffe -1)) (:%l temp))
     3525  (je :bad-if-eq)
     3526  (sarl (:$ub (- 11 1)) (:%l temp))
    35043527  (cmpl (:$b (ash #xd800 -11))(:%l temp))
     3528  :bad-if-eq
    35053529  (movl (:$l x8632::nil-value) (:%l temp))
    35063530  (cmovel (:%l temp) (:%l dest))
     
    35113535   (movl (:%l src) (:%l dest)))
    35123536  (shll (:$ub (- x8632::charcode-shift x8632::fixnumshift)) (:%l dest))
    3513   ((:pred <= x8632::subtag-character #x7f)
    3514    (addl (:$b x8632::subtag-character) (:%l dest)))
    3515   ((:pred > x8632::subtag-character #x7f)
    3516    (addl (:$l x8632::subtag-character) (:%l dest)))
     3537  (addl (:$b x8632::subtag-character) (:%l dest))
     3538  :done)
     3539
     3540;;; src is known to be a code for which CODE-CHAR returns non-nil.
     3541(define-x8632-vinsn code-char->char (((dest :lisp))
     3542                                     ((src :imm))
     3543                                     ())
     3544  ((:not (:pred =
     3545                (:apply %hard-regspec-value dest)
     3546                (:apply %hard-regspec-value src)))
     3547   (movl (:%l src) (:%l dest)))
     3548  (shll (:$ub (- x8632::charcode-shift x8632::fixnumshift)) (:%l dest))
     3549  (addl (:$b x8632::subtag-character) (:%l dest))
    35173550  :done)
    35183551
Note: See TracChangeset for help on using the changeset viewer.