Changeset 15058
- Timestamp:
- Nov 5, 2011, 1:31:10 AM (13 years ago)
- File:
-
- 1 edited
-
trunk/source/compiler/ARM/arm2.lisp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/ARM/arm2.lisp
r15037 r15058 4693 4693 4694 4694 (defun arm2-branch (seg xfer crf &optional cr-bit true-p) 4695 (declare (notinline arm2-branch)) 4695 4696 (let* ((*arm2-vstack* *arm2-vstack*) 4696 4697 (*arm2-top-vstack-lcell* *arm2-top-vstack-lcell*)) … … 4703 4704 (arm2-set-nargs seg 1))) 4704 4705 (if (neq 0 xfer) 4705 (if (eq xfer $backend-return) ;; xfer : RETURN ==> popj4706 (if (eq xfer $backend-return);; xfer : RETURN ==> popj 4706 4707 (arm2-do-return seg) 4707 4708 (if (not (arm2-cd-compound-p xfer)) 4708 (-> xfer) ;; xfer : label# ==> BRA label#4709 (-> xfer);; xfer : label# ==> BRA label# 4709 4710 ;; cd is compound : (<true> / <false>) 4710 4711 (let* ((truebranch (arm2-cd-true xfer)) … … 4721 4722 (if (and tn0 tnret nn0 nnret) 4722 4723 (progn 4723 (! cbranch-true tlabel crf cr-bit ) ;; (label# / label#)4724 (-> nbranch)) )4724 (! cbranch-true tlabel crf cr-bit );; (label# / label#) 4725 (-> nbranch)) 4725 4726 (if (and nnret tnret) 4726 4727 (if nn0 … … 4733 4734 (! cbranch-false auxl crf cr-bit)) 4734 4735 (arm2-do-return seg) 4735 (@ aux-label)))))))))) 4736 (@ aux-label))))))))))) 4736 4737 4737 4738 (defun arm2-cd-merge (cd label) … … 6094 6095 (arm2-two-targeted-reg-forms seg form1 ($ arm::arg_y) form2 ($ arm::arg_z))) 6095 6096 (let* ((out-of-line (backend-get-next-label)) 6096 (done (backend-get-next-label))) 6097 (done (backend-get-next-label)) 6098 (continue (backend-get-next-label))) 6097 6099 (if otherform 6098 6100 (unless (acode-fixnum-form-p otherform) … … 6104 6106 (! branch-unless-both-args-fixnums ($ arm::arg_y) ($ arm::arg_z) (aref *backend-labels* out-of-line))))) 6105 6107 (with-crf-target () crf 6106 (if otherform 6107 (! compare-immediate crf ($ arm::arg_z) 0) 6108 (! compare crf ($ arm::arg_y) ($ arm::arg_z))) 6109 (! cond->boolean ($ arm::arg_z) (if true-p cr-bit (logxor cr-bit 1)))) 6110 (-> done) 6108 (if otherform 6109 (! compare-immediate crf ($ arm::arg_z) 0) 6110 (! compare crf ($ arm::arg_y) ($ arm::arg_z))) 6111 (if (and vreg (eql (hard-regspec-class vreg) hard-reg-class-crf)) 6112 (arm2-branch seg (arm2-cd-merge xfer continue) crf cr-bit true-p) 6113 (progn 6114 (! cond->boolean ($ arm::arg_z) (if true-p cr-bit (logxor cr-bit 1))) 6115 (-> done)))) 6111 6116 (@ out-of-line) 6112 6117 (if otherform … … 6117 6122 (@ done) 6118 6123 (<- ($ arm::arg_z)) 6119 (^)))))) 6124 (^) 6125 (@ continue)))))) 6120 6126 6121 6127 (defarm2 arm2-%word-to-int %word-to-int (seg vreg xfer form)
Note:
See TracChangeset
for help on using the changeset viewer.
