Changeset 15112
- Timestamp:
- Dec 5, 2011, 2:54:48 PM (13 years ago)
- File:
-
- 1 edited
-
trunk/source/compiler/X86/X8664/x8664-vinsns.lisp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/X86/X8664/x8664-vinsns.lisp
r15024 r15112 1258 1258 ((header (:u64 #.x8664::imm0)) 1259 1259 (scaled-size (:u64 #.x8664::imm1)) 1260 (bigits (:u64 #.x8664::imm2)) 1260 1261 (freeptr (:lisp #.x8664::allocptr)))) 1261 1262 (jo :overflow) 1262 1263 (:uuo-section) 1263 1264 :overflow 1264 (movq (:%q val) (:%q scaled-size))1265 (btcq (:$ub 63) (:%q scaled-size))1266 (sarq (:$ub x8664::fixnumshift) (:%q scaled-size))1267 (btcq (:$ub 60) (:%q scaled-size))1268 (mov d (:%q scaled-size) (:%mmx x8664::mm0))1269 ( movq (:$l x8664::two-digit-bignum-header) (:%q header))1270 (mov q (:$l (- 16 x8664::fulltag-misc)) (:%qscaled-size))1265 (movq (:%q val) (:%q bigits)) 1266 (btcq (:$ub 63) (:%q bigits)) 1267 (sarq (:$ub x8664::fixnumshift) (:%q bigits)) 1268 (btcq (:$ub 60) (:%q bigits)) 1269 (movl (:$l x8664::two-digit-bignum-header) (:%l header)) 1270 (xorl (:%l scaled-size) (:%l scaled-size)) 1271 (movb (:$b (- 16 x8664::fulltag-misc)) (:%b scaled-size)) 1271 1272 (subq (:%q scaled-size) (:rcontext x8664::tcr.save-allocptr)) 1272 1273 (movq (:rcontext x8664::tcr.save-allocptr) (:%q freeptr)) … … 1280 1281 (:apply %hard-regspec-value val))) 1281 1282 (movq (:%q freeptr) (:%q val))) 1282 (movq (:% mmx x8664::mm0) (:@ x8664::misc-data-offset (:%q val)))1283 (movq (:%q bigits) (:@ x8664::misc-data-offset (:%q val))) 1283 1284 (jmp no-overflow)) 1284 1285 1286 ;;; This handles the 1-bit overflow from addition/subtraction/unary negation1287 (define-x8664-vinsn set-bigits-and-header-for-fixnum-overflow1288 (()1289 ((val :lisp)1290 (no-overflow1291 :label))1292 ((header (:u64 #.x8664::imm0))1293 (scaled-size (:u64 #.x8664::imm1))))1294 (jno no-overflow)1295 (movq (:%q val) (:%q scaled-size))1296 (sarq (:$ub x8664::fixnumshift) (:%q scaled-size))1297 (movq (:$q #xe000000000000000) (:%q header))1298 (xorq (:%q header) (:%q scaled-size))1299 (movd (:%q scaled-size) (:%mmx x8664::mm0))1300 (movq (:$l x8664::two-digit-bignum-header) (:%q header))1301 (movq (:$l (- 16 x8664::fulltag-misc)) (:%q scaled-size)))1302 1285 1303 1286 (define-x8664-vinsn %set-z-flag-if-s64-fits-in-fixnum (((dest :imm)) … … 1324 1307 (define-x8664-vinsn setup-bignum-alloc-for-s64-overflow (() 1325 1308 ((src :s64))) 1326 (mov d (:%q src) (:%mmx x8664::mm0))1309 (movq (:%q src) (:%q x8664::imm2)) 1327 1310 (movl (:$l x8664::two-digit-bignum-header) (:%l x8664::imm0.l)) 1328 1311 (movl (:$l (- 16 x8664::fulltag-misc)) (:%l x8664::imm1.l))) … … 1334 1317 ((src :s64))) 1335 1318 (testq (:%q src) (:%q src)) 1336 (mov d (:%q src) (:%mmx x8664::mm0))1319 (movq (:%q src) (:%q x8664::imm2)) 1337 1320 (movl (:$l x8664::two-digit-bignum-header) (:%l x8664::imm0.l)) 1338 1321 (movl (:$l (- 16 x8664::fulltag-misc)) (:%l x8664::imm1.l)) … … 1362 1345 (define-x8664-vinsn set-bigits-after-fixnum-overflow (() 1363 1346 ((bignum :lisp))) 1364 (movq (:% mmx x8664::mm0) (:@ x8664::misc-data-offset (:%q bignum))))1347 (movq (:%q x8664::imm2) (:@ x8664::misc-data-offset (:%q bignum)))) 1365 1348 1366 1349 … … 2443 2426 (define-x8664-vinsn setup-macptr-allocation (() 2444 2427 ((src :address))) 2445 (mov d (:%q src) (:%mmx x8664::mm0))2428 (movq (:%q src) (:%q x8664::imm2)) 2446 2429 (movl (:$l x8664::macptr-header) (:%l x8664::imm0.l)) 2447 2430 (movl (:$l (- x8664::macptr.size x8664::fulltag-misc)) (:%l x8664::imm1.l))) … … 2449 2432 (define-x8664-vinsn %set-new-macptr-value (() 2450 2433 ((ptr :lisp))) 2451 (movq (:% mmx x8664::mm0) (:@ x8664::macptr.address (:%q ptr))))2434 (movq (:%q x8664::imm2) (:@ x8664::macptr.address (:%q ptr)))) 2452 2435 2453 2436 (define-x8664-vinsn mem-ref-c-fullword (((dest :u32))
Note:
See TracChangeset
for help on using the changeset viewer.
