Changeset 374
- Timestamp:
- Jan 24, 2004, 3:30:01 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/compiler/PPC/PPC32/ppc32-vinsns.lisp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/compiler/PPC/PPC32/ppc32-vinsns.lisp
r364 r374 52 52 53 53 (define-ppc32-vinsn scale-64bit-misc-index (((dest :u32)) 54 ((idx :imm) ; A fixnum55 )56 ())54 ((idx :imm) ; A fixnum 55 ) 56 ()) 57 57 (slwi dest idx 1) 58 58 (addi dest dest ppc32::misc-dfloat-offset)) 59 59 60 60 (define-ppc32-vinsn scale-1bit-misc-index (((word-index :u32) 61 (bitnum :u8)) ; (unsigned-byte 5)62 ((idx :imm) ; A fixnum63 )64 )61 (bitnum :u8)) ; (unsigned-byte 5) 62 ((idx :imm) ; A fixnum 63 ) 64 ) 65 65 ; Logically, we want to: 66 66 ; 1) Unbox the index by shifting it right 2 bits. … … 113 113 114 114 (define-ppc32-vinsn misc-ref-single-float (((dest :single-float)) 115 ((v :lisp)116 (scaled-idx :u32))117 ())115 ((v :lisp) 116 (scaled-idx :u32)) 117 ()) 118 118 (lfsx dest v scaled-idx)) 119 119 120 120 (define-ppc32-vinsn misc-ref-c-single-float (((dest :single-float)) 121 ((v :lisp)122 (idx :u32const))123 ())121 ((v :lisp) 122 (idx :u32const)) 123 ()) 124 124 (lfs dest (:apply + ppc32::misc-data-offset (:apply ash idx 2)) v)) 125 125 126 126 (define-ppc32-vinsn misc-ref-double-float (((dest :double-float)) 127 ((v :lisp)128 (scaled-idx :u32))129 ())127 ((v :lisp) 128 (scaled-idx :u32)) 129 ()) 130 130 (lfdx dest v scaled-idx)) 131 131 132 132 133 133 (define-ppc32-vinsn misc-ref-c-double-float (((dest :double-float)) 134 ((v :lisp)135 (idx :u32const))136 ())134 ((v :lisp) 135 (idx :u32const)) 136 ()) 137 137 (lfd dest (:apply + ppc32::misc-dfloat-offset (:apply ash idx 3)) v)) 138 138 139 139 (define-ppc32-vinsn misc-set-c-double-float (((val :double-float)) 140 ((v :lisp)141 (idx :u32const)))140 ((v :lisp) 141 (idx :u32const))) 142 142 (stfd val (:apply + ppc32::misc-dfloat-offset (:apply ash idx 3)) v)) 143 143 144 144 (define-ppc32-vinsn misc-set-double-float (() 145 ((val :double-float)146 (v :lisp)147 (scaled-idx :u32)))145 ((val :double-float) 146 (v :lisp) 147 (scaled-idx :u32))) 148 148 (stfdx val v scaled-idx)) 149 149 150 150 (define-ppc32-vinsn misc-set-c-single-float (((val :single-float)) 151 ((v :lisp)152 (idx :u32const)))151 ((v :lisp) 152 (idx :u32const))) 153 153 (stfs val (:apply + ppc32::misc-data-offset (:apply ash idx 2)) v)) 154 154 155 155 (define-ppc32-vinsn misc-set-single-float (() 156 ((val :single-float)157 (v :lisp)158 (scaled-idx :u32)))156 ((val :single-float) 157 (v :lisp) 158 (scaled-idx :u32))) 159 159 (stfsx val v scaled-idx)) 160 160 … … 480 480 481 481 (define-ppc32-vinsn mem-ref-c-double-float (((dest :double-float)) 482 ((src :address)483 (index :s16const)))482 ((src :address) 483 (index :s16const))) 484 484 (lfd dest index src)) 485 485 486 486 (define-ppc32-vinsn mem-ref-double-float (((dest :double-float)) 487 ((src :address)488 (index :s32)))487 ((src :address) 488 (index :s32))) 489 489 (lfdx dest src index)) 490 490 491 491 (define-ppc32-vinsn mem-set-c-double-float (() 492 ((val :double-float)493 (src :address)494 (index :s16const)))492 ((val :double-float) 493 (src :address) 494 (index :s16const))) 495 495 (stfd val index src)) 496 496 497 497 (define-ppc32-vinsn mem-set-double-float (() 498 ((val :double-float)499 (src :address)500 (index :s32)))498 ((val :double-float) 499 (src :address) 500 (index :s32))) 501 501 (stfdx val src index)) 502 502 503 503 (define-ppc32-vinsn mem-ref-c-single-float (((dest :single-float)) 504 ((src :address)505 (index :s16const)))504 ((src :address) 505 (index :s16const))) 506 506 (lfs dest index src)) 507 507 508 508 (define-ppc32-vinsn mem-ref-single-float (((dest :single-float)) 509 ((src :address)510 (index :s32)))509 ((src :address) 510 (index :s32))) 511 511 (lfsx dest src index)) 512 512 513 513 (define-ppc32-vinsn mem-set-c-single-float (() 514 ((val :single-float)515 (src :address)516 (index :s16const)))514 ((val :single-float) 515 (src :address) 516 (index :s16const))) 517 517 (stfs val index src)) 518 518 519 519 (define-ppc32-vinsn mem-set-single-float (() 520 ((val :single-float)521 (src :address)522 (index :s32)))520 ((val :single-float) 521 (src :address) 522 (index :s32))) 523 523 (stfsx val src index)) 524 524 525 525 526 526 (define-ppc32-vinsn mem-set-c-fullword (() 527 ((val :u32)528 (src :address)529 (index :s16const)))527 ((val :u32) 528 (src :address) 529 (index :s16const))) 530 530 (stw val index src)) 531 531 532 532 (define-ppc32-vinsn mem-set-fullword (() 533 ((val :u32)534 (src :address)535 (index :s32)))533 ((val :u32) 534 (src :address) 535 (index :s32))) 536 536 (stwx val src index)) 537 537 538 538 (define-ppc32-vinsn mem-set-c-halfword (() 539 ((val :u16)540 (src :address)541 (index :s16const)))539 ((val :u16) 540 (src :address) 541 (index :s16const))) 542 542 (sth val index src)) 543 543 544 544 (define-ppc32-vinsn mem-set-halfword (() 545 ((val :u16)546 (src :address)547 (index :s32)))545 ((val :u16) 546 (src :address) 547 (index :s32))) 548 548 (sthx val src index)) 549 549 550 550 (define-ppc32-vinsn mem-set-c-byte (() 551 ((val :u16)552 (src :address)553 (index :s16const)))551 ((val :u16) 552 (src :address) 553 (index :s16const))) 554 554 (stb val index src)) 555 555 556 556 (define-ppc32-vinsn mem-set-byte (() 557 ((val :u8)558 (src :address)559 (index :s32)))557 ((val :u8) 558 (src :address) 559 (index :s32))) 560 560 (stbx val src index)) 561 561 562 562 (define-ppc32-vinsn mem-set-c-bit-0 (() 563 ((src :address)564 (byte-index :s16const)565 (mask-begin :u8const)566 (mask-end :u8const))567 ((val :u8)))563 ((src :address) 564 (byte-index :s16const) 565 (mask-begin :u8const) 566 (mask-end :u8const)) 567 ((val :u8))) 568 568 (lbz val byte-index src) 569 569 (rlwinm val val 0 mask-begin mask-end) … … 571 571 572 572 (define-ppc32-vinsn mem-set-c-bit-1 (() 573 ((src :address)574 (byte-index :s16const)575 (mask :u8const))576 ((val :u8)))573 ((src :address) 574 (byte-index :s16const) 575 (mask :u8const)) 576 ((val :u8))) 577 577 (lbz val byte-index src) 578 578 (ori val val mask) … … 580 580 581 581 (define-ppc32-vinsn mem-set-c-bit (() 582 ((src :address)583 (byte-index :s16const)584 (bit-index :u8const)585 (val :imm))586 ((byteval :u8)))582 ((src :address) 583 (byte-index :s16const) 584 (bit-index :u8const) 585 (val :imm)) 586 ((byteval :u8))) 587 587 (lbz byteval byte-index src) 588 588 (rlwimi byteval val (:apply logand 31 (:apply - 29 bit-index)) bit-index bit-index) … … 592 592 ;;; long it takes ... 593 593 (define-ppc32-vinsn mem-set-bit (() 594 ((src :address)595 (bit-index :lisp)596 (val :lisp))597 ((bit-shift :u32)598 (mask :u32)599 (byte-index :u32)600 (crf :crf)))594 ((src :address) 595 (bit-index :lisp) 596 (val :lisp)) 597 ((bit-shift :u32) 598 (mask :u32) 599 (byte-index :u32) 600 (crf :crf))) 601 601 (cmplwi crf val (ash 1 ppc32::fixnumshift)) 602 602 (extrwi bit-shift bit-index 3 27) … … 620 620 621 621 (define-ppc32-vinsn extract-tag (((tag :u8)) 622 ((object :lisp))623 ())622 ((object :lisp)) 623 ()) 624 624 (clrlwi tag object (- ppc32::nbits-in-word ppc32::nlisptagbits))) 625 625 … … 1074 1074 (cmpwi crf tag ppc32::tag-fixnum))) 1075 1075 1076 (define-ppc32-vinsn trap-unless-tag= (() 1077 ((object :lisp) 1078 (tagval :u16const)) 1079 ((tag :u8))) 1076 1077 1078 (define-ppc32-vinsn trap-unless-fixnum (() 1079 ((object :lisp)) 1080 ((tag :u8))) 1080 1081 (clrlwi tag object (- ppc32::nbits-in-word ppc32::nlisptagbits)) 1081 (twnei tag tagval)) 1082 (twnei tag ppc32::tag-fixnum)) 1083 1084 (define-ppc32-vinsn trap-unless-list (() 1085 ((object :lisp)) 1086 ((tag :u8))) 1087 (clrlwi tag object (- ppc32::nbits-in-word ppc32::nlisptagbits)) 1088 (twnei tag ppc32::tag-list)) 1089 1090 (define-ppc32-vinsn trap-unless-uvector (() 1091 ((object :lisp)) 1092 ((tag :u8))) 1093 (clrlwi tag object (- ppc32::nbits-in-word ppc32::nlisptagbits)) 1094 (twnei tag ppc32::tag-misc)) 1082 1095 1083 1096 (define-ppc32-vinsn trap-unless-fulltag= (() … … 1577 1590 1578 1591 (define-ppc32-vinsn vcell-ref (((dest :lisp)) 1579 ((vcell :lisp)))1592 ((vcell :lisp))) 1580 1593 (lwz dest ppc32::misc-data-offset vcell)) 1581 1594 … … 2094 2107 ; Wouldn't kill us to do either/both out-of-line, but need to make visible to 2095 2108 ; compiler so unnecessary heap-consing can be elided. 2096 (define-ppc32-vinsn single-> heap(((result :lisp)) ; tagged as a single-float2097 ((fpreg :single-float))2098 ((header-temp :u32)))2109 (define-ppc32-vinsn single->node (((result :lisp)) ; tagged as a single-float 2110 ((fpreg :single-float)) 2111 ((header-temp :u32))) 2099 2112 (li header-temp (arch::make-vheader ppc32::single-float.element-count ppc32::subtag-single-float)) 2100 2113 (la ppc::allocptr (- ppc32::fulltag-misc ppc32::single-float.size) ppc::allocptr)
Note:
See TracChangeset
for help on using the changeset viewer.
