Changeset 5090


Ignore:
Timestamp:
Sep 4, 2006, 1:23:55 AM (18 years ago)
Author:
Gary Byers
Message:

Deal - sometimes conditionally - with 32-bit characters.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/compiler/PPC/ppc2.lisp

    r5046 r5090  
    14081408                                       (:fixnum-vector
    14091409                                        (! box-fixnum target temp))
     1410                                       (:simple-string
     1411                                        (! u32->char target temp))
    14101412                                       (t
    14111413                                        (ppc2-box-u32 seg target temp)))))))))
     
    14291431                              (if (eq type-keyword :signed-8-bit-vector)
    14301432                                (! s8->fixnum target temp)
    1431                                 (! u8->char target temp)))))
     1433                                (! u32->char target temp)))))
    14321434                        (if is-16-bit
    14331435                          (ensuring-node-target (target vreg)
     
    14461448                              (if (eq type-keyword :unsigned-16-bit-vector)
    14471449                                (! u16->fixnum target temp)
    1448                                 (if (eq type-keyword :signed-16-bit-vector)
    1449                                   (! s16->fixnum target temp)
    1450                                   (! u8->char target temp)))))
     1450                                (! s16->fixnum target temp))))
    14511451                          ;; Down to the dregs.
    14521452                          (if is-64-bit
     
    18571857                  (with-imm-temps  () (temp)
    18581858                    (cond (is-32-bit
    1859                            (if constval
     1859                           (if constval                             
    18601860                             (ppc2-lri seg temp
    18611861                                       (if (typep constval 'single-float)
    18621862                                         (ppc2-single-float-bits constval)
    1863                                          constval))
     1863                                         (if (characterp constval)
     1864                                           (char-code constval)
     1865                                           constval)))
    18641866                             (cond ((eq type-keyword :single-float-vector)
    18651867                                    (when safe
     
    18721874                                      (! trap-unless-fixnum val-reg))
    18731875                                    (! fixnum->signed-natural temp val-reg))
     1876                                   ((eq type-keyword :simple-string)
     1877                                      (! unbox-base-char temp val-reg))
    18741878                                   (t
    18751879                                    (! unbox-u32 temp val-reg))))
     
    57425746    (if vreg
    57435747      (ensuring-node-target (target vreg)
    5744         (! %schar target src unscaled-idx)))
     5748        (case (arch::target-char-code-limit (backend-target-arch *target-backend*))
     5749          (256 (! %schar8 target src unscaled-idx))
     5750          (t (! %schar32 target src unscaled-idx)))))
    57455751    (^)))
    57465752
     
    57515757                                                        idx ppc::arg_y
    57525758                                                        char ppc::arg_z)
    5753     (! %set-schar  src unscaled-idx char)
     5759    (case (arch::target-char-code-limit (backend-target-arch *target-backend*))
     5760      (256 (! %set-schar8 src unscaled-idx char))
     5761      (t (! %set-schar32 src unscaled-idx char)))
    57545762    (when vreg (<- char))
    57555763    (^)))
     
    57595767                       (ppc2-three-untargeted-reg-forms seg str ppc::arg_x idx ppc::arg_y
    57605768                                                        char ppc::arg_z)
    5761     (! %set-scharcode  src unscaled-idx char)
     5769    (case (arch::target-char-code-limit (backend-target-arch *target-backend*))
     5770      (256 (! %set-scharcode8 src unscaled-idx char))
     5771      (t (! %set-scharcode32 src unscaled-idx char)))
    57625772    (when vreg (<- char))
    57635773    (^)))
     
    57655775(defppc2 ppc2-%scharcode %scharcode (seg vreg xfer str idx)
    57665776  (multiple-value-bind (src unscaled-idx)
    5767                        (ppc2-two-untargeted-reg-forms seg str ppc::arg_y idx ppc::arg_z)
     5777      (ppc2-two-untargeted-reg-forms seg str ppc::arg_y idx ppc::arg_z)
    57685778    (if vreg
    57695779      (ensuring-node-target (target vreg)
    5770         (! %scharcode target src unscaled-idx)))
     5780        (case (arch::target-char-code-limit (backend-target-arch *target-backend*))
     5781          (256 (! %scharcode8 target src unscaled-idx))
     5782          (t (! %scharcode32 target src unscaled-idx)))))
    57715783    (^)))
    57725784
     
    57755787(defppc2 ppc2-code-char code-char (seg vreg xfer c)
    57765788  (let* ((reg (ppc2-one-untargeted-reg-form seg c ppc::arg_z)))
    5777     (! require-u8 reg)                 ; Typecheck even if result unused.
     5789    ;; Typecheck even if result unused.
     5790    (case (arch::target-char-code-limit (backend-target-arch *target-backend*))
     5791      (256 (! require-u8 reg))
     5792      (t (! require-char-code reg)))
    57785793    (if vreg
    57795794      (ensuring-node-target (target vreg)
Note: See TracChangeset for help on using the changeset viewer.