Changeset 521
- Timestamp:
- Feb 11, 2004, 10:59:19 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/lisp-kernel/macros.s (modified) (25 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/lisp-kernel/macros.s
r40 r521 44 44 45 45 ifdef([PPC64],[ 46 define([clrrri],[ 47 clrrdi $@ 48 ]) 49 define([clrlri],[ 50 clrldi $@ 51 ]) 52 define([clrlri_],[ 53 clrldi. $@ 54 ]) 46 55 define([ldr],[ 47 56 ld $@ … … 83 92 tdeqi $@ 84 93 ]) 94 define([trnei],[ 95 tdnei $@ 96 ]) 97 define([trgti],[ 98 tdgti $@ 99 ]) 85 100 define([srari],[ 86 101 sradi #@ … … 93 108 ]) 94 109 ],[ 110 define([clrrri],[ 111 clrrwi $@ 112 ]) 113 define([clrlri],[ 114 clrlwi $@ 115 ]) 116 define([clrlri_],[ 117 clrlwi. $@ 118 ]) 95 119 define([ldr],[ 96 120 lwz $@ … … 135 159 tweqi $@ 136 160 ]) 161 define([trnei],[ 162 twnei $@ 163 ]) 164 define([trgti],[ 165 twgti $@ 166 ]) 137 167 define([srari],[ 138 168 srawi #@ … … 151 181 define([dnode_align],[ 152 182 la $1,($3+(dnode_size-1))($2) 153 ifdef([PPC64],[ 154 clrrdi $1,$1,dnode_align_bits 155 ],[ 156 clrrwi $1,$1,dnode_align_bits 157 ])]) 183 clrrri($1,$1,dnode_align_bits) 184 ]) 158 185 159 186 define([extract_fulltag],[ 160 clrlwi $1,$2,nbits_in_word-ntagbits]) 187 clrlri($1,$2,nbits_in_word-ntagbits) 188 ]) 161 189 162 190 define([extract_lisptag],[ 163 clrlwi $1,$2,nbits_in_word-nlisptagbits]) 191 clrlri($1,$2,nbits_in_word-nlisptagbits) 192 ]) 164 193 165 194 define([extract_lisptag_],[ 166 clrlwi. $1,$2,nbits_in_word-nlisptagbits]) 167 168 define([merge_lisptag],[ 169 rlwimi $1,$2,nlisptagbits,28,29]) 170 171 define([merge_lisptag_],[ 172 rlwimi. $1,$2,nlisptagbits,28,29]) 173 174 define([extract_2_lisptags],[ 175 extract_lisptag($1,$2) 176 merge_lisptag($1,$3)]) 177 178 define([extract_2_lisptags_],[ 179 extract_lisptag($1,$2) 180 merge_lisptag_($1,$3)]) 195 clrlri_($1,$2,nbits_in_word-nlisptagbits) 196 ]) 181 197 182 198 define([extract_subtag],[ … … 187 203 188 204 define([extract_header],[ 189 l wz $1,misc_header_offset($2)])205 ldr($1,misc_header_offset($2))]) 190 206 191 207 define([extract_typecode],[ … … 210 226 211 227 define([push],[ 212 st wu $1,-4($2)])228 stru($1,-node_size($2))]) 213 229 214 230 /* Generally not a great idea. */ 215 231 define([pop],[ 216 l wz $1,0($2)217 la $2, 4($2)])232 ldr($1,0($2)) 233 la $2,node_size($2)]) 218 234 219 235 define([vpush],[ … … 223 239 pop($1,vsp)]) 224 240 225 define([memoize],[226 push($1,memo)])227 241 228 242 define([unlink],[ 229 lwz $1,0($1)]) 243 ldr($1,0($1)) 244 ]) 230 245 231 246 … … 256 271 257 272 define([getvheader],[ 258 l wz $1,vector.header($2)])273 ldr($1,vector.header($2))]) 259 274 260 275 /* Size is unboxed element count */ 261 276 define([header_size],[ 262 sr wi $1,$2,num_subtag_bits])277 srri($1,$2,num_subtag_bits)]) 263 278 264 279 /* "Length" is fixnum element count */ … … 277 292 278 293 define([ref_global],[ 279 lwz $1,lisp_globals.$2(0)]) 294 ldr($1,lisp_globals.$2(0)) 295 ]) 280 296 281 297 define([set_global],[ 282 stw $1,lisp_globals.$2(0)]) 298 str($1,lisp_globals.$2(0)) 299 ]) 283 300 284 301 define([ref_nrs_value],[ 285 lwz $1,((nrs.$2)+(symbol.vcell))(0)]) 302 ldr($1,((nrs.$2)+(symbol.vcell))(0)) 303 ]) 286 304 287 305 define([set_nrs_value],[ 288 stw $1,((nrs.$2)+(symbol.vcell))(0)]) 306 str($1,((nrs.$2)+(symbol.vcell))(0)) 307 ]) 289 308 290 309 define([extract_unsigned_byte_bits],[ 291 rlwinm $1,$2,0,32-fixnumshift,31-($3+fixnumshift)]) 310 rlwinm $1,$2,0,32-fixnumshift,31-($3+fixnumshift) 311 ]) 292 312 293 313 define([extract_unsigned_byte_bits_],[/* dest,src,width*/ 294 rlwinm. $1,$2,0,32-fixnumshift,31-($3+fixnumshift)]) 295 314 rlwinm. $1,$2,0,32-fixnumshift,31-($3+fixnumshift) 315 ]) 316 296 317 /* vpop argregs - nargs is known to be non-zero */ 297 318 define([vpop_argregs_nz],[ 298 319 new_macro_labels() 299 cmpl wi cr1,nargs,2*4320 cmplri(cr1,nargs,node_size*2) 300 321 vpop(arg_z) 301 322 blt cr1,macro_label(l0) … … 305 326 macro_label(l0):]) 306 327 328 307 329 /* vpush argregs */ 308 330 define([vpush_argregs],[ 309 331 new_macro_labels() 310 cmpl wi cr0,nargs,0311 cmpl wi cr1,nargs,2*4332 cmplri(cr0,nargs,0) 333 cmplri(cr1,nargs,node_size*2) 312 334 beq cr0,macro_label(done) 313 335 blt cr1,macro_label(z) … … 322 344 323 345 define([create_lisp_frame],[ 324 stwu sp,-lisp_frame.size(sp)]) 325 346 stru(sp,-lisp_frame.size(sp)) 347 ]) 348 349 326 350 define([build_lisp_frame],[ 327 351 create_lisp_frame() 328 stw ifelse($1,[],fn,$1),lisp_frame.savefn(sp) 329 stw ifelse($2,[],loc_pc,$2),lisp_frame.savelr(sp) 330 stw ifelse($3,[],vsp,$3),lisp_frame.savevsp(sp) 331 ]) 332 352 str(ifelse($1,[],fn,$1),lisp_frame.savefn(sp)) 353 str(ifelse($2,[],loc_pc,$2),lisp_frame.savelr(sp)) 354 str(ifelse($3,[],vsp,$3),lisp_frame.savevsp(sp)) 355 ]) 356 357 333 358 define([discard_lisp_frame],[ 334 359 la sp,lisp_frame.size(sp)]) … … 336 361 337 362 define([_car],[ 338 lwz $1,cons.car($2)]) 363 ldr($1,cons.car($2)) 364 ]) 339 365 340 366 define([_cdr],[ 341 l wz $1,cons.cdr($2)])367 ldr($1,cons.cdr($2))]) 342 368 343 369 define([rplaca],[ 344 st w $2,cons.car($1)])370 str($2,cons.car($1))]) 345 371 346 372 define([rplacd],[ 347 st w $2,cons.cdr($1)])373 str($2,cons.cdr($1))]) 348 374 349 375 define([vpush_saveregs],[ … … 358 384 359 385 define([restore_saveregs],[ 360 lwz save0,0($1) 361 lwz save1,4($1) 362 lwz save2,8($1) 363 lwz save3,12($1) 364 lwz save4,16($1) 365 lwz save5,20($1) 366 lwz save6,24($1) 367 lwz save7,28($1)]) 386 ldr(save0,node_size*0($1)) 387 ldr(save1,node_size*1($1)) 388 ldr(save2,node_size*2($1)) 389 ldr(save3,node_size*3($1)) 390 ldr(save4,node_size*4($1)) 391 ldr(save5,node_size*5($1)) 392 ldr(save6,node_size*6($1)) 393 ldr(save7,node_size*7($1)) 394 ]) 368 395 369 396 define([vpop_saveregs],[ 370 397 restore_saveregs(vsp) 371 la vsp, 32(vsp)])398 la vsp,node_size*8(vsp)]) 372 399 373 400 define([trap_unless_lisptag_equal],[ 374 401 extract_lisptag($3,$1) 375 twnei $3,$2]) 402 trnei($3,$2) 403 ]) 376 404 377 405 define([trap_unless_fulltag_equal],[ 378 406 extract_fulltag($3,$1) 379 twnei $3,$2]) 407 trnei($3,$2) 408 ]) 380 409 381 410 define([trap_unless_typecode_equal],[ 382 411 extract_typecode($3,$1) 383 twnei $3,$2]) 412 trnei($3,$2) 413 ]) 384 414 385 415 /* "jump" to the code-vector of the function in nfn. */ 386 416 define([jump_nfn],[ 387 l wz temp0,_function.codevector(nfn)417 ldr(temp0,_function.codevector(nfn)) 388 418 mtctr temp0 389 bctr]) 419 bctr 420 ]) 390 421 391 422 /* "call the code-vector of the function in nfn. */ 392 423 define([call_nfn],[ 393 l wz temp0,_function.codevector(nfn)424 ldr(temp0,_function.codevector(nfn)) 394 425 mtctr temp0 395 bctrl]) 426 bctrl 427 ]) 396 428 397 429 398 430 /* "jump" to the function in fnames function cell. */ 399 431 define([jump_fname],[ 400 lwz nfn,symbol.fcell(fname) 401 jump_nfn()]) 432 ldr(nfn,symbol.fcell(fname)) 433 jump_nfn() 434 ]) 402 435 403 436 /* call the function in fnames function cell. */ 404 437 define([call_fname],[ 405 lwz nfn,symbol.fcell(fname) 406 call_nfn()]) 438 ldr(nfn,symbol.fcell(fname)) 439 call_nfn() 440 ]) 407 441 408 442 define([do_funcall],[ 409 443 new_macro_labels() 410 444 extract_lisptag(imm0,temp0) 411 cmp wi imm0,tag_misc445 cmpri(imm0,tag_misc) 412 446 mr nfn,temp0 413 447 bne- macro_label(bad) 414 448 extract_subtag(imm0,temp0) 415 cmp wi imm0,subtag_function416 cmp wi cr1,imm0,subtag_symbol449 cmpri(imm0,subtag_function) 450 cmpri(cr1,imm0,subtag_symbol) 417 451 bne cr0,macro_label(_sym) 418 452 jump_nfn() … … 427 461 define([mkcatch],[ 428 462 mflr loc_pc 429 l wz imm0,tcr.catch_top(rcontext)463 ldr(imm0,tcr.catch_top(rcontext)) 430 464 lwz imm1,0(loc_pc) /* a forward branch to the catch/unwind cleanup */ 431 465 rlwinm imm1,imm1,0,6,29 /* extract LI */ … … 437 471 TSP_Alloc_Fixed_Boxed(catch_frame.size) 438 472 la imm1,tsp_frame.data_offset+fulltag_misc(tsp) 439 st w arg_z,catch_frame.catch_tag(imm1)440 st w imm0,catch_frame.link(imm1)441 st w imm2,catch_frame.mvflag(imm1)442 l wz imm0,tcr.db_link(rcontext)443 st w sp,catch_frame.csp(imm1)473 str(arg_z,catch_frame.catch_tag(imm1)) 474 str(imm0,catch_frame.link(imm1)) 475 str(imm2,catch_frame.mvflag(imm1)) 476 ldr(imm0,tcr.db_link(rcontext)) 477 str(sp,catch_frame.csp(imm1)) 444 478 lwi(imm2,(catch_frame.element_count<<num_subtag_bits)|subtag_catch_frame) 445 st w imm0,catch_frame.db_link(imm1)479 str(imm0,catch_frame.db_link(imm1)) 446 480 stmw first_nvr,catch_frame.regs(imm1) 447 st w imm2,catch_frame.header(imm1)448 l wz imm0,tcr.xframe(rcontext)449 st w imm0,catch_frame.xframe(imm1)450 st w rzero,catch_frame.tsp_segment(imm1)451 st w imm1,tcr.catch_top(rcontext)481 str(imm2,catch_frame.header(imm1)) 482 ldr(imm0,tcr.xframe(rcontext)) 483 str(imm0,catch_frame.xframe(imm1)) 484 str(rzero,catch_frame.tsp_segment(imm1)) 485 str(imm1,tcr.catch_top(rcontext)) 452 486 blr 453 487 ]) 454 488 455 /* Altivec. N.B.: gas 2.11 supports the Altivec instruction set */ 456 457 define([LVX],[ 458 .long (31<<26)+(($1)<<21)+(($2)<<16)+(($3<<11))+(103<<1) 459 ]) 460 461 define([STVX],[ 462 .long (31<<26)+(($1)<<21)+(($2)<<16)+(($3<<11))+(231<<1) 463 ]) 464 465 define([MFVSCR],[ 466 .long (4<<26)+(($1)<<21)+(770<<1) 467 ]) 468 469 define([MTVSCR],[ 470 .long (4<<26)+(($1)<<21)+(802<<1) 471 ]) 489 472 490 473 491 define([DCBZL],[ … … 510 528 define([Cons],[ 511 529 la allocptr,(-cons.size+fulltag_cons)(allocptr) 512 t wllt allocptr,allocbase513 st w $3,cons.cdr(allocptr)514 st w $2,cons.car(allocptr)530 trllt(allocptr,allocbase) 531 str($3,cons.cdr(allocptr)) 532 str($2,cons.car(allocptr)) 515 533 mr $1,allocptr 516 534 clear_alloc_tag() … … 545 563 la $3,-fulltag_misc($3) 546 564 sub allocptr,allocptr,$3 547 t wllt allocptr,allocbase548 st w $2,misc_header_offset(allocptr)565 trllt(allocptr,allocbase) 566 str($2,misc_header_offset(allocptr)) 549 567 mr $1,allocptr 550 568 clear_alloc_tag() … … 556 574 define([Misc_Alloc_Fixed],[ 557 575 la allocptr,(-$3)+fulltag_misc(allocptr) 558 t wllt allocptr,allocbase559 st w $2,misc_header_offset(allocptr)576 trllt(allocptr,allocbase) 577 str($2,misc_header_offset(allocptr)) 560 578 mr $1,allocptr 561 579 clear_alloc_tag() … … 587 605 588 606 define([Set_TSP_Frame_Unboxed],[ 589 st w tsp,tsp_frame.type(tsp)607 str(tsp,tsp_frame.type(tsp)) 590 608 ]) 591 609 592 610 define([Set_TSP_Frame_Boxed],[ 593 st w rzero,tsp_frame.type(tsp)611 str(rzero,tsp_frame.type(tsp)) 594 612 ]) 595 613 … … 626 644 new_macro_labels() 627 645 mr $1,tsp 628 l wz $2,tsp_frame.backlink(tsp)646 ldr($2,tsp_frame.backlink(tsp)) 629 647 la $2,-8($2) 630 648 b macro_label(zero_tsp_test) … … 632 650 stfdu fp_zero,8($1) 633 651 macro_label(zero_tsp_test): 634 cmp w ifelse($3,[],[cr0],$3),$1,$2652 cmpr(ifelse($3,[],[cr0],$3),$1,$2) 635 653 bne ifelse($3,[],[cr0],$3),macro_label(zero_tsp_loop) 636 654 ]) … … 640 658 new_macro_labels() 641 659 mr $1,tsp 642 l wz $2,tsp_frame.backlink(tsp)660 ldr($2,tsp_frame.backlink(tsp)) 643 661 la $2,-8($2) 644 662 macro_label(zero_tsp_loop): 645 663 stfdu fp_zero,8($1) 646 cmp w ifelse($3,[],[cr0],$3),$1,$2664 cmpr(ifelse($3,[],[cr0],$3),$1,$2) 647 665 bne ifelse($3,[],[cr0],$3),macro_label(zero_tsp_loop) 648 666 ]) … … 652 670 define([TSP_Alloc_Var_Unboxed],[ 653 671 neg ifelse($2,[],$1,$2),$1 654 st wux tsp,tsp,ifelse($2,[],$1,$2)672 strux(tsp,tsp,ifelse($2,[],$1,$2)) 655 673 Set_TSP_Frame_Unboxed() 656 674 ]) … … 671 689 define([check_pending_interrupt],[ 672 690 new_macro_labels() 673 l wz nargs,tcr.interrupt_level(rcontext)674 cmp wi ifelse($1,[],[cr0],$1),nargs,0691 ldr(nargs,tcr.interrupt_level(rcontext)) 692 cmpri(ifelse($1,[],[cr0],$1),nargs,0) 675 693 blt ifelse($1,[],[cr0],$1),macro_label(done) 676 694 bgt ifelse($1,[],[cr0],$1),macro_label(trap) 677 l wz nargs,tcr.interrupt_pending(rcontext)695 ldr(nargs,tcr.interrupt_pending(rcontext)) 678 696 macro_label(trap): 679 t wgti nargs,0697 trgti(nargs,0) 680 698 macro_label(done): 681 699 ])
Note:
See TracChangeset
for help on using the changeset viewer.
