Changeset 7938
- Timestamp:
- Dec 25, 2007, 11:45:56 PM (17 years ago)
- File:
-
- 1 edited
-
branches/working-0711/ccl/compiler/X86/x862.lisp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/working-0711/ccl/compiler/X86/x862.lisp
r7859 r7938 40 40 (defparameter *x862-operator-supports-u8-target* ()) 41 41 (defparameter *x862-operator-supports-push* ()) 42 42 (defparameter *x862-tos-reg* ()) 43 43 44 44 … … 67 67 (retvreg-var (gensym)) 68 68 (label-var (gensym))) 69 `(macrolet ((! (,template-name-var &rest ,args-var) 69 `(macrolet ((! (,template-name-var &rest ,args-var) 70 70 (let* ((,template-temp (get-vinsn-template-cell ,template-name-var (backend-p2-vinsn-templates *target-backend*)))) 71 71 (unless ,template-temp 72 72 (warn "VINSN \"~A\" not defined" ,template-name-var)) 73 `(%emit-vinsn ,',segvar ',,template-name-var (backend-p2-vinsn-templates *target-backend*) ,@,args-var)))) 73 `(prog1 74 (%emit-vinsn ,',segvar ',,template-name-var (backend-p2-vinsn-templates *target-backend*) ,@,args-var) 75 (setq *x862-tos-reg* nil))))) 74 76 (macrolet ((<- (,retvreg-var) 75 77 `(x862-copy-register ,',segvar ,',vreg-var ,,retvreg-var)) … … 461 463 (1+ *x862-target-fixnum-shift*)))) 462 464 (*x862-target-dnode-size* (* 2 *x862-target-lcell-size*)) 465 (*x862-tos-reg* nil) 463 466 (*x862-all-lcells* ()) 464 467 (*x862-top-vstack-lcell* nil) … … 1239 1242 (defun x862-stack-to-register (seg memspec reg) 1240 1243 (with-x86-local-vinsn-macros (seg) 1241 (! vframe-load reg (memspec-frame-address-offset memspec) *x862-vstack*))) 1244 (let* ((offset (memspec-frame-address-offset memspec))) 1245 (if (and *x862-tos-reg* 1246 (= offset (- *x862-vstack* *x862-target-node-size*))) 1247 (x862-copy-register seg reg *x862-tos-reg*) 1248 (! vframe-load reg offset *x862-vstack*))))) 1242 1249 1243 1250 (defun x862-lcell-to-register (seg lcell reg) … … 3290 3297 (setq cr-bit (x862-reverse-cr-bit cr-bit))) 3291 3298 (^ cr-bit true-p)) 3292 (if (and (eq cr-bit x86::x86-e-bits)3299 (if (and ;(eq cr-bit x86::x86-e-bits) 3293 3300 (or js32 is32)) 3294 (x862-test-reg-%izerop 3301 (progn 3302 (unless (or js32 (eq cr-bit x86::x86-e-bits)) 3303 (setq cr-bit (x862-reverse-cr-bit cr-bit))) 3304 (x862-test-reg-%izerop 3295 3305 seg 3296 3306 vreg … … 3302 3312 cr-bit 3303 3313 true-p 3304 (or js32 is32)) 3314 (or js32 is32))) 3305 3315 (multiple-value-bind (ireg jreg) (x862-two-untargeted-reg-forms seg i x8664::arg_y j x8664::arg_z) 3306 3316 (x862-compare-registers seg vreg xfer ireg jreg cr-bit true-p))))))))) … … 3495 3505 (prog1 3496 3506 (! vpush-register src) 3507 (setq *x862-tos-reg* src) 3497 3508 (x862-new-vstack-lcell (or why :node) *x862-target-lcell-size* (or attr 0) info) 3498 3509 (x862-adjust-vstack *x862-target-node-size*)))) … … 7008 7019 (with-x86-local-vinsn-macros (seg vreg xfer) 7009 7020 (multiple-value-bind (cr-bit true-p) (acode-condition-to-x86-cr-bit cc) 7010 (! mask-base-char x8664::imm0 (x862-one-untargeted-reg-form seg form x8664::arg_z)) 7011 (x862-test-reg-%izerop seg vreg xfer x8664::imm0 cr-bit true-p 7012 (target-arch-case 7013 7014 (:x8664 x8664::subtag-character)))))) 7021 (! compare-u8-constant (x862-one-untargeted-reg-form seg form x8664::arg_z) 7022 (target-arch-case 7023 (:x8664 x8664::subtag-character))) 7024 (setq cr-bit (x862-cr-bit-for-unsigned-comparison cr-bit)) 7025 (regspec-crf-gpr-case 7026 (vreg dest) 7027 (^ cr-bit true-p) 7028 (progn 7029 (ensuring-node-target (target dest) 7030 (if (not true-p) 7031 (setq cr-bit (logxor 1 cr-bit))) 7032 (! cr-bit->boolean target cr-bit)) 7033 (^)))))) 7034 7015 7035 7016 7036
Note:
See TracChangeset
for help on using the changeset viewer.
