Ignore:
Timestamp:
01/02/09 19:50:32 (13 years ago)
Author:
vvoutilainen
Message:

Helper function for fixnum initializations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

    r11524 r11525  
    49924992           (compiler-unsupported "p2-function: unsupported case: ~S" form)))))
    49934993
     4994(defun emit-fixnum-init (representation)
     4995  (case representation
     4996    (:int)
     4997    (:long
     4998     (emit 'i2l))
     4999    (t
     5000     (emit-invokespecial-init +lisp-fixnum-class+ '("I")))))
     5001
    49945002(defknown p2-ash (t t t) t)
    49955003(defun p2-ash (form target representation)
     
    50355043                 ((zerop constant-shift)
    50365044                  (compile-form arg2 nil nil))) ; for effect
    5037            (case representation
    5038              (:int)
    5039              (:long
    5040               (emit 'i2l))
    5041              (t
    5042               (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5045     (emit-fixnum-init representation)
    50435046           (emit-move-from-stack target representation))
    50445047          ((and constant-shift
     
    50735076           (emit 'ineg)
    50745077           (emit 'ishr)
    5075            (case representation
    5076              (:int)
    5077              (:long
    5078               (emit 'i2l))
    5079              (t
    5080               (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5078     (emit-fixnum-init representation)
    50815079           (emit-move-from-stack target representation))
    50825080          ((fixnum-type-p type2)
     
    51495147                 arg2 'stack :int)
    51505148                (emit 'iand)
    5151                 (case representation
    5152                   (:int)
    5153                   (:long
    5154                    (emit 'i2l))
    5155                   (t
    5156                    (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5149    (emit-fixnum-init representation)
    51575150                (emit-move-from-stack target representation))
    51585151               ((or (and (fixnum-type-p type1)
     
    51675160                 arg2 'stack :int)
    51685161                (emit 'iand)
    5169                 (case representation
    5170                   (:int)
    5171                   (:long
    5172                    (emit 'i2l))
    5173                   (t
    5174                    (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5162    (emit-fixnum-init representation)
    51755163                (emit-move-from-stack target representation))
    51765164               ((and (java-long-type-p type1) (java-long-type-p type2))
     
    52645252                 arg2 'stack :int)
    52655253                (emit 'ior)
    5266                 (case representation
    5267                   (:int)
    5268                   (:long
    5269                    (emit 'i2l))
    5270                   (t
    5271                    (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5254    (emit-fixnum-init representation)
    52725255                (emit-move-from-stack target representation))
    52735256               ((and (eql (fixnum-constant-value type1) 0) (< *safety* 3))
     
    53465329                 arg2 'stack :int)
    53475330                (emit 'ixor)
    5348                 (case representation
    5349                   (:int)
    5350                   (:long
    5351                    (emit 'i2l))
    5352                   (t
    5353                    (emit-invokespecial-init +lisp-fixnum-class+ '("I")))))
     5331    (emit-fixnum-init representation))
    53545332               ((and (java-long-type-p type1) (java-long-type-p type2))
    53555333    (compile-forms-and-maybe-emit-clear-values arg1 'stack :long
     
    53875365           (emit 'iconst_m1)
    53885366           (emit 'ixor)
    5389            (case representation
    5390              (:int)
    5391              (:long
    5392               (emit 'i2l))
    5393              (t
    5394               (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5367     (emit-fixnum-init representation)
    53955368           (emit-move-from-stack target representation)))
    53965369        (t
     
    54375410                  (emit-push-constant-int (1- (expt 2 size))) ; mask
    54385411                  (emit 'iand)
    5439                   (case representation
    5440                     (:int)
    5441                     (:long
    5442                      (emit 'i2l))
    5443                     (t
    5444                      (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     5412      (emit-fixnum-init representation)
    54455413                  (emit-move-from-stack target representation))
    54465414                 ((<= (+ position size) 63)
     
    54595427                         (emit-push-constant-int (1- (expt 2 size)))
    54605428                         (emit 'iand)
    5461                          (case representation
    5462                            (:int)
    5463                            (:long
    5464                             (emit 'i2l))
    5465                            (t
    5466                             (emit-invokespecial-init +lisp-fixnum-class+ '("I")))))
     5429       (emit-fixnum-init representation))
    54675430                        (t
    54685431                         (emit-push-constant-long (1- (expt 2 size))) ; mask
     
    66266589                        (emit 'iload reg2)
    66276590                        (label LABEL2)))
    6628                     (case representation
    6629                       (:int)
    6630                       (:long
    6631                        (emit 'i2l))
    6632                       (t
    6633                        (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     6591        (emit-fixnum-init representation)
    66346592                    (emit-move-from-stack target representation))
    66356593                   ((and (java-long-type-p type1) (java-long-type-p type2))
     
    67176675                arg2 'stack :int)
    67186676                     (emit 'iadd)
    6719                      (case representation
    6720                        (:int)
    6721                        (:long
    6722                         (emit 'i2l))
    6723                        (t
    6724                         (emit-invokespecial-init +lisp-fixnum-class+ '("I")))))
     6677         (emit-fixnum-init representation))
    67256678                    (t
    67266679                     (compile-form arg1 'stack :int)
     
    68006753              (compile-form arg 'stack :int)
    68016754              (emit 'ineg)
    6802               (case representation
    6803                 (:int)
    6804                 (:long
    6805                  (emit 'i2l))
    6806                 (t
    6807                  (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     6755        (emit-fixnum-init representation)
    68086756              (emit-move-from-stack target representation))
    68096757             ((and (java-long-type-p type)
     
    68436791                arg2 'stack :int)
    68446792                     (emit 'isub)
    6845                      (case representation
    6846                        (:int)
    6847                        (:long
    6848                         (emit 'i2l))
    6849                        (t
    6850                         (emit-invokespecial-init +lisp-fixnum-class+ '("I")))))
     6793         (emit-fixnum-init representation))
    68516794                    (t
    68526795                     (compile-form arg1 'stack :int)
     
    71487091                      (emit 'dup))
    71497092                    (emit 'iload value-register)
    7150                     (case representation
    7151                       (:int)
    7152                       (:long
    7153                        (emit 'i2l))
    7154                       (t
    7155                        (emit-invokespecial-init +lisp-fixnum-class+ '("I")))))
     7093        (emit-fixnum-init representation))
    71567094                   (t
    71577095                    (aload value-register)
     
    79007838             (emit 'dup))
    79017839           (compile-form arg 'stack :char)
    7902            (case representation
    7903              (:int)
    7904              (:long
    7905               (emit 'i2l))
    7906              (t
    7907               (emit-invokespecial-init +lisp-fixnum-class+ '("I"))))
     7840     (emit-fixnum-init representation)
    79087841           (emit-move-from-stack target representation))
    79097842          (t
Note: See TracChangeset for help on using the changeset viewer.