Changeset 14940
- Timestamp:
- Aug 16, 2011, 1:43:43 PM (13 years ago)
- Location:
- trunk/source/compiler
- Files:
-
- 4 edited
-
ARM/arm-vinsns.lisp (modified) (1 diff)
-
ARM/arm2.lisp (modified) (4 diffs)
-
nx1.lisp (modified) (1 diff)
-
nxenv.lisp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/ARM/arm-vinsns.lisp
r14939 r14940 4004 4004 (mvn dest temp)) 4005 4005 4006 (define-arm-vinsn fixnum-ref-c-double-float (((dest :double-float)) 4007 ((base :imm) 4008 (idx :u32const))) 4009 (fldd dest (:@ base (:$ (:apply ash idx 3))))) 4010 4011 (define-arm-vinsn fixnum-ref-double-float (((dest :double-float)) 4012 ((base :imm) 4013 (idx :imm)) 4014 ((temp :imm))) 4015 (add temp base (:lsl idx (:$ 1))) 4016 (fldd dest (:@ temp (:$ 0)))) 4017 4018 (define-arm-vinsn fixnum-set-c-double-float (() 4019 ((base :imm) 4020 (idx :u32const) 4021 (val :double-float))) 4022 (fstd val (:@ base (:$ (:apply ash idx 3))))) 4023 4024 4025 (define-arm-vinsn fixnum-set-double-float (() 4026 ((base :imm) 4027 (idx :imm) 4028 (val :double-float)) 4029 ((temp :imm))) 4030 (add temp base (:lsl idx (:$ 1))) 4031 (fstd val (:@ temp (:$ 0)))) 4032 4033 4006 4034 ;;; In case arm::*arm-opcodes* was changed since this file was compiled. 4007 4035 #+maybe-never -
trunk/source/compiler/ARM/arm2.lisp
r14939 r14940 6200 6200 (arm2-form seg vreg xfer (if (nx-null test-val) false true)) 6201 6201 (multiple-value-bind (ranges trueforms var otherwise) 6202 #+notyet (nx2-reconstruct-case testform true false) 6203 #-notyet (values nil nil nil nil) 6202 (nx2-reconstruct-case testform true false) 6204 6203 (or (arm2-generate-casejump seg vreg xfer ranges trueforms var otherwise) 6205 6204 (let* ((cstack *arm2-cstack*) … … 6934 6933 (if (= (hard-regspec-class vreg) hard-reg-class-fpr) 6935 6934 (if *arm2-float-safety* 6936 (! ,safe-vinsn vreg r1 r2) 6937 (! ,vinsn vreg r1 r2)) 6935 (with-fp-target (r1 r2) (result :double-float) 6936 (! ,safe-vinsn result r1 r2) 6937 (<- result)) 6938 (! ,vinsn vreg r1 r2)) 6938 6939 (with-fp-target (r1 r2) (result :double-float) 6939 6940 (if *arm2-float-safety* … … 6955 6956 (if (= (hard-regspec-class vreg) hard-reg-class-fpr) 6956 6957 (if *arm2-float-safety* 6957 (! ,safe-vinsn vreg r1 r2) 6958 (with-fp-target (r1 r2) (result :single-float) 6959 (! ,safe-vinsn result r1 r2) 6960 (<- result)) 6958 6961 (! ,vinsn vreg r1 r2)) 6959 6962 (with-fp-target (r1 r2) (result :single-float) … … 8837 8840 (arm2-two-targeted-reg-forms seg num ($ arm::arg_y) amt ($ arm::arg_z)) 8838 8841 (arm2-fixed-call-builtin seg vreg xfer '.SPbuiltin-ash)))) 8842 8843 (defarm2 arm2-fixnum-ref-double-float %fixnum-ref-double-float (seg vreg xfer base index) 8844 (if (null vreg) 8845 (progn 8846 (arm2-form base seg nil nil) 8847 (arm2-form index seg nil xfer)) 8848 (let* ((fix (acode-fixnum-form-p index))) 8849 (unless (typep fix '(integer 0 (128))) 8850 (setq fix nil)) 8851 (if (and (= (hard-regspec-class vreg) hard-reg-class-fpr) 8852 (= (get-regspec-mode vreg) hard-reg-class-fpr-mode-double) ) 8853 (cond (fix 8854 (! fixnum-ref-c-double-float vreg (arm2-one-untargeted-reg-form seg base arm::arg_z) fix)) 8855 (t 8856 (multiple-value-bind (rbase rindex) (arm2-two-untargeted-reg-forms seg base arm::arg_y index arm::arg_z) 8857 (! fixnum-ref-double-float vreg rbase rindex)))) 8858 (with-fp-target () (target :double-float) 8859 (cond (fix 8860 (! fixnum-ref-c-double-float target (arm2-one-untargeted-reg-form seg base arm::arg_z) fix)) 8861 (t 8862 (multiple-value-bind (rbase rindex) (arm2-two-untargeted-reg-forms seg base arm::arg_y index arm::arg_z) 8863 (! fixnum-ref-double-float target rbase rindex)))) 8864 (<- target))) 8865 (^)))) 8866 8867 (defarm2 arm2-fixnum-set-double-float %fixnum-set-double-float (seg vreg xfer base index val) 8868 (let* ((fix (acode-fixnum-form-p index))) 8869 (unless (typep fix '(integer 0 (128))) 8870 (setq fix nil)) 8871 (cond ((or (null vreg) 8872 (and (= (hard-regspec-class vreg) hard-reg-class-fpr) 8873 (= (get-regspec-mode vreg) hard-reg-class-fpr-mode-double))) 8874 (let* ((fhint (or vreg ($ arm::d0 :class :fpr :mode :double-float)))) 8875 (if fix 8876 (multiple-value-bind (rbase rval) 8877 (arm2-two-untargeted-reg-forms seg base ($ arm::arg_z) val fhint) 8878 (! fixnum-set-c-double-float rbase fix rval) 8879 (<- rval)) 8880 (multiple-value-bind (rbase rindex rval) 8881 (arm2-three-untargeted-reg-forms seg base ($ arm::arg_y) index ($ arm::arg_z) val fhint) 8882 (! fixnum-set-double-float rbase rindex rval) 8883 (<- rval))))) 8884 (t 8885 (if fix 8886 (multiple-value-bind (rbase rboxed) 8887 (arm2-two-untargeted-reg-forms seg base ($ arm::arg_y) val ($ arm::arg_z)) 8888 (with-fp-target () (rval :double-float) 8889 (arm2-copy-register seg rval rboxed) 8890 (! fixnum-set-c-double-float rbase fix rval)) 8891 (<- rboxed)) 8892 (multiple-value-bind (rbase rindex rboxed) 8893 (arm2-three-untargeted-reg-forms seg base ($ arm::arg_x) index ($ arm::arg_y) val ($ arm::arg_z)) 8894 (with-fp-target () (rval :double-float) 8895 (arm2-copy-register seg rval rboxed) 8896 (! fixnum-set-double-float rbase rindex rval)) 8897 (<- rboxed))))) 8898 (^))) -
trunk/source/compiler/nx1.lisp
r14773 r14940 222 222 (nx1-form base) 223 223 (nx1-form offset))) 224 225 (defnx1 nx1-fixnum-ref-double-float ((%fixnum-ref-double-float)) (base &optional (index 0)) 226 (make-acode (%nx1-operator typed-form) 227 'double-float 228 (make-acode (%nx1-operator %fixnum-ref-double-float) 229 (nx1-form base) 230 (nx1-form index)))) 231 232 (defnx1 nx2-fixnum-set-double-float ((%fixnum-set-double-float)) (base index-or-val &optional (val nil val-p)) 233 (unless val-p 234 (setq val index-or-val index-or-val 0)) 235 (make-acode (%nx1-operator typed-form) 236 'double-float 237 (make-acode (%nx1-operator %fixnum-set-double-float) 238 (nx1-form base) 239 (nx1-form index-or-val) 240 (nx1-form val)))) 241 224 242 225 243 (defnx1 nx1-type-unaryop ((typecode) (lisptag) (fulltag)) -
trunk/source/compiler/nxenv.lisp
r14757 r14940 207 207 (%badarg1 . 0) 208 208 (%badarg2 . 0) 209 ( newblocktag . 0)210 ( newgotag . 0)209 (%fixnum-ref-double-float . #.(logior operator-acode-subforms-mask operator-single-valued-mask)) 210 (%fixnum-set-double-float . #.(logior operator-acode-subforms-mask operator-single-valued-mask)) 211 211 (flet . 0) ; may not be necessary - for dynamic-extent, mostly 212 212 ; for dynamic-extent, forward refs, etc.
Note:
See TracChangeset
for help on using the changeset viewer.
