Changeset 5350
- Timestamp:
- Oct 14, 2006, 6:41:13 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/compiler/PPC/ppc2.lisp (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/compiler/PPC/ppc2.lisp
r5218 r5350 5405 5405 (with-node-temps (v) (temp) 5406 5406 (! %slot-ref temp v i) 5407 ( <-temp))))5407 (ppc2-copy-register seg target temp)))) 5408 5408 (^)) 5409 5409 … … 5615 5615 5616 5616 (defppc2 ppc2-struct-ref struct-ref (seg vreg xfer struct offset) 5617 (ppc2-misc-node-ref seg vreg xfer struct offset ( nx-lookup-target-uvector-subtag :struct)))5617 (ppc2-misc-node-ref seg vreg xfer struct offset (unless *ppc2-reckless* (nx-lookup-target-uvector-subtag :struct)))) 5618 5618 5619 5619 (defppc2 ppc2-struct-set struct-set (seg vreg xfer struct offset value) 5620 (ppc2-misc-node-set seg vreg xfer struct offset value ( nx-lookup-target-uvector-subtag :struct)))5620 (ppc2-misc-node-set seg vreg xfer struct offset value (unless *ppc2-reckless* (nx-lookup-target-uvector-subtag :struct)))) 5621 5621 5622 5622 (defppc2 ppc2-istruct-typep istruct-typep (seg vreg xfer cc form type) … … 5806 5806 (ppc2-compare seg vreg xfer form1 form2 cr-bit true-p))) 5807 5807 5808 5809 5808 (defppc2 ppc2-numcmp numcmp (seg vreg xfer cc form1 form2) 5809 (let* ((name (ecase (cadr cc) 5810 (:eq '=-2) 5811 (:ne '/=-2) 5812 (:lt '<-2) 5813 (:le '<=-2) 5814 (:gt '>-2) 5815 (:ge '>=-2)))) 5816 (if (or (ppc2-explicit-non-fixnum-type-p form1) 5817 (ppc2-explicit-non-fixnum-type-p form2)) 5818 (ppc2-binary-builtin seg vreg xfer name form1 form2) 5819 (ppc2-inline-numcmp seg vreg xfer cc name form1 form2)))) 5820 5821 (defun ppc2-inline-numcmp (seg vreg xfer cc name form1 form2) 5822 (with-ppc-local-vinsn-macros (seg vreg xfer) 5823 (multiple-value-bind (cr-bit true-p) (acode-condition-to-ppc-cr-bit cc) 5824 (let* ((otherform (and (eql cr-bit ppc::ppc-eq-bit) 5825 (if (eql (acode-fixnum-form-p form2) 0) 5826 form1 5827 (if (eql (acode-fixnum-form-p form1) 0) 5828 form2))))) 5829 (if otherform 5830 (ppc2-one-targeted-reg-form seg otherform ($ ppc::arg_z)) 5831 (ppc2-two-targeted-reg-forms seg form1 ($ ppc::arg_y) form2 ($ ppc::arg_z))) 5832 (let* ((out-of-line (backend-get-next-label)) 5833 (done (backend-get-next-label))) 5834 (if otherform 5835 (unless (acode-fixnum-form-p otherform) 5836 (! branch-unless-arg-fixnum ($ ppc::arg_z) (aref *backend-labels* out-of-line))) 5837 (if (acode-fixnum-form-p form1) 5838 (! branch-unless-arg-fixnum ($ ppc::arg_z) (aref *backend-labels* out-of-line)) 5839 (if (acode-fixnum-form-p form2) 5840 (! branch-unless-arg-fixnum ($ ppc::arg_y) (aref *backend-labels* out-of-line)) 5841 (! branch-unless-both-args-fixnums ($ ppc::arg_y) ($ ppc::arg_z) (aref *backend-labels* out-of-line))))) 5842 (with-imm-target () (b31-reg :natural) 5843 (if otherform 5844 (if true-p 5845 (! eq0->bit31 b31-reg ($ ppc::arg_z)) 5846 (! ne0->bit31 b31-reg ($ ppc::arg_z))) 5847 (ecase cr-bit 5848 (#. ppc::ppc-eq-bit 5849 (if true-p 5850 (! eq->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z)) 5851 (! ne->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z)))) 5852 (#. ppc::ppc-lt-bit 5853 (if true-p 5854 (! lt->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z)) 5855 (! ge->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z)))) 5856 (#. ppc::ppc-gt-bit 5857 (if true-p 5858 (! gt->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z)) 5859 (! le->bit31 b31-reg ($ ppc::arg_y) ($ ppc::arg_z)))))) 5860 (! lowbit->truth ($ ppc::arg_z) b31-reg) 5861 (-> done) 5862 (@ out-of-line) 5863 (if otherform 5864 (ppc2-lri seg ($ ppc::arg_y) 0)) 5865 (let* ((index (arch::builtin-function-name-offset name)) 5866 (idx-subprim (ppc2-builtin-index-subprim index))) 5867 (! call-subprim-2 ($ ppc::arg_z) idx-subprim ($ ppc::arg_y) ($ ppc::arg_z))) 5868 (@ done) 5869 (<- ($ ppc::arg_z)) 5870 (^))))))) 5871 5810 5872 (defppc2 ppc2-%word-to-int %word-to-int (seg vreg xfer form) 5811 5873 (if (null vreg) … … 6159 6221 (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-plus) ($ ppc::arg_y) ($ ppc::arg_z)) 6160 6222 (@ done) 6161 (ppc2-copy-register seg target ($ ppc::arg_z)) 6162 (^))))) 6223 (ppc2-copy-register seg target ($ ppc::arg_z))) 6224 (^)))) 6225 6226 (defun ppc2-inline-sub2 (seg vreg xfer form1 form2) 6227 (with-ppc-local-vinsn-macros (seg vreg xfer) 6228 (ppc2-two-targeted-reg-forms seg form1 ($ ppc::arg_y) form2 ($ ppc::arg_z)) 6229 (let* ((out-of-line (backend-get-next-label)) 6230 (done (backend-get-next-label))) 6231 (ensuring-node-target (target vreg) 6232 (if (acode-fixnum-form-p form1) 6233 (! branch-unless-arg-fixnum ($ ppc::arg_z) (aref *backend-labels* out-of-line)) 6234 (if (acode-fixnum-form-p form2) 6235 (! branch-unless-arg-fixnum ($ ppc::arg_y) (aref *backend-labels* out-of-line)) 6236 (! branch-unless-both-args-fixnums ($ ppc::arg_y) ($ ppc::arg_z) (aref *backend-labels* out-of-line)))) 6237 (if *ppc2-open-code-inline* 6238 (! fixnum-sub-overflow-inline-skip ($ ppc::arg_z) ($ ppc::arg_y) ($ ppc::arg_z) (aref *backend-labels* done)) 6239 (progn 6240 (! fixnum-sub-overflow-ool ($ ppc::arg_y) ($ ppc::arg_z)) 6241 (-> done))) 6242 (@ out-of-line) 6243 (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-minus) ($ ppc::arg_y) ($ ppc::arg_z)) 6244 (@ done) 6245 (ppc2-copy-register seg target ($ ppc::arg_z))) 6246 (^)))) 6163 6247 6164 6248 ;;; Return T if form is declared to be something that couldn't be a fixnum. … … 6233 6317 form2 6234 6318 t) 6235 (ppc2-binary-builtin seg vreg xfer '--2 form1 form2)))))) 6319 (if (or (ppc2-explicit-non-fixnum-type-p form1) 6320 (ppc2-explicit-non-fixnum-type-p form2)) 6321 (ppc2-binary-builtin seg vreg xfer '--2 form1 form2) 6322 (ppc2-inline-sub2 seg vreg xfer form1 form2))))))) 6236 6323 6237 6324 (defppc2 ppc2-mul2 mul2 (seg vreg xfer form1 form2) … … 6319 6406 (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-logior) ($ ppc::arg_y) ($ ppc::arg_z)) 6320 6407 (@ done) 6321 (ppc2-copy-register seg target ($ ppc::arg_z)) 6322 (^)))))))6408 (ppc2-copy-register seg target ($ ppc::arg_z))) 6409 (^)))))) 6323 6410 6324 6411 (defppc2 ppc2-logior2 logior2 (seg vreg xfer form1 form2) … … 6376 6463 (! call-subprim-2 ($ ppc::arg_z) (subprim-name->offset '.SPbuiltin-logand) ($ ppc::arg_y) ($ ppc::arg_z)) 6377 6464 (@ done) 6378 (ppc2-copy-register seg target ($ ppc::arg_z)) 6379 (^)))))))6465 (ppc2-copy-register seg target ($ ppc::arg_z))) 6466 (^)))))) 6380 6467 6381 6468 (defppc2 ppc2-logand2 logand2 (seg vreg xfer form1 form2) … … 6706 6793 (! ,vinsn result r1 r2) 6707 6794 (ensuring-node-target (target vreg) 6708 ( <-result))))6795 (ppc2-copy-register seg target result)))) 6709 6796 (^))))))) 6710 6797 … … 6723 6810 (! ,vinsn result r1 r2) 6724 6811 (ensuring-node-target (target vreg) 6725 ( <-result))))6812 (ppc2-copy-register seg target result)))) 6726 6813 (^))))))) 6727 6814 ) … … 7950 8037 (target vreg) 7951 8038 (! makeu64) 7952 ( <- ($ ppc::arg_z))))8039 (ppc2-copy-register seg target ppc::arg_z))) 7953 8040 ((eq resultspec :signed-doubleword) 7954 8041 (ensuring-node-target 7955 8042 (target vreg) 7956 8043 (! makes64) 7957 ( <- ($ ppc::arg_z))))8044 (ppc2-copy-register seg target ppc::arg_z))) 7958 8045 (t 7959 8046 (<- (make-wired-lreg ppc::imm0 … … 8179 8266 (ensuring-node-target (target vreg) 8180 8267 (! makeu64) 8181 ( <- ($ ppc::arg_z))))8268 (ppc2-copy-register seg target ppc::arg_z))) 8182 8269 ((eq resultspec :signed-doubleword) 8183 8270 (ensuring-node-target (target vreg) 8184 8271 (! makes64) 8185 ( <- ($ ppc::arg_z))))8272 (ppc2-copy-register seg target ppc::arg_z))) 8186 8273 (t 8187 8274 (<- (make-wired-lreg ppc::imm0 … … 8238 8325 (target vreg) 8239 8326 (! makeu64) 8240 ( <-ppc::arg_z)))8327 (ppc2-copy-register seg target ppc::arg_z))) 8241 8328 ((eq resultspec :signed-doubleword) 8242 8329 (ensuring-node-target 8243 8330 (target vreg) 8244 8331 (! makes64) 8245 ( <-ppc::arg_z)))8332 (ppc2-copy-register seg target ppc::arg_z))) 8246 8333 (t 8247 8334 (<- (set-regspec-mode ppc::imm0 (gpr-mode-name-value … … 8283 8370 (let* ((reg (if (eq (hard-regspec-value target) ppc::arg_z) ($ ppc::arg_y) ($ ppc::arg_z)))) 8284 8371 (ppc2-one-targeted-reg-form seg arg reg) 8285 (! eep.address target reg)) 8286 (^)))8372 (! eep.address target reg))) 8373 (^)) 8287 8374 8288 8375 (defppc2 ppc2-%natural+ %natural+ (seg vreg xfer x y)
Note:
See TracChangeset
for help on using the changeset viewer.
