Changeset 14036
- Timestamp:
- Jul 24, 2010, 11:35:09 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/arm/compiler/ARM/arm2.lisp
r14015 r14036 120 120 (defvar *arm2-woi* nil) 121 121 (defvar *arm2-open-code-inline* nil) 122 (defvar *arm2-optimize-for-space* nil) 122 123 (defvar *arm2-register-restore-count* 0) 123 124 (defvar *arm2-register-restore-ea* nil) … … 360 361 (*next-lcell-id* -1) 361 362 (*arm2-open-code-inline* nil) 363 (*arm2-optimize-for-space* nil) 362 364 (*arm2-register-restore-count* nil) 363 365 (*arm2-compiler-register-save-label* nil) … … 1154 1156 1155 1157 1156 1158 (defun arm2-register-for-frame-offset (offset &optional suggested) 1159 (let* ((mask *arm2-gpr-locations-valid-mask*) 1160 (info *arm2-gpr-locations*)) 1161 (if (and suggested 1162 (logbitp suggested mask) 1163 (memq offset (svref info suggested))) 1164 suggested 1165 (dotimes (reg 16) 1166 (when (and (logbitp reg mask) 1167 (memq offset (svref info reg))) 1168 (return reg)))))) 1169 1170 1157 1171 1158 1172 … … 1163 1177 (mask *arm2-gpr-locations-valid-mask*) 1164 1178 (info *arm2-gpr-locations*) 1165 (regno (%hard-regspec-value reg))) 1166 (unless (and (logbitp regno mask) 1167 (memq offset (svref info regno))) 1168 (let* ((other (dotimes (i 16) 1169 (when (and (logbitp i mask) 1170 (memq offset (svref info i))) 1171 (return i))))) 1172 (cond (other 1179 (regno (%hard-regspec-value reg)) 1180 (other (arm2-register-for-frame-offset offset regno))) 1181 (unless (eql regno other) 1182 (cond (other 1173 1183 (let* ((vinsn (! copy-node-gpr reg other))) 1174 1184 (setq *arm2-gpr-locations-valid-mask* … … 1182 1192 (logior mask (ash 1 regno))) 1183 1193 (setf (svref info regno) (list offset)) 1184 vinsn))))))) )1194 vinsn))))))) 1185 1195 1186 1196 (defun arm2-lcell-to-register (seg lcell reg) … … 2326 2336 ; tradeoff. 2327 2337 (with-arm-local-vinsn-macros (seg) 2338 (if *arm2-optimize-for-space* 2339 (if jump-p 2340 (! jump-known-symbol-ool) 2341 (! call-known-symbol-ool)) 2328 2342 (if jump-p 2329 2343 (! jump-known-symbol) 2330 (! call-known-symbol arm::arg_z)))) 2344 (! call-known-symbol arm::arg_z))))) 2331 2345 2332 2346 ;;; Nargs = nil -> multiple-value case. … … 4825 4839 (setf (vinsn-label-info lab) (arm::emit-lap-label header lab)))))) 4826 4840 4841 4827 4842 (defun arm2-expand-vinsns (header current sections) 4828 4843 (do-dll-nodes (v header) … … 5472 5487 (multiple-value-bind (cr-bit true-p) (acode-condition-to-arm-cr-bit cc) 5473 5488 (multiple-value-bind (r1 r2) (arm2-two-untargeted-reg-forms seg form arm::arg_y type arm::arg_z) 5474 (with-imm-target () (target :signed-natural) 5475 (! istruct-typep target r1 r2) 5476 (arm2-test-reg-%izerop seg vreg xfer target cr-bit true-p 0))))) 5489 (! istruct-type r1 r1) 5490 (arm2-compare-registers seg vreg xfer r1 r2 cr-bit true-p)))) 5477 5491 5478 5492 (pushnew (%nx1-operator lisptag) *arm2-operator-supports-u8-target*)
Note: See TracChangeset
for help on using the changeset viewer.