Ignore:
Timestamp:
Dec 22, 2009, 10:28:03 PM (10 years ago)
Author:
gz
Message:

Improved compilation for some fixnum operations, %svref (r13247-r13253 from trunk)

Location:
branches/working-0711/ccl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711/ccl

  • branches/working-0711/ccl/compiler/X86/X8632/x8632-vinsns.lisp

    r13070 r13332  
    11061106  (movl (:$l (- 8 x8632::fulltag-misc)) (:%l imm)))
    11071107
     1108(define-x8632-vinsn handle-fixnum-overflow-inline
     1109    (()
     1110     ((val :lisp)
     1111      (no-overflow
     1112       :label))
     1113     ((imm (:u32 #.x8632::imm0))
     1114      (freeptr (:lisp #.x8632::allocptr))))
     1115  (jo :overflow)
     1116  (:uuo-section)
     1117  :overflow
     1118  (movl (:%l val) (:%l imm))
     1119  (sarl (:$ub x8632::fixnumshift) (:%l imm))
     1120  (xorl (:$l #xc0000000) (:%l imm))
     1121  ;; stash bignum digit
     1122  (movd (:%l imm) (:%mmx x8632::mm1))
     1123  ;; set header
     1124  (movl (:$l x8632::one-digit-bignum-header) (:%l imm))
     1125  (movd (:%l imm) (:%mmx x8632::mm0))
     1126  ;; need 8 bytes of aligned memory for 1 digit bignum
     1127  (movl (:$l (- 8 x8632::fulltag-misc)) (:%l imm))
     1128  (subl (:%l imm) (:@ (:%seg :rcontext) x8632::tcr.save-allocptr))
     1129  (movl (:@ (:%seg :rcontext) x8632::tcr.save-allocptr) (:%l freeptr))
     1130  (rcmpl (:%l freeptr) (:@ (:%seg :rcontext) x8632::tcr.save-allocbase))
     1131  (ja :no-trap)
     1132  (uuo-alloc)
     1133  :no-trap
     1134  (movd (:%mmx x8632::mm0) (:@ x8632::misc-header-offset (:%l freeptr)))
     1135  (andb (:$b (lognot x8632::fulltagmask)) (:@ (:%seg :rcontext) x8632::tcr.save-allocptr))
     1136  ((:not (:pred = freeptr
     1137                (:apply %hard-regspec-value val)))
     1138   (movl (:%l freeptr) (:%l val)))
     1139  (movd (:%mmx x8632::mm1) (:@ x8632::misc-data-offset (:%l val)))
     1140  (jmp no-overflow))
     1141
     1142 
    11081143(define-x8632-vinsn set-bigits-after-fixnum-overflow (()
    11091144                                                      ((bignum :lisp)))
Note: See TracChangeset for help on using the changeset viewer.