Changeset 14338


Ignore:
Timestamp:
Oct 7, 2010, 5:51:57 PM (9 years ago)
Author:
gb
Message:

Implement %ILOGNOT vinsns. Improve %ILSL visnsn (knock wood.)

Location:
trunk/source/compiler/X86
Files:
2 edited

Legend:

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

    r13561 r14338  
    10361036                                           (x t)))
    10371037  (subl (:%l y) (:%l x)))
     1038
     1039(define-x8632-vinsn %ilognot (((dest :imm)
     1040                               (src :imm))
     1041                              ((src :imm)))
     1042  (xorl (:$b (- x8632::fixnumone)) (:%l dest)))
    10381043
    10391044(define-x8632-vinsn %logand-c (((dest t)
     
    22672272                           ((count :imm)
    22682273                            (src :imm))
    2269                            ((temp (:s32 #.x8632::eax))
    2270                             (shiftcount (:s32 #.x8632::ecx))))
    2271   (movl (:%l count) (:%l temp))
    2272   (sarl (:$ub x8632::fixnumshift) (:%l temp))
    2273   (rcmpl (:%l temp) (:$l 31))
    2274   (cmovbw (:%w temp) (:%w shiftcount))
    2275   (movl (:%l src) (:%l temp))
    2276   (jae :shift-max)
    2277   (shll (:%shift x8632::cl) (:%l temp))
    2278   (jmp :done)
    2279   :shift-max
    2280   (xorl (:%l temp) (:%l temp))
    2281   :done
    2282   (movl (:%l temp) (:%l dest)))
     2274                           ((shiftcount (:s32 #.x8632::ecx))))
     2275 
     2276  (movl (:$l (ash 31 x8632::fixnumshift)) (:%l shiftcount))
     2277  (rcmpl (:%l count) (:%l shiftcount))
     2278  (cmovbl (:%l count) (:%l shiftcount))
     2279  (sarl (:$ub x8632::fixnumshift) (:%l shiftcount))
     2280  ((:not (:pred =
     2281                (:apply %hard-regspec-value src)
     2282                (:apply %hard-regspec-value dest)))
     2283   (movl (:%l src) (:%l dest)))
     2284  (shll (:%shift x8632::cl) (:%l dest)))
    22832285
    22842286(define-x8632-vinsn %ilsl-c (((dest :imm))
  • trunk/source/compiler/X86/X8664/x8664-vinsns.lisp

    r14193 r14338  
    27512751                           ((count :imm)
    27522752                            (src :imm))
    2753                            ((temp :s64)
    2754                             (shiftcount (:s64 #.x8664::rcx))))
    2755   (movq (:%q count) (:%q temp))
    2756   (sarq (:$ub x8664::fixnumshift) (:%q temp))
    2757   (rcmpq (:%q temp) (:$l 63))
    2758   (cmovbw (:%w temp) (:%w shiftcount))
    2759   (movq (:%q src) (:%q temp))
    2760   (jae :shift-max)
    2761   (shlq (:%shift x8664::cl) (:%q temp))
    2762   (jmp :done)
    2763   :shift-max
    2764   (xorq (:%q temp) (:%q temp))
    2765   :done
    2766   (movq (:%q temp) (:%q dest)))
     2753                           ((shiftcount (:s64 #.x8664::rcx))))
     2754  (movl (:$l (ash 63 x8664::fixnumshift)) (:%l shiftcount))
     2755  (rcmpq (:%q count) (:%q shiftcount))
     2756  (cmovbl (:%l count) (:%l shiftcount))
     2757  (sarl (:$ub x8664::fixnumshift) (:%l shiftcount))
     2758  ((:not (:pred =
     2759                (:apply %hard-regspec-value src)
     2760                (:apply %hard-regspec-value dest)))
     2761   (movq (:%q src) (:%q dest)))
     2762  (shlq (:%shift x8664::cl) (:%q dest)))
    27672763
    27682764(define-x8664-vinsn %ilsl-c (((dest :imm))
     
    45494545  (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
    45504546
     4547(define-x8664-vinsn %ilognot (((dest :imm)
     4548                               (src :imm))
     4549                              ((src :imm)))
     4550  (xorq (:$b (- x8664::fixnumone)) (:%q dest)))
     4551                             
     4552
    45514553(define-x8664-vinsn align-loop-head (()
    45524554                                     ()
Note: See TracChangeset for help on using the changeset viewer.