Changeset 393
- Timestamp:
- Jan 25, 2004, 2:07:10 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-0/PPC/ppc-float.lisp (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-0/PPC/ppc-float.lisp
r208 r393 23 23 24 24 25 ; see "Optimizing PowerPC Code" p. 15626 ; Note that the constant #x4330000080000000 is now in fp-s32conv27 (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 fixnum36 (stw ,imm temp.l tsp)37 (lfd ,freg temp tsp)38 (lwz tsp 0 tsp)39 (fsub ,freg ,freg ppc::fp-s32conv)))40 25 41 26 … … 494 479 (blr)) 495 480 481 #+ppc32-target 496 482 (defppclapfunction %double-float->short-float ((src arg_y) (result arg_z)) 497 483 (clear-fpu-exceptions) … … 500 486 (put-single-float fp1 result) 501 487 (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)) 502 497 503 498 504 499 505 500 #+ppc32-target 506 501 (defppclapfunction %int-to-sfloat ((int arg_y) (sfloat arg_z)) 507 502 (int-to-freg int fp0 imm0) … … 509 504 (blr)) 510 505 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 511 514 (defppclapfunction %int-to-dfloat ((int arg_y) (dfloat arg_z)) 512 515 (int-to-freg int fp0 imm0) 513 (stfd fp0 ppc32::double-float.value dfloat)516 (stfd fp0 target::double-float.value dfloat) 514 517 (blr)) 515 518 … … 521 524 (defppclapfunction %get-fpscr-control () 522 525 (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) 528 528 (box-fixnum arg_z imm0) 529 529 (blr)) … … 532 532 (defppclapfunction %get-fpscr-status () 533 533 (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) 539 536 (clrrwi imm0 imm0 8) 540 (srwi arg_z imm0 (- 8 ppc32::fixnumshift))537 (srwi arg_z imm0 (- 8 target::fixnumshift)) 541 538 (blr)) 542 539 543 540 ; Set the high 24 bits of the FPSCR; leave the low 8 unchanged 544 541 (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) 551 545 (mtfsf #xfc fp0) ; set status fields [0-5] 552 546 (blr)) … … 557 551 (stwu tsp -16 tsp) 558 552 (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) 562 555 (mtfsf #x03 fp0) ; set control fields [6-7] 563 556 (blr)) … … 581 574 (oris imm0 imm0 #xc000) 582 575 @ret 583 (srwi arg_z imm0 (- 8 ppc32::fixnumshift))576 (srwi arg_z imm0 (- 8 target::fixnumshift)) 584 577 (blr)) 585 578 … … 605 598 (%fp-error-from-status fp-status 606 599 (%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))) 610 607 611 608 (defun %df-check-exception-1 (operation op0 fp-status) … … 626 623 (%fp-error-from-status fp-status 627 624 (%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))) 630 629 631 630 … … 667 666 (t 'unknown))) 668 667 669 ; Don't we already have about 20 versions of this ?668 ;;; Don't we already have about 20 versions of this ? 670 669 (defppclapfunction %double-float-from-macptr! ((ptr arg_x) (byte-offset arg_y) (dest arg_z)) 671 670 (lwz imm0 ppc32::macptr.address ptr) … … 719 718 (defppclapfunction %single-float-ptr->double-float-ptr ((single arg_y) (double arg_z)) 720 719 (check-nargs 2) 721 ( lwz imm0 ppc32::macptr.addresssingle)720 (macptr-ptr imm0 single) 722 721 (lfs fp0 0 imm0) 723 ( lwz imm0 ppc32::macptr.addressdouble)722 (macptr-ptr imm0 double) 724 723 (stfd fp0 0 imm0) 725 724 (blr)) … … 729 728 (defppclapfunction %double-float-ptr->single-float-ptr ((double arg_y) (single arg_z)) 730 729 (check-nargs 2) 731 ( lwz imm0 ppc32::macptr.addressdouble)730 (macptr-ptr imm0 double) 732 731 (lfd fp0 0 imm0) 733 ( lwz imm0 ppc32::macptr.addresssingle)732 (macptr-ptr imm0 single) 734 733 (stfs fp0 0 imm0) 735 734 (blr)) … … 738 737 (defppclapfunction %set-ieee-single-float-from-double ((src arg_y) (macptr arg_z)) 739 738 (check-nargs 2) 740 ( lwz imm0 ppc32::macptr.addressmacptr)739 (macptr-ptr imm0 macptr) 741 740 (get-double-float fp1 src) 742 741 (stfs fp1 0 imm0)
Note:
See TracChangeset
for help on using the changeset viewer.
