Changeset 5349


Ignore:
Timestamp:
Oct 14, 2006, 6:39:15 AM (18 years ago)
Author:
Gary Byers
Message:

INLINE-SUB2 support.

Location:
trunk/ccl/compiler/PPC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/compiler/PPC/PPC32/ppc32-vinsns.lisp

    r5257 r5349  
    28552855  (stw unboxed ppc32::misc-data-offset dest)
    28562856  :done)
     2857
     2858(define-ppc32-vinsn fixnum-sub-overflow-inline-skip (((dest :lisp))
     2859                                                     ((x :imm)
     2860                                                      (y :imm)
     2861                                                      (target :label))
     2862                                                     ((cr0 (:crf 0))
     2863                                                      (unboxed :s32)
     2864                                                      (header :u32)))
     2865  (subo. dest x y)
     2866  (bns+ cr0 target)
     2867  (mtxer ppc::rzero)
     2868  (srawi unboxed dest ppc32::fixnumshift)
     2869  (li header ppc32::one-digit-bignum-header)
     2870  (xoris unboxed unboxed (logand #xffff (ash #xffff (- 32 16 ppc32::fixnumshift))))
     2871  (la ppc::allocptr (- ppc32::fulltag-misc 8) ppc::allocptr)
     2872  (twllt ppc::allocptr ppc::allocbase)
     2873  (stw header ppc32::misc-header-offset ppc::allocptr)
     2874  (mr dest ppc::allocptr)
     2875  (clrrwi ppc::allocptr ppc::allocptr ppc32::ntagbits)
     2876  (stw unboxed ppc32::misc-data-offset dest)
     2877  (b target))
    28572878
    28582879;;; This is, of course, also "subtract-immediate."
  • trunk/ccl/compiler/PPC/PPC64/ppc64-vinsns.lisp

    r5257 r5349  
    27922792  (std unboxed ppc64::misc-data-offset dest)
    27932793  :done)
     2794
     2795(define-ppc64-vinsn fixnum-sub-overflow-inline-skip (((dest :lisp))
     2796                                                     ((x :imm)
     2797                                                      (y :imm)
     2798                                                      (done :label))
     2799                                                     ((cr0 (:crf 0))
     2800                                                      (unboxed :s64)
     2801                                                      (header :u64)))
     2802  (subo. dest x y)
     2803  (bns+ cr0 done)
     2804  (mtxer ppc::rzero)
     2805  (sradi unboxed dest ppc64::fixnumshift)
     2806  (li header ppc64::two-digit-bignum-header)
     2807  (rotldi unboxed unboxed 32)
     2808  (xoris unboxed unboxed (logand #xffff (ash #xffff (- 32 16 ppc64::fixnumshift))))
     2809  (la ppc::allocptr (- ppc64::fulltag-misc 16) ppc::allocptr)
     2810  (tdlt ppc::allocptr ppc::allocbase)
     2811  (std header ppc64::misc-header-offset ppc::allocptr)
     2812  (mr dest ppc::allocptr)
     2813  (clrrdi ppc::allocptr ppc::allocptr ppc64::ntagbits)
     2814  (std unboxed ppc64::misc-data-offset dest)
     2815  (b done))
    27942816
    27952817;;; This is, of course, also "subtract-immediate."
Note: See TracChangeset for help on using the changeset viewer.