Changeset 393


Ignore:
Timestamp:
Jan 25, 2004, 2:07:10 PM (21 years ago)
Author:
Gary Byers
Message:

Some conditionalization, mostly dealing with immediate/non-immediate
SHORT-FLOATs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-0/PPC/ppc-float.lisp

    r208 r393  
    2323 
    2424
    25 ; see "Optimizing PowerPC Code" p. 156
    26 ; Note that the constant #x4330000080000000 is now in fp-s32conv
    27   (defppclapmacro int-to-freg (int freg imm)
    28     `(let ((temp 8)
    29            (temp.h 8)
    30            (temp.l 12))
    31       (stwu tsp -16 tsp)
    32       (stw tsp 4 tsp)
    33       (stfd ppc::fp-s32conv temp tsp)
    34       (unbox-fixnum ,imm ,int)
    35       (xoris ,imm ,imm #x8000)       ; invert sign of unboxed fixnum
    36       (stw ,imm temp.l tsp)
    37       (lfd ,freg temp tsp)
    38       (lwz tsp 0 tsp)
    39       (fsub ,freg ,freg ppc::fp-s32conv)))
    4025 
    4126
     
    494479  (blr))
    495480
     481#+ppc32-target
    496482(defppclapfunction %double-float->short-float ((src arg_y) (result arg_z))
    497483  (clear-fpu-exceptions)
     
    500486  (put-single-float fp1 result)
    501487  (blr))
     488
     489#+ppc64-target
     490(defppclapfunction %double-float->short-float ((src arg_z))
     491  (clear-fpu-exceptions)
     492  (get-double-float fp0 src)
     493  (frsp fp1 fp0)
     494  (stfs fp1 ppc64::tcr.single-float-convert rcontext)
     495  (ld arg_z ppc64::tcr.single-float-convert rcontext)
     496  (blr))
    502497 
    503498
    504499
    505 
     500#+ppc32-target
    506501(defppclapfunction %int-to-sfloat ((int arg_y) (sfloat arg_z))
    507502  (int-to-freg int fp0 imm0)
     
    509504  (blr))
    510505
     506#+ppc64-target
     507(defppclapfunction %int-to-sfloat ((int arg_z))
     508  (int-to-freg int fp0 imm0)
     509  (stfs fp0 ppc64::tcr.single-float-convert rcontext)
     510  (ld arg_z ppc64::tcr.single-float-convert rcontext)
     511  (blr))
     512 
     513
    511514(defppclapfunction %int-to-dfloat ((int arg_y) (dfloat arg_z))
    512515  (int-to-freg int fp0 imm0)
    513   (stfd fp0 ppc32::double-float.value dfloat)
     516  (stfd fp0 target::double-float.value dfloat)
    514517  (blr))
    515518
     
    521524(defppclapfunction %get-fpscr-control ()
    522525  (mffs fp0)
    523   (stwu tsp -16 tsp)
    524   (stw tsp 4 tsp)
    525   (stfd fp0 8 tsp)
    526   (lbz imm0 (+ 8 7) tsp)
    527   (lwz tsp 0 tsp)
     526  (stfd fp0 target::tcr.lisp-fpscr-high rcontext)
     527  (lbz imm0 (+ target::tcr.lisp-fpscr-high 7) rcontext)
    528528  (box-fixnum arg_z imm0)
    529529  (blr))
     
    532532(defppclapfunction %get-fpscr-status ()
    533533  (mffs fp0)
    534   (stwu tsp -16 tsp)
    535   (stw tsp 4 tsp)
    536   (stfd fp0 8 tsp)
    537   (lwz imm0 12 tsp)
    538   (lwz tsp 0 tsp)
     534  (stfd fp0 target::tcr.lisp-fpscr-high rcontext)
     535  (lwz imm0 target::tcr.lisp-fpscr-low tsp)
    539536  (clrrwi imm0 imm0 8)
    540   (srwi arg_z imm0 (- 8 ppc32::fixnumshift))
     537  (srwi arg_z imm0 (- 8 target::fixnumshift))
    541538  (blr))
    542539
    543540; Set the high 24 bits of the FPSCR; leave the low 8 unchanged
    544541(defppclapfunction %set-fpscr-status ((new arg_z))
    545   (slwi imm0 new (- 8 ppc32::fixnumshift))
    546   (stwu tsp -16 tsp)
    547   (stw tsp 4 tsp)
    548   (stw imm0 12 tsp)
    549   (lfd fp0 8 tsp)
    550   (lwz tsp 0 tsp)
     542  (slwi imm0 new (- 8 target::fixnumshift))
     543  (stw imm0 target::tcr.lisp-fpscr-low rcontext)
     544  (lfd fp0 target::tcr.lisp-fpscr-high rcontext)
    551545  (mtfsf #xfc fp0)                      ; set status fields [0-5]
    552546  (blr))
     
    557551  (stwu tsp -16 tsp)
    558552  (stw tsp 4 tsp)
    559   (stw imm0 12 tsp)
    560   (lfd fp0 8 tsp)
    561   (lwz tsp 0 tsp)
     553  (stw imm0 target::tcr.lisp-fpscr-low rcontext)
     554  (lfd fp0 target::tcr.lisp-fpscr-high rcontext)
    562555  (mtfsf #x03 fp0)                      ; set control fields [6-7]
    563556  (blr))
     
    581574  (oris imm0 imm0 #xc000)
    582575  @ret
    583   (srwi arg_z imm0 (- 8 ppc32::fixnumshift))
     576  (srwi arg_z imm0 (- 8 target::fixnumshift))
    584577  (blr))
    585578 
     
    605598    (%fp-error-from-status fp-status
    606599                           (%get-fpscr-control)
    607                            operation
    608                            (%copy-short-float op0 (%make-sfloat))
    609                            (%copy-short-float op1 (%make-sfloat)))))
     600                           operation
     601                           #+ppc32-target
     602                           (%copy-short-float op0 (%make-sfloat))
     603                           #+ppc64-target op0
     604                           #+ppc32-target
     605                           (%copy-short-float op1 (%make-sfloat))
     606                           #+ppc64-target op1)))
    610607
    611608(defun %df-check-exception-1 (operation op0 fp-status)
     
    626623    (%fp-error-from-status fp-status
    627624                           (%get-fpscr-control)
    628                            operation
    629                            (%copy-short-float op0 (%make-sfloat)))))
     625                           operation
     626                           #+ppc32-target
     627                           (%copy-short-float op0 (%make-sfloat))
     628                           #+ppc64-target op0)))
    630629
    631630
     
    667666    (t 'unknown)))
    668667
    669 ; Don't we already have about 20 versions of this ?
     668;;; Don't we already have about 20 versions of this ?
    670669(defppclapfunction %double-float-from-macptr! ((ptr arg_x) (byte-offset arg_y) (dest arg_z))
    671670  (lwz imm0 ppc32::macptr.address ptr)
     
    719718(defppclapfunction %single-float-ptr->double-float-ptr ((single arg_y) (double arg_z))
    720719  (check-nargs 2)
    721   (lwz imm0 ppc32::macptr.address single)
     720  (macptr-ptr imm0 single)
    722721  (lfs fp0 0 imm0)
    723   (lwz imm0 ppc32::macptr.address double)
     722  (macptr-ptr imm0 double)
    724723  (stfd fp0 0 imm0)
    725724  (blr))
     
    729728(defppclapfunction %double-float-ptr->single-float-ptr ((double arg_y) (single arg_z))
    730729  (check-nargs 2)
    731   (lwz imm0 ppc32::macptr.address double)
     730  (macptr-ptr imm0 double)
    732731  (lfd fp0 0 imm0)
    733   (lwz imm0 ppc32::macptr.address single)
     732  (macptr-ptr imm0 single)
    734733  (stfs fp0 0 imm0)
    735734  (blr))
     
    738737(defppclapfunction %set-ieee-single-float-from-double ((src arg_y) (macptr arg_z))
    739738  (check-nargs 2)
    740   (lwz imm0 ppc32::macptr.address macptr)
     739  (macptr-ptr imm0 macptr)
    741740  (get-double-float fp1 src)
    742741  (stfs fp1 0 imm0)
Note: See TracChangeset for help on using the changeset viewer.