Changeset 14302
- Timestamp:
- Sep 25, 2010, 2:49:11 PM (14 years ago)
- File:
-
- 1 edited
-
trunk/source/compiler/ARM/arm2.lisp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/compiler/ARM/arm2.lisp
r14200 r14302 2805 2805 (aconst (and (not atriv) (or (arm-side-effect-free-form-p aform) 2806 2806 (if avar (arm2-var-not-set-by-form-p avar bform))))) 2807 (apushed (not (or atriv aconst))))2807 (apushed)) 2808 2808 (progn 2809 2809 (unless aconst … … 2813 2813 (arm2-one-targeted-reg-form seg bform breg) 2814 2814 (if aconst 2815 (arm2-one-targeted-reg-form seg aform areg) 2815 (let* ((*available-backend-imm-temps* *available-backend-imm-temps*) 2816 (*available-backend-node-temps* *available-backend-node-temps*) 2817 (*available-backend-fp-temps* *available-backend-fp-temps*) 2818 (bclass (hard-regspec-class breg)) 2819 (bregval (hard-regspec-value breg))) 2820 (if (eq bclass hard-reg-class-fpr) 2821 (use-fp-temp bregval) 2822 (if (eq bclass hard-reg-class-gpr) 2823 (if (eq (get-regspec-mode breg) hard-reg-class-gpr-mode-node) 2824 (use-node-temp bregval) 2825 (use-imm-temp bregval)))) 2826 (arm2-one-targeted-reg-form seg aform areg)) 2816 2827 (if apushed 2817 2828 (arm2-elide-pushes seg apushed (arm2-pop-register seg areg))))) … … 8324 8335 (if (and naturalx naturaly) 8325 8336 (arm2-absolute-natural seg vreg xfer (logior naturalx naturaly)) 8326 (let* ((u32x (nx-u32-constant-p x)) 8327 (u32y (nx-u32-constant-p y)) 8328 (constant (or u32x u32y))) 8337 (let* ((constant (let* ((c (or naturalx naturaly))) 8338 (when c 8339 (if (arm::encode-arm-immediate c) 8340 c))))) 8329 8341 (if (not constant) 8330 8342 (with-imm-target () (xreg :natural) … … 8333 8345 (! %natural-logior xreg xreg yreg)) 8334 8346 (<- xreg)) 8335 (let* ((other (if u32x y x)) 8336 (high (ldb (byte 16 16) constant)) 8337 (low (ldb (byte 16 0) constant))) 8347 (let* ((other (if naturalx y x))) 8338 8348 (with-imm-target () (other-reg :natural) 8339 8349 (arm2-one-targeted-reg-form seg other other-reg) 8340 (! %natural-logior-c other-reg other-reg high low)8350 (! logior-immediate other-reg other-reg (logand constant #xffffffff)) 8341 8351 (<- other-reg)))) 8342 8352 (^)))))) … … 8351 8361 (if (and naturalx naturaly) 8352 8362 (arm2-absolute-natural seg vreg xfer (logxor naturalx naturaly)) 8353 (let* ((u32x (nx-u32-constant-p x)) 8354 (u32y (nx-u32-constant-p y)) 8355 (constant (or u32x u32y))) 8363 (let* ((constant (let* ((c (or naturalx naturaly))) 8364 (when c 8365 (if (arm::encode-arm-immediate c) 8366 c))))) 8356 8367 (if (not constant) 8357 8368 (with-imm-target () (xreg :natural) … … 8360 8371 (! %natural-logxor xreg xreg yreg)) 8361 8372 (<- xreg)) 8362 (let* ((other (if u32x y x)) 8363 (high (ldb (byte 16 16) constant)) 8364 (low (ldb (byte 16 0) constant))) 8373 (let* ((other (if naturalx y x))) 8365 8374 (with-imm-target () (other-reg :natural) 8366 8375 (arm2-one-targeted-reg-form seg other other-reg) 8367 (! %natural-logxor-c other-reg other-reg high low)8376 (! logxor-immediate other-reg other-reg (logand constant #xffffffff)) 8368 8377 (<- other-reg)))) 8369 8378 (^)))))) … … 8378 8387 (if (and naturalx naturaly) 8379 8388 (arm2-absolute-natural seg vreg xfer (logand naturalx naturaly)) 8380 (let* ((u32x (nx-u32-constant-p x)) 8381 (u32y (nx-u32-constant-p y)) 8382 (constant (let* ((c (or u32x u32y))) 8383 (if (arm::encode-arm-immediate c) 8384 c 8385 (if (arm::encode-arm-immediate (lognot c)) 8386 (lognot c)))))) 8389 (let* ((constant (let* ((c (or naturalx naturaly))) 8390 (when c 8391 (if (or (arm::encode-arm-immediate c) 8392 (arm::encode-arm-immediate (lognot c))) 8393 c))))) 8387 8394 (if (not constant) 8388 8395 (with-imm-target () (xreg :natural) … … 8391 8398 (! %natural-logand xreg xreg yreg)) 8392 8399 (<- xreg)) 8393 (let* ((other (if u32x y x)))8400 (let* ((other (if naturalx y x))) 8394 8401 (with-imm-target () (other-reg :natural) 8395 8402 (arm2-one-targeted-reg-form seg other other-reg)
Note:
See TracChangeset
for help on using the changeset viewer.
