Changeset 6171
 Timestamp:
 Apr 8, 2007, 2:48:25 AM (13 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/ccl/compiler/PPC/ppc2.lisp
r6000 r6171 7869 7869 (setq restloc (%i+ restloc *ppc2targetnodesize*)))) 7870 7870 (ppc2setnargs seg (length restarg)) 7871 (ppc2setvstack restloc) 7871 7872 (if (%ilogbitp $vbitdynamicextent (nxvarbits rest)) 7872 7873 (progn … … 7874 7875 (ppc2openundo $undostkblk)) 7875 7876 (! list)) 7876 (ppc2vpushregister seg ppc::arg_z) 7877 (ppc2setvstack (%i+ restloc *ppc2targetnodesize*))) 7877 (ppc2vpushregister seg ppc::arg_z)) 7878 7878 (when rest (ppc2bindvar seg rest restloc)) 7879 7879 (destructuringbind (vars inits) auxen … … 8232 8232 (setq returnregisters t) 8233 8233 (ppc2pushregister seg (ppc2oneuntargetedregform seg valform ppc::arg_z))) 8234 ((:signeddoubleword :unsigneddoubleword) 8234 ((:signeddoubleword :unsigneddoubleword :hybridintfloat :hybridfloatfloat :hybridfloatint) 8235 8235 8236 (ppc2onetargetedregform seg valform ($ ppc::arg_z)) 8236 8237 (if (eq spec :signeddoubleword) … … 8242 8243 (incf nextarg) 8243 8244 (! setcarg ($ ppc::imm1) nextarg)) 8244 (:ppc64))) 8245 (:ppc64 8246 (case spec 8247 (:hybridintfloat (push (cons :singlefloat nextarg) fploads)) 8248 (:hybridfloatint (push (cons :singlefloathigh nextarg) fploads)) 8249 (:hybridfloatfloat 8250 (push (cons :singlefloathigh nextarg) fploads) 8251 (push (cons :singlefloat nextarg) fploads)))))) 8245 8252 (:doublefloat 8246 8253 (let* ((df ($ ppc::fp1 :class :fpr :mode :doublefloat))) … … 8295 8302 (if (eq size :doublefloat) 8296 8303 (! reloaddoublecarg fpreg from) 8297 (! reloadsinglecarg fpreg from)))) 8304 (if (eq size :singlefloathigh) 8305 (! reloadsinglecarghigh fpreg from) 8306 (! reloadsinglecarg fpreg from))))) 8298 8307 returnregisters))) 8299 8308 … … 8943 8952 (< (setregspecmode dreg hardregclassfprmodesingle)) 8944 8953 (^)))) 8945 8954 8955 (defppc2 ppc2%doublefloat %doublefloat (seg vreg xfer arg) 8956 (let* ((real (or (acodefixnumformp arg) 8957 (let* ((form (acodeunwrappedform arg))) 8958 (if (and (acodep form) 8959 (eq (acodeoperator form) 8960 (%nx1operator immediate)) 8961 (typep (cadr form) 'real)) 8962 (cadr form)))))) 8963 (if real 8964 (ppc2immediate seg vreg xfer (float real 0.0d0)) 8965 (if (ppc2formtypep arg 'singlefloat) 8966 (ppc2useoperator (%nx1operator %singletodouble) 8967 seg 8968 vreg 8969 xfer 8970 arg) 8971 (if (ppc2formtypep arg 'fixnum) 8972 (ppc2useoperator (%nx1operator %fixnumtodouble) 8973 seg 8974 vreg 8975 xfer 8976 arg) 8977 (ppc2useoperator (%nx1operator call) 8978 seg 8979 vreg 8980 xfer 8981 (makeacode (%nx1operator immediate) 8982 '%doublefloat) 8983 (list nil (list arg)))))))) 8984 8985 (defppc2 ppc2%singlefloat %singlefloat (seg vreg xfer arg) 8986 (let* ((real (or (acodefixnumformp arg) 8987 (let* ((form (acodeunwrappedform arg))) 8988 (if (and (acodep form) 8989 (eq (acodeoperator form) 8990 (%nx1operator immediate)) 8991 (typep (cadr form) 'real)) 8992 (cadr form)))))) 8993 (if real 8994 (ppc2immediate seg vreg xfer (float real 0.0f0)) 8995 (if (ppc2formtypep arg 'doublefloat) 8996 (ppc2useoperator (%nx1operator %doubletosingle) 8997 seg 8998 vreg 8999 xfer 9000 arg) 9001 (if (ppc2formtypep arg 'fixnum) 9002 (ppc2useoperator (%nx1operator %fixnumtosingle) 9003 seg 9004 vreg 9005 xfer 9006 arg) 9007 (ppc2useoperator (%nx1operator call) 9008 seg 9009 vreg 9010 xfer 9011 (makeacode (%nx1operator immediate) 9012 '%shortfloat) 9013 (list nil (list arg)))))))) 8946 9014 8947 9015 ;
Note: See TracChangeset
for help on using the changeset viewer.