Changeset 5478


Ignore:
Timestamp:
Nov 5, 2006, 6:36:35 AM (18 years ago)
Author:
Gary Byers
Message:

2d aref support/changes.

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

Legend:

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

    r5380 r5478  
    8686  (lwzx dest v scaled-idx))
    8787
     88
    8889(define-ppc32-vinsn misc-ref-c-u32  (((dest :u32))
    8990                                     ((v :lisp)
     
    312313  (twlge idx temp))
    313314
    314 (define-ppc32-vinsn 2d-unscaled-index (((dest :u32))
    315                                        ((array :lisp)
     315(define-ppc32-vinsn 2d-unscaled-index (((dest :imm)
     316                                        (dim1 :u32))
     317                                       ((dim1 :u32)
    316318                                        (i :imm)
    317                                         (j :imm)
    318                                         (dim1 :u32)))
    319   (mullw dest i dim1)
    320   (add dest dest j))
    321 
    322 
    323 
    324 (define-ppc32-vinsn 2d-32-scaled-index (((dest :u32))
    325                                         ((array :lisp)
    326                                          (i :imm)
    327                                          (j :imm)
    328                                          (dim1 :u32)))
    329   (mullw dest i dim1)
    330   (add dest dest j)
    331   (la dest ppc32::misc-data-offset dest))
     319                                        (j :imm)))
     320  (mullw dim1 i dim1)
     321  (add dest dim1 j))
     322
    332323
    333324(define-ppc32-vinsn 2d-dim1 (((dest :u32))
     
    27462737  (rlwinm dest src (:apply - 32 count) count 31))
    27472738
     2739
     2740(define-ppc32-vinsn trap-unless-simple-array-2 (()
     2741                                                ((object :lisp)
     2742                                                 (expected-flags :u32const)
     2743                                                 (type-error :u8const))
     2744                                                ((tag :u8)
     2745                                                 (flags :u32)
     2746                                                 (crf :crf)))
     2747  (clrlwi tag object (- ppc32::nbits-in-word ppc32::nlisptagbits))
     2748  (cmpwi crf tag ppc32::tag-misc)
     2749  (bne crf :bad)
     2750  (lbz tag ppc32::misc-subtag-offset object)
     2751  (cmpwi crf tag ppc32::subtag-arrayH)
     2752  (bne crf :bad)
     2753  (lwz tag ppc32::arrayH.rank object)
     2754  (cmpwi crf tag (ash 2 ppc32::fixnumshift))
     2755  (lis tag (:apply ldb (byte 16 16) (:apply ash expected-flags ppc32::fixnumshift)))
     2756       
     2757  (lwz flags ppc32::arrayH.flags object)
     2758  (ori tag tag (:apply ldb (byte 16 0) (:apply ash expected-flags ppc32::fixnumshift)))
     2759  (bne crf :bad)
     2760  (cmpw crf tag flags)
     2761  (beq crf :good)
     2762  :bad
     2763  (uuo_interr type-error object)
     2764  :good)
     2765 
     2766 
     2767 
     2768 
    27482769(define-ppc32-vinsn sign-extend-halfword (((dest :imm))
    27492770                                          ((src :imm)))
     
    31143135    (((dest :double-float))
    31153136     ((high t)
    3116       (low t))
    3117      ((align :u32)))
    3118   (clrrwi align ppc::sp 3)
    3119   (stw high -8 align)
    3120   (stw low -4 align)
    3121   (lfd dest -8 align ))
     3137      (low t)))
     3138  (stw high -8 ppc::sp)
     3139  (stw low -4 ppc::sp)
     3140  (lfd dest -8 ppc::sp ))
    31223141
    31233142(define-ppc32-vinsn load-single-float-constant
  • trunk/ccl/compiler/PPC/PPC64/ppc64-vinsns.lisp

    r5356 r5478  
    353353  (tdlge idx temp))
    354354
    355 (define-ppc64-vinsn 2d-unscaled-index (((dest :u64))
    356                                        ((array :lisp)
    357                                         (i :imm)
    358                                         (j :imm)
    359                                         (dim1 :u64)))
    360   (mulld dest i dim1)
    361   (add dest dest j))
     355(define-ppc64-vinsn 2d-unscaled-index (((dest :imm)
     356                                        (dim1 :u32))
     357                                       ((dim1 :u32)
     358                                        (i :imm)
     359                                        (j :imm)))
     360  (mulld dim1 i dim1)
     361  (add dest dim1 j))
    362362
    363363
     
    409409  (ld flags ppc64::arrayH.flags header)
    410410  (td 27 flags xreg))
     411
     412
     413(define-ppc64-vinsn trap-unless-simple-array-2 (()
     414                                               ((object :lisp)
     415                                                (expected-flags :u64const)
     416                                                (type-error :u8const))
     417                                               ((tag :u8)
     418                                                (flags :u64)
     419                                                (crf :crf)))
     420  (clrldi tag object (- ppc64::nbits-in-word ppc64::ntagbits))
     421  (cmpdi crf tag ppc64::fulltag-misc)
     422  (bne crf :bad)
     423  (lbz tag ppc64::misc-subtag-offset object)
     424  (cmpdi crf tag ppc64::subtag-arrayH)
     425  (bne crf :bad)
     426  (ld tag ppc64::arrayH.rank object)
     427  (cmpdi crf tag (ash 2 ppc64::fixnumshift))
     428  (lis tag (:apply ldb (byte 16 16) (:apply ash expected-flags ppc64::fixnumshift)))
     429  (ld flags ppc64::arrayH.flags object)
     430  (ori tag tag (:apply ldb (byte 16 0) (:apply ash expected-flags ppc64::fixnumshift)))
     431  (bne crf :bad)
     432  (cmpd crf tag flags)
     433  (beq crf :good)
     434  :bad
     435  (uuo_interr type-error object)
     436  :good)
    411437
    412438 
Note: See TracChangeset for help on using the changeset viewer.