Changeset 5195
- Timestamp:
- Sep 11, 2006, 8:21:12 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/compiler/X86/x862.lisp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/compiler/X86/x862.lisp
r5178 r5195 6373 6373 (x862-binary-builtin seg vreg xfer 'logbitp bitnum int)) 6374 6374 6375 (defun x862-inline-logior2 (seg vreg xfer form1 form2) 6376 (with-x86-local-vinsn-macros (seg vreg xfer) 6377 (let* ((fix1 (acode-fixnum-form-p form1)) 6378 (fix2 (acode-fixnum-form-p form2))) 6379 (if (and fix1 fix2) 6380 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logior fix1 fix2)) 6381 (let* ((fixval (or fix1 fix2)) 6382 (fiximm (if fixval (<= (integer-length fixval) 6383 (- 31 *x862-target-fixnum-shift*)))) 6384 (otherform (when fiximm (if fix1 form2 form1)))) 6385 (let* ((out-of-line (backend-get-next-label)) 6386 (done (backend-get-next-label))) 6387 (ensuring-node-target (target vreg) 6388 (if otherform 6389 (x862-one-targeted-reg-form seg otherform ($ x8664::arg_z)) 6390 (x862-two-targeted-reg-forms seg form1 ($ x8664::arg_y) form2 ($ x8664::arg_z))) 6391 (if otherform 6392 (unless (acode-fixnum-form-p otherform) 6393 (! branch-unless-arg-fixnum ($ x8664::arg_z) (aref *backend-labels* out-of-line))) 6394 (if (acode-fixnum-form-p form1) 6395 (! branch-unless-arg-fixnum ($ x8664::arg_z) (aref *backend-labels* out-of-line)) 6396 (if (acode-fixnum-form-p form2) 6397 (! branch-unless-arg-fixnum ($ x8664::arg_y) (aref *backend-labels* out-of-line)) 6398 (! branch-unless-both-args-fixnums ($ x8664::arg_y) ($ x8664::arg_z) (aref *backend-labels* out-of-line))))) 6399 (if otherform 6400 (! %logior-c ($ x8664::arg_z) ($ x8664::arg_z) (ash fixval x8664::fixnumshift)) 6401 (! %logior2 ($ x8664::arg_z) ($ x8664::arg_z) ($ x8664::arg_y))) 6402 (-> done) 6403 (@ out-of-line) 6404 (if otherform 6405 (x862-lri seg ($ x8664::arg_y) (ash fixval x8664::fixnumshift))) 6406 (! call-subprim-2 ($ x8664::arg_z) (subprim-name->offset '.SPbuiltin-logior) ($ x8664::arg_y) ($ x8664::arg_z)) 6407 (@ done) 6408 (x862-copy-register seg target ($ x8664::arg_z)) 6409 (^)))))))) 6410 6375 6411 (defx862 x862-logior2 logior2 (seg vreg xfer form1 form2) 6376 (x862-binary-builtin seg vreg xfer 'logior-2 form1 form2)) 6412 (if (or (x862-explicit-non-fixnum-type-p form1) 6413 (x862-explicit-non-fixnum-type-p form2)) 6414 (x862-binary-builtin seg vreg xfer 'logior-2 form1 form2) 6415 (x862-inline-logior2 seg vreg xfer form1 form2))) 6377 6416 6378 6417 (defx862 x862-logxor2 logxor2 (seg vreg xfer form1 form2) 6379 6418 (x862-binary-builtin seg vreg xfer 'logxor-2 form1 form2)) 6380 6419 6420 (defun x862-inline-logand2 (seg vreg xfer form1 form2) 6421 (with-x86-local-vinsn-macros (seg vreg xfer) 6422 (let* ((fix1 (acode-fixnum-form-p form1)) 6423 (fix2 (acode-fixnum-form-p form2))) 6424 (if (and fix1 fix2) 6425 (x862-use-operator (%nx1-operator fixnum) seg vreg xfer (logand fix1 fix2)) 6426 (let* ((fixval (or fix1 fix2)) 6427 (fiximm (if fixval (<= (integer-length fixval) 6428 (- 31 *x862-target-fixnum-shift*)))) 6429 (otherform (when fiximm (if fix1 form2 form1)))) 6430 (let* ((out-of-line (backend-get-next-label)) 6431 (done (backend-get-next-label))) 6432 (ensuring-node-target (target vreg) 6433 (if otherform 6434 (x862-one-targeted-reg-form seg otherform ($ x8664::arg_z)) 6435 (x862-two-targeted-reg-forms seg form1 ($ x8664::arg_y) form2 ($ x8664::arg_z))) 6436 (if otherform 6437 (unless (acode-fixnum-form-p otherform) 6438 (! branch-unless-arg-fixnum ($ x8664::arg_z) (aref *backend-labels* out-of-line))) 6439 (if (acode-fixnum-form-p form1) 6440 (! branch-unless-arg-fixnum ($ x8664::arg_z) (aref *backend-labels* out-of-line)) 6441 (if (acode-fixnum-form-p form2) 6442 (! branch-unless-arg-fixnum ($ x8664::arg_y) (aref *backend-labels* out-of-line)) 6443 (! branch-unless-both-args-fixnums ($ x8664::arg_y) ($ x8664::arg_z) (aref *backend-labels* out-of-line))))) 6444 (if otherform 6445 (! %logand-c ($ x8664::arg_z) ($ x8664::arg_z) (ash fixval x8664::fixnumshift)) 6446 (! %logand2 ($ x8664::arg_z) ($ x8664::arg_z) ($ x8664::arg_y))) 6447 (-> done) 6448 (@ out-of-line) 6449 (if otherform 6450 (x862-lri seg ($ x8664::arg_y) (ash fixval x8664::fixnumshift))) 6451 (! call-subprim-2 ($ x8664::arg_z) (subprim-name->offset '.SPbuiltin-logand) ($ x8664::arg_y) ($ x8664::arg_z)) 6452 (@ done) 6453 (x862-copy-register seg target ($ x8664::arg_z)) 6454 (^)))))))) 6455 6381 6456 (defx862 x862-logand2 logand2 (seg vreg xfer form1 form2) 6382 (x862-binary-builtin seg vreg xfer 'logand-2 form1 form2)) 6457 6458 (if (or (x862-explicit-non-fixnum-type-p form1) 6459 (x862-explicit-non-fixnum-type-p form2)) 6460 (x862-binary-builtin seg vreg xfer 'logand-2 form1 form2) 6461 (x862-inline-logand2 seg vreg xfer form1 form2))) 6383 6462 6384 6463 (defx862 x862-%quo2 %quo2 (seg vreg xfer form1 form2)
Note:
See TracChangeset
for help on using the changeset viewer.
