Changeset 14302 for trunk/source/compiler/ARM/arm2.lisp
 Timestamp:
 Sep 25, 2010, 9:49:11 PM (9 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/source/compiler/ARM/arm2.lisp
r14200 r14302 2805 2805 (aconst (and (not atriv) (or (armsideeffectfreeformp aform) 2806 2806 (if avar (arm2varnotsetbyformp avar bform))))) 2807 (apushed (not (or atriv aconst))))2807 (apushed)) 2808 2808 (progn 2809 2809 (unless aconst … … 2813 2813 (arm2onetargetedregform seg bform breg) 2814 2814 (if aconst 2815 (arm2onetargetedregform seg aform areg) 2815 (let* ((*availablebackendimmtemps* *availablebackendimmtemps*) 2816 (*availablebackendnodetemps* *availablebackendnodetemps*) 2817 (*availablebackendfptemps* *availablebackendfptemps*) 2818 (bclass (hardregspecclass breg)) 2819 (bregval (hardregspecvalue breg))) 2820 (if (eq bclass hardregclassfpr) 2821 (usefptemp bregval) 2822 (if (eq bclass hardregclassgpr) 2823 (if (eq (getregspecmode breg) hardregclassgprmodenode) 2824 (usenodetemp bregval) 2825 (useimmtemp bregval)))) 2826 (arm2onetargetedregform seg aform areg)) 2816 2827 (if apushed 2817 2828 (arm2elidepushes seg apushed (arm2popregister seg areg))))) … … 8324 8335 (if (and naturalx naturaly) 8325 8336 (arm2absolutenatural seg vreg xfer (logior naturalx naturaly)) 8326 (let* ((u32x (nxu32constantp x)) 8327 (u32y (nxu32constantp y)) 8328 (constant (or u32x u32y))) 8337 (let* ((constant (let* ((c (or naturalx naturaly))) 8338 (when c 8339 (if (arm::encodearmimmediate c) 8340 c))))) 8329 8341 (if (not constant) 8330 8342 (withimmtarget () (xreg :natural) … … 8333 8345 (! %naturallogior 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 (withimmtarget () (otherreg :natural) 8339 8349 (arm2onetargetedregform seg other otherreg) 8340 (! %naturallogiorc otherreg otherreg high low)8350 (! logiorimmediate otherreg otherreg (logand constant #xffffffff)) 8341 8351 (< otherreg)))) 8342 8352 (^)))))) … … 8351 8361 (if (and naturalx naturaly) 8352 8362 (arm2absolutenatural seg vreg xfer (logxor naturalx naturaly)) 8353 (let* ((u32x (nxu32constantp x)) 8354 (u32y (nxu32constantp y)) 8355 (constant (or u32x u32y))) 8363 (let* ((constant (let* ((c (or naturalx naturaly))) 8364 (when c 8365 (if (arm::encodearmimmediate c) 8366 c))))) 8356 8367 (if (not constant) 8357 8368 (withimmtarget () (xreg :natural) … … 8360 8371 (! %naturallogxor 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 (withimmtarget () (otherreg :natural) 8366 8375 (arm2onetargetedregform seg other otherreg) 8367 (! %naturallogxorc otherreg otherreg high low)8376 (! logxorimmediate otherreg otherreg (logand constant #xffffffff)) 8368 8377 (< otherreg)))) 8369 8378 (^)))))) … … 8378 8387 (if (and naturalx naturaly) 8379 8388 (arm2absolutenatural seg vreg xfer (logand naturalx naturaly)) 8380 (let* ((u32x (nxu32constantp x)) 8381 (u32y (nxu32constantp y)) 8382 (constant (let* ((c (or u32x u32y))) 8383 (if (arm::encodearmimmediate c) 8384 c 8385 (if (arm::encodearmimmediate (lognot c)) 8386 (lognot c)))))) 8389 (let* ((constant (let* ((c (or naturalx naturaly))) 8390 (when c 8391 (if (or (arm::encodearmimmediate c) 8392 (arm::encodearmimmediate (lognot c))) 8393 c))))) 8387 8394 (if (not constant) 8388 8395 (withimmtarget () (xreg :natural) … … 8391 8398 (! %naturallogand xreg xreg yreg)) 8392 8399 (< xreg)) 8393 (let* ((other (if u32x y x)))8400 (let* ((other (if naturalx y x))) 8394 8401 (withimmtarget () (otherreg :natural) 8395 8402 (arm2onetargetedregform seg other otherreg)
Note: See TracChangeset
for help on using the changeset viewer.