1# SPIM S20 MIPS simulator. 2# A torture test for the SPIM simulator. 3# Core tests for instructions that do not differ on big and little endian systems. 4# 5# Copyright (c) 1990-2010, James R. Larus. 6# All rights reserved. 7# 8# Redistribution and use in source and binary forms, with or without modification, 9# are permitted provided that the following conditions are met: 10# 11# Redistributions of source code must retain the above copyright notice, 12# this list of conditions and the following disclaimer. 13# 14# Redistributions in binary form must reproduce the above copyright notice, 15# this list of conditions and the following disclaimer in the documentation and/or 16# other materials provided with the distribution. 17# 18# Neither the name of the James R. Larus nor the names of its contributors may be 19# used to endorse or promote products derived from this software without specific 20# prior written permission. 21# 22# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 23# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 26# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 28# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32# 33 34 35 .data 36saved_ret_pc: .word 0 # Holds PC to return from main 37m3: .asciiz "The next few lines should contain exception error messages\n" 38m4: .asciiz "Done with exceptions\n\n" 39 .text 40 .globl main 41main: 42 sw $31 saved_ret_pc 43 44# 45# The first thing to do is to test the exceptions: 46# 47 li $v0 4 # syscall 4 (print_str) 48 la $a0 m3 49 syscall 50 51# Exception 1 (INT) -- Not implemented yet 52# Exception 4 (ADEL) 53 li $t0 0x400000 54 lw $3 1($t0) 55# Exception 5 (ADES) 56 sw $3 1($t0) 57# Exception 6 (IBUS) -- Can't test and continue 58# Exception 7 (DBUS) 59 lw $3 10000000($t0) 60# Exception 8 (SYSCALL) -- Not implemented 61# Exception 9 (BKPT) 62 break 0 63# Exception 10 (RI) -- Not implemented (can't enter bad instructions) 64# Exception 12 (overflow) 65 li $t0 0x7fffffff 66 add $t0 $t0 $t0 67 li $v0 4 # syscall 4 (print_str) 68 la $a0 m4 69 syscall 70 71# 72# Try modifying R0 73# 74 add $0, $0, 1 75 bnez $0 fail 76 77 78# 79# Test the timer: 80# 81 .data 82timer_: .asciiz "Testing timer\n" 83 .text 84 li $v0 4 # syscall 4 (print_str) 85 la $a0 timer_ 86 syscall 87 88 mtc0 $0 $9 # Clear count register 89timer1_: 90 mfc0 $9 $9 91 bne $9 10 timer1_# Count up to 10 92 93 94# 95# Test .ASCIIZ 96# 97 .data 98asciiz_:.asciiz "Testing .asciiz\n" 99str0: .asciiz "" 100str1: .asciiz "a" 101str2: .asciiz "bb" 102str3: .asciiz "ccc" 103str4: .asciiz "dddd" 104str5: .asciiz "eeeee" 105str06: .asciiz "", "a", "bb", "ccc", "dddd", "eeeee" 106 .text 107 li $v0 4 # syscall 4 (print_str) 108 la $a0 asciiz_ 109 syscall 110 111 la $a0 str0 112 li $a1 6 113 jal ck_strings 114 115 la $a0 str06 116 li $a1 6 117 jal ck_strings 118 119 j over_strlen 120 121 122ck_strings: 123 move $s0 $a0 124 move $s1 $ra 125 li $s2 0 126 127l_asciiz1: 128 move $a0 $s0 129 jal strlen 130 131 bne $v0 $s2 fail 132 133 add $s0 $s0 $v0 # skip string 134 add $s0 $s0 1 # skip null byte 135 136 add $s2 1 137 blt $s2 $a1 l_asciiz1 138 139 move $ra $s1 140 jal $ra 141 142 143strlen: 144 li $v0 0 # num chars 145 move $t0 $a0 # str pointer 146 147l_strlen1: 148 lb $t1 0($t0) 149 add $t0 1 150 add $v0 1 151 bnez $t1 l_strlen1 152 153 sub $v0 $v0 1 # don't count null byte 154 jr $31 155 156over_strlen: 157 158# 159# Now, test each instruction 160# 161 162 .data 163add_: .asciiz "Testing ADD\n" 164 .text 165 li $v0 4 # syscall 4 (print_str) 166 la $a0 add_ 167 syscall 168 169 li $2 1 170 li $3 -1 171 172 add $4, $0, $0 173 bnez $4 fail 174 add $4, $0, $2 175 bne $4 1 fail 176 add $4, $4, $3 177 bnez $4 fail 178 179 180 .data 181addi_: .asciiz "Testing ADDI\n" 182 .text 183 li $v0 4 # syscall 4 (print_str) 184 la $a0 addi_ 185 syscall 186 187 addi $4, $0, 0 188 bnez $4 fail 189 addi $4, $0, 1 190 bne $4 1 fail 191 addi $4, $4, -1 192 bnez $4 fail 193 194 195 .data 196addiu_: .asciiz "Testing ADDIU\n" 197 .text 198 li $v0 4 # syscall 4 (print_str) 199 la $a0 addiu_ 200 syscall 201 202 addiu $4, $0, 0 203 bnez $4 fail 204 addiu $4, $0, 1 205 bne $4 1 fail 206 addiu $4, $4, -1 207 bnez $4 fail 208 209 li $2 0x7fffffff 210 addiu $2 $2 2 # should not trap 211 bne $2 0x80000001 fail 212 213 214 .data 215addu_: .asciiz "Testing ADDU\n" 216 .text 217 li $v0 4 # syscall 4 (print_str) 218 la $a0 addu_ 219 syscall 220 221 li $2 1 222 li $3 -1 223 224 addu $4, $0, $0 225 bnez $4 fail 226 addu $4, $0, $2 227 bne $4 1 fail 228 addu $4, $4, $3 229 bnez $4 fail 230 231 li $2 0x7fffffff 232 addu $2 $2 $2 # should not trap 233 bne $2 -2 fail 234 235 236 .data 237and_: .asciiz "Testing AND\n" 238 .text 239 li $v0 4 # syscall 4 (print_str) 240 la $a0 and_ 241 syscall 242 243 li $2 1 244 li $3 -1 245 246 and $4 $0 $0 247 bnez $4 fail 248 and $4 $2 $2 249 beqz $4 fail 250 and $4 $2 $3 251 bne $4 1 fail 252 253 254 .data 255andi_: .asciiz "Testing ANDI\n" 256 .text 257 li $v0 4 # syscall 4 (print_str) 258 la $a0 andi_ 259 syscall 260 261 li $2 1 262 li $3 -1 263 264 andi $4 $0 0 265 bnez $4 fail 266 and $4 $2 1 267 beqz $4 fail 268 and $4 $2 -1 269 bne $4 1 fail 270 and $4 $3 -1 271 bne $4 $3 fail 272 273 274 .data 275beq_: .asciiz "Testing BEQ\n" 276 .text 277 li $v0 4 # syscall 4 (print_str) 278 la $a0 beq_ 279 syscall 280 281 li $2 -1 282 li $3 1 283 284 beq $0 $0 l1 285 j fail 286l1: beq $2 $2 l2 287 j fail 288l2: beq $3 $2 fail 289 290 beq $2 $2 far_away # Check long branch 291 j fail 292come_back: 293 294 li $2 3 295l2_1: sub $2 $2 1 296 bnez $2, l2_1 297 298 299 .data 300bgez_: .asciiz "Testing BGEZ\n" 301 .text 302 li $v0 4 # syscall 4 (print_str) 303 la $a0 bgez_ 304 syscall 305 306 li $2 -1 307 li $3 1 308 309 bgez $0 l3 310 j fail 311l3: bgez $3 l4 312 j fail 313l4: bgez $2 fail 314 315 316 .data 317bgezal_:.asciiz "Testing BGEZAL\n" 318 .text 319 li $v0 4 # syscall 4 (print_str) 320 la $a0 bgezal_ 321 syscall 322 323 li $2 -1 324 li $3 1 325 326 bgezal $0 l5 327 j fail 328 bgezal $2 fail 329l5: bgezal $3 l6 330l55: j fail 331l6: la $4 l55 332 bne $31 $4 fail 333 334 335 .data 336bgtz_: .asciiz "Testing BGTZ\n" 337 .text 338 li $v0 4 # syscall 4 (print_str) 339 la $a0 bgtz_ 340 syscall 341 342 li $2 -1 343 li $3 1 344 345 bgtz $0 fail 346l7: bgtz $3 l8 347 j fail 348l8: bgtz $2 fail 349 350 351 .data 352blez_: .asciiz "Testing BLEZ\n" 353 .text 354 li $v0 4 # syscall 4 (print_str) 355 la $a0 blez_ 356 syscall 357 358 li $2 -1 359 li $3 1 360 361 blez $0 l9 362 j fail 363l9: blez $2 l10 364 j fail 365l10: blez $3 fail 366 367 368 .data 369bltz_: .asciiz "Testing BLTZ\n" 370 .text 371 li $v0 4 # syscall 4 (print_str) 372 la $a0 bltz_ 373 syscall 374 375 li $2 -1 376 li $3 1 377 378 bltz $0 fail 379l11: bltz $2 l12 380 j fail 381l12: bltz $3 fail 382 383 384 .data 385bltzal_:.asciiz "Testing BLTZAL\n" 386 .text 387 li $v0 4 # syscall 4 (print_str) 388 la $a0 bltzal_ 389 syscall 390 391 li $2 -1 392 li $3 1 393 394 bltzal $0 fail 395 bltzal $3 fail 396l13: bltzal $2 l15 397l14: j fail 398l15: la $4 l14 399 bne $31 $4 fail 400 401 402 .data 403bne_: .asciiz "Testing BNE\n" 404 .text 405 li $v0 4 # syscall 4 (print_str) 406 la $a0 bne_ 407 syscall 408 409 li $2 -1 410 li $3 1 411 412 bne $0 $0 fail 413 bne $2 $2 fail 414 bne $3 $2 l16 415l16: 416 417 418 .data 419break_: .asciiz "Testing BREAK\nExpect a exception message:\n " 420 .text 421 li $v0 4 # syscall 4 (print_str) 422 la $a0 break_ 423 syscall 424 425 break 3 426 427 428# COPz is not checked 429 430 431 .data 432ccp_: .asciiz "Testing move to/from coprocessor control 0/1\n" 433 .text 434 li $v0 4 # syscall 4 (print_str) 435 la $a0 ccp_ 436 syscall 437 438 li $2 0x7f7f 439 ctc0 $2 $3 440 cfc0 $4 $3 441 bne $2 $4 fail 442 li $2 0x7f7f 443 ctc1 $2 $3 444 cfc1 $4 $3 445 bne $2 $4 fail 446 447 448 .data 449clo_: .asciiz "Testing CLO\n" 450 .text 451 li $v0 4 # syscall 4 (print_str) 452 la $a0 clo_ 453 syscall 454 455 li $2 0 456 clo $3 $2 457 bne $3 0 fail 458 459 li $2 0xffffffff 460 clo $3 $2 461 bne $3 32 fail 462 463 li $2 0xf0000000 464 clo $3 $2 465 bne $3 4 fail 466 467 468 .data 469clz_: .asciiz "Testing CLZ\n" 470 .text 471 li $v0 4 # syscall 4 (print_str) 472 la $a0 clz_ 473 syscall 474 475 li $2 0 476 clz $3 $2 477 bne $3 32 fail 478 479 li $2 0xffffffff 480 clz $3 $2 481 bne $3 0 fail 482 483 li $2 0x0fff0000 484 clz $3 $2 485 bne $3 4 fail 486 487 488 .data 489div_: .asciiz "Testing DIV\n" 490div2_: .asciiz "Expect exception caused by divide by 0:\n " 491 .text 492 li $v0 4 # syscall 4 (print_str) 493 la $a0 div_ 494 syscall 495 496 li $2 4 497 li $3 2 498 li $4 -2 499 500 div $5 $2 $3 501 bne $5 2 fail 502 mfhi $5 503 bne $5 0 fail 504 505 div $5 $2 $4 506 bne $5 -2 fail 507 mfhi $5 508 bne $5 0 fail 509 510 li $2 0x80000000 511 li $4 0xffffffff 512 div $5 $2 $4 # Overflows, but should not cause overflow 513 514 li $2 1 515 li $4 0xffffffff 516 div $5 $2 $4 517 bne $5 -1 fail 518 mfhi $5 519 bne $5 0 fail 520 521 li $v0 4 # syscall 4 (print_str) 522 la $a0 div2_ 523 syscall 524 div $5 $2 $0 525 526 527 .data 528divu_: .asciiz "Testing DIVU\n" 529divu2_: .asciiz "Expect exception caused by divide by 0:\n " 530 .text 531 li $v0 4 # syscall 4 (print_str) 532 la $a0 divu_ 533 syscall 534 535 li $2 4 536 li $3 2 537 li $4 -2 538 539 divu $5 $2 $3 540 bne $5 2 fail 541 mfhi $5 542 bne $5 0 fail 543 544 divu $0 $2 $3 545 mflo $5 546 bne $5 2 fail 547 mfhi $5 548 bne $5 0 fail 549 550 divu $5 $2 $4 551 bne $5 0 fail 552 mfhi $5 553 bne $5 4 fail 554 555 li $2 0x80000000 556 li $4 0xffffffff 557 divu $5 $2 $4 # Overflows, but should not cause overflow 558 559 li $2 1 560 li $4 0xffffffff 561 divu $5 $2 $4 562 bne $5 0 fail 563 mfhi $5 564 bne $5 1 fail 565 566 li $v0 4 # syscall 4 (print_str) 567 la $a0 divu2_ 568 syscall 569 divu $5 $2 $0 570 571 572 .data 573j_: .asciiz "Testing J\n" 574 .text 575 li $v0 4 # syscall 4 (print_str) 576 la $a0 j_ 577 syscall 578 579 j l17 580 j fail 581 582 .ktext 583 nop # These instructions aren't executed, but 584 j l17a # cause parser errors since high 4 bits 585l17a: # don't match 586 j l17b 587 588 .text 589l17b: nop 590 j l17a # Correctly flagged as error here. 591 592l17: 593 594 595 .data 596jal_: .asciiz "Testing JAL\n" 597 .text 598 li $v0 4 # syscall 4 (print_str) 599 la $a0 jal_ 600 syscall 601 602 jal l18 603l19: j l20 604l18: la $4 l19 605 bne $31 $4 fail 606 jr $31 607l20: 608 609 610 .data 611jalr_: .asciiz "Testing JALR\n" 612jalr2_: .asciiz "Expect an non-word boundary exception:\n " 613 .text 614 li $v0 4 # syscall 4 (print_str) 615 la $a0 jalr_ 616 syscall 617 618 la $2 l21 619 jalr $3, $2 620l23: j l22 621l21: la $4 l23 622 bne $3 $4 fail 623 jr $3 624 625l22: la $2 l21a 626 jalr $2 627l23a: j l22a 628l21a: la $4 l23a 629 bne $31 $4 fail 630 jr $31 631 632l22a: li $v0 4 # syscall 4 (print_str) 633 la $a0 jalr2_ 634 syscall 635 la $2 l24 636 add $2 $2 2 637l24: jalr $3 $2 638 639 640 .data 641jr_: .asciiz "Testing JR\n" 642jr2_: .asciiz "Expect an non-word boundary exception:\n " 643 .text 644 li $v0 4 # syscall 4 (print_str) 645 la $a0 jr_ 646 syscall 647 648 la $2 l25 649 jr $2 650 j fail 651l25: li $v0 4 # syscall 4 (print_str) 652 la $a0 jr2_ 653 syscall 654 la $2 l27 655 add $2 $2 2 656l27: jr $2 657 658 659 .data 660la_: .asciiz "Testing LA\n" 661 .text 662 li $v0 4 # syscall 4 (print_str) 663 la $a0 la_ 664 syscall 665 666 # Simple cases already tested 667 li $4 101 668 la $5 10($4) 669 bne $5 111 fail 670 671 672# LB is endian-specific 673 674 675# LBU is endian-specific 676 677 678 .data 679ld_: .asciiz "Testing LD\n" 680ld2_: .asciiz "Expect four address error exceptions:\n" 681ldd_: .word 1, -1, 0, 0x8000000 682 .text 683 li $v0 4 # syscall 4 (print_str) 684 la $a0 ld_ 685 syscall 686 687 la $2 ldd_ 688 ld $3 0($2) 689 bne $3 1 fail 690 bne $4 -1 fail 691 ld $3 8($2) 692 bne $3 0 fail 693 bne $4 0x8000000 fail 694 695 li $v0 4 # syscall 4 (print_str) 696 la $a0 ld2_ 697 syscall 698 699 li $t5 0x7fffffff 700 ld $3 1000($t5) 701 ld $3 1001($t5) 702 703 704# LDC2 not tested 705 706# LWC2 not tested 707 708 .data 709lh_: .asciiz "Testing LH\n" 710lh2_: .asciiz "Expect two address error exceptions:\n" 711lhd_: .half 1, -1, 0, 0x8000 712 .text 713 li $v0 4 # syscall 4 (print_str) 714 la $a0 lh_ 715 syscall 716 717 la $2 lhd_ 718 lh $3 0($2) 719 bne $3 1 fail 720 lh $3 2($2) 721 bne $3 -1 fail 722 lh $3 4($2) 723 bne $3 0 fail 724 lh $3 6($2) 725 bne $3 0xffff8000 fail 726 727 li $v0 4 # syscall 4 (print_str) 728 la $a0 lh2_ 729 syscall 730 731 li $t5 0x7fffffff 732 lh $3 1000($t5) 733 lh $3 1001($t5) 734 735 .data 736lhu_: .asciiz "Testing LHU\n" 737 .text 738 li $v0 4 # syscall 4 (print_str) 739 la $a0 lhu_ 740 syscall 741 742 la $2 lhd_ 743 lhu $3 0($2) 744 bne $3 1 fail 745 lhu $3 2($2) 746 bne $3 0xffff fail 747 lhu $3 4($2) 748 bne $3 0 fail 749 lhu $3 6($2) 750 bne $3 0x8000 fail 751 752 li $v0 4 # syscall 4 (print_str) 753 la $a0 lh2_ 754 syscall 755 756 li $t5 0x7fffffff 757 lhu $3 1000($t5) 758 lhu $3 1001($t5) 759 760 761 .data 762ll_: .asciiz "Testing LL\n" 763ll1: .word 10 764 .text 765 li $v0 4 # syscall 4 (print_str) 766 la $a0 ll_ 767 syscall 768 769 ll $2 ll1 770 bne $2 10 fail 771 add $2 $2 1 772 sc $2 ll1 773 lw $3 ll1 774 bne $2 $3 fail 775 776 .data 777lui_: .asciiz "Testing LUI\n" 778 .text 779 li $v0 4 # syscall 4 (print_str) 780 la $a0 lui_ 781 syscall 782 783 lui $2 0 784 bne $2 $0 fail 785 lui $2 1 786 srl $2 $2 16 787 addiu $2 $2 -1 # Don't do compare directly since it uses LUI 788 bne $2 $0 fail 789 lui $2 1 790 andi $2 $2 0xffff 791 bne $2 $0 fail 792 lui $2 0xffff 793 srl $2 $2 16 794 addiu $2 $2 1 795 andi $2 $2 0xffff 796 bne $2 $0 fail 797 798 799 .data 800lw_: .asciiz "Testing LW\n" 801lwd_: .word 1, -1, 0, 0x8000000 802 .text 803 li $v0 4 # syscall 4 (print_str) 804 la $a0 lw_ 805 syscall 806 807 la $2 lwd_ 808 lw $3 0($2) 809 bne $3 1 fail 810 lw $3 4($2) 811 bne $3 -1 fail 812 lw $3 8($2) 813 bne $3 0 fail 814 lw $3 12($2) 815 bne $3 0x8000000 fail 816 817 li $2, 0 818 lw $3 lwd_($2) 819 bne $3 1 fail 820 addi $2, $2, 4 821 lw $3 lwd_($2) 822 bne $3 -1 fail 823 addi $2, $2, 4 824 lw $3 lwd_($2) 825 bne $3 0 fail 826 addi $2, $2, 4 827 lw $3 lwd_($2) 828 bne $3 0x8000000 fail 829 830 la $2 lwd_ 831 add $2 $2 12 832 lw $3 -12($2) 833 bne $3 1 fail 834 lw $3 -8($2) 835 bne $3 -1 fail 836 lw $3 -4($2) 837 bne $3 0 fail 838 lw $3 0($2) 839 bne $3 0x8000000 fail 840 841 li $v0 4 # syscall 4 (print_str) 842 la $a0 lh2_ 843 syscall 844 845 li $t5 0x7fffffff 846 lw $3 1000($t5) 847 lw $3 1001($t5) 848 849 850# LWL is endian-specific 851 852 853# LWR is endian-specific 854 855 856 .data 857madd_: .asciiz "Testing MADD\n" 858 .text 859 li $v0 4 # syscall 4 (print_str) 860 la $a0 madd_ 861 syscall 862 863 mthi $0 864 mtlo $0 865 madd $0, $0 866 mfhi $3 867 bnez $3 fail 868 mflo $3 869 bnez $3 fail 870 871 mtlo $0 872 mthi $0 873 li $4, 1 874 madd $4, $4 875 mfhi $3 876 bnez $3 fail 877 mflo $3 878 bne $3 1 fail 879 880 li $3, 1 881 mtlo $3 882 mthi $0 883 li $4, -1 884 madd $3, $4 885 mfhi $3 886 bnez $3 fail 887 mflo $3 888 bnez $3 fail 889 890 mtlo $0 891 mthi $0 892 li $3, 1 893 li $4, -1 894 madd $3, $4 895 mfhi $3 896 bne $3 0xffffffff fail 897 mflo $3 898 bne $3 0xffffffff fail 899 900 li $t0 1 901 mtlo $t0 902 mthi $0 903 li $t0 2 904 li $t1 -1 905 madd $t0, $t1 906 mfhi $3 907 bne $3 0xffffffff fail 908 mflo $3 909 bne $3 0xffffffff fail 910 911 mtlo $0 912 mthi $0 913 li $4, 0x10000 914 madd $4, $4 915 mfhi $3 916 bne $3 1 fail 917 mflo $3 918 bne $3 0 fail 919 920 li $4, 0x10000 921 madd $4 $4 922 mfhi $3 923 bne $3 2 fail 924 mflo $3 925 bne $3 0 fail 926 927 .data 928maddu_: .asciiz "Testing MADDU\n" 929 .text 930 li $v0 4 # syscall 4 (print_str) 931 la $a0 maddu_ 932 syscall 933 934 mthi $0 935 mtlo $0 936 937 maddu $0 $0 938 mfhi $3 939 bnez $3 fail 940 mflo $3 941 bnez $3 fail 942 943 li $4, 1 944 maddu $4 $4 945 mfhi $3 946 bnez $3 fail 947 mflo $3 948 bne $3 1 fail 949 950 li $4, -1 951 maddu $4 $4 952 mfhi $3 953 bne $3 0xfffffffe fail 954 mflo $3 955 bne $3 2 fail 956 957 .data 958mcp_: .asciiz "Testing move to/from coprocessor z\n" 959 .text 960 li $v0 4 # syscall 4 (print_str) 961 la $a0 mcp_ 962 syscall 963 964 li $2 0x7f7f 965 mtc0 $2 $3 966 mfc0 $4 $3 967 bne $2 $4 fail 968 li $2 0x7f7f 969 mtc1 $2 $3 970 mfc1 $4 $f3 971 bne $2 $4 fail 972 li $2 0x7f7f 973 li $3 0xf7f7 974 mtc1.d $2 $4 975 mfc1.d $6 $4 976 bne $2 $6 fail 977 bne $3 $7 fail 978 979 980 .data 981hilo_: .asciiz "Testing move to/from HI/LO\n" 982 .text 983 li $v0 4 # syscall 4 (print_str) 984 la $a0 hilo_ 985 syscall 986 987 mthi $0 988 mfhi $2 989 bnez $2 fail 990 mtlo $0 991 mflo $2 992 bnez $2 fail 993 li $2 1 994 mthi $2 995 mfhi $3 996 bne $3 $2 fail 997 li $2 1 998 mtlo $2 999 mflo $3 1000 bne $3 $2 fail 1001 li $2 -1 1002 mthi $2 1003 mfhi $3 1004 bne $3 $2 fail 1005 li $2 -1 1006 mtlo $2 1007 mflo $3 1008 bne $3 $2 fail 1009 1010 1011 .data 1012movf_: .asciiz "Testing MOVF\n" 1013 .text 1014 li $v0 4 # syscall 4 (print_str) 1015 la $a0 movf_ 1016 syscall 1017 1018 li $2 0xf0 1019 ctc1 $2 $25 1020 li $2 1 1021 li $3 0 1022 li $4 2 1023 movf $3 $2 1 1024 bne $3 1 fail 1025 movf $3 $4 7 1026 bne $3 1 fail 1027 1028 1029 .data 1030movn_: .asciiz "Testing MOVN\n" 1031 .text 1032 li $v0 4 # syscall 4 (print_str) 1033 la $a0 movn_ 1034 syscall 1035 1036 li $2 2 1037 li $3 3 1038 li $4 4 1039 movn $4 $3 $0 1040 bne $4 4 fail 1041 movn $4 $3 $2 1042 bne $4 3 fail 1043 1044 1045 .data 1046movt_: .asciiz "Testing MOVT\n" 1047 .text 1048 li $v0 4 # syscall 4 (print_str) 1049 la $a0 movt_ 1050 syscall 1051 1052 li $2 0xf 1053 ctc1 $2 $25 1054 li $2 1 1055 li $3 0 1056 li $4 2 1057 movt $3 $2 1 1058 bne $3 1 fail 1059 movt $3 $4 7 1060 bne $3 1 fail 1061 1062 1063 .data 1064movz_: .asciiz "Testing MOVZ\n" 1065 .text 1066 li $v0 4 # syscall 4 (print_str) 1067 la $a0 movz_ 1068 syscall 1069 1070 li $2 2 1071 li $3 3 1072 li $4 4 1073 movz $4 $3 $2 1074 bne $4 4 fail 1075 movz $4 $3 $0 1076 bne $4 3 fail 1077 1078 1079 .data 1080msub_: .asciiz "Testing MSUB\n" 1081 .text 1082 li $v0 4 # syscall 4 (print_str) 1083 la $a0 msub_ 1084 syscall 1085 1086 mthi $0 1087 mtlo $0 1088 msub $0 $0 1089 mfhi $3 1090 bnez $3 fail 1091 mflo $3 1092 bnez $3 fail 1093 1094 mthi $0 1095 mtlo $0 1096 li $4, 1 1097 msub $4 $4 1098 mfhi $3 1099 bne $3 0xffffffff fail 1100 mflo $3 1101 bne $3 0xffffffff fail 1102 1103 li $4, 1 1104 msub $3 $4 1105 mfhi $3 1106 bnez $3 fail 1107 mflo $3 1108 bnez $3 fail 1109 1110 mthi $0 1111 mtlo $0 1112 li $4, 0x10000 1113 msub $4 $4 1114 mfhi $3 1115 bne $3 0xffffffff fail 1116 mflo $3 1117 bne $3 0 fail 1118 1119 mtlo $0 1120 mthi $0 1121 li $4, 1 1122 li $5, -1 1123 msub $5, $4 1124 mfhi $3 1125 bne $3 0 fail 1126 mflo $3 1127 bne $3 1 fail 1128 1129 .data 1130msubu_: .asciiz "Testing MSUBU\n" 1131 .text 1132 li $v0 4 # syscall 4 (print_str) 1133 la $a0 msubu_ 1134 syscall 1135 1136 mthi $0 1137 mtlo $0 1138 msubu $0 $0 1139 mfhi $3 1140 bnez $3 fail 1141 mflo $3 1142 bnez $3 fail 1143 1144 mthi $0 1145 mtlo $0 1146 li $4, 1 1147 msubu $4 $4 1148 mfhi $3 1149 bne $3 0xffffffff fail 1150 mflo $3 1151 bne $3 0xffffffff fail 1152 1153 mtlo $0 1154 mthi $0 1155 li $4, 1 1156 li $5, -1 1157 msubu $5, $4 1158 mfhi $3 1159 bne $3 0xffffffff fail 1160 mflo $3 1161 bne $3 1 fail 1162 1163 .data 1164mul_: .asciiz "Testing MUL\n" 1165 .text 1166 li $v0 4 # syscall 4 (print_str) 1167 la $a0 mul_ 1168 syscall 1169 1170 li $2, 1 1171 mul $3, $2, 0 1172 bnez $3 fail 1173 mul $3, $2, 1 1174 bne $3 1 fail 1175 mul $3, $2, 10 1176 bne $3 10 fail 1177 1178 mul $2 $0 $0 1179 bnez $2 fail 1180 mfhi $3 1181 bnez $3 fail 1182 mflo $3 1183 bnez $3 fail 1184 1185 li $4, 1 1186 mul $2 $4 $4 1187 bne $2 1 fail 1188 mfhi $3 1189 bnez $3 fail 1190 mflo $3 1191 bne $3 1 fail 1192 1193 li $4, -1 1194 mul $2 $4 $4 1195 bne $2 1 fail 1196 mfhi $3 1197 bnez $3 fail 1198 mflo $3 1199 bne $3 1 fail 1200 1201 li $4, -1 1202 li $5, 1 1203 mul $2 $4 $5 1204 bne $2 -1 fail 1205 mfhi $3 1206 bne $3 -1 fail 1207 mflo $3 1208 bne $3 -1 fail 1209 1210 li $4, 0x10000 1211 mul $2 $4 $4 1212 bne $2 0 fail 1213 mfhi $3 1214 bne $3 1 fail 1215 mflo $3 1216 bne $3 0 fail 1217 1218 li $4, 0x80000000 1219 mul $2 $4 $4 1220 bne $2 0 fail 1221 mfhi $3 1222 bne $3 0x40000000 fail 1223 mflo $3 1224 bne $3 0 fail 1225 1226 1227 .data 1228multu_: .asciiz "Testing MULTU\n" 1229 .text 1230 li $v0 4 # syscall 4 (print_str) 1231 la $a0 multu_ 1232 syscall 1233 1234 multu $0 $0 1235 mfhi $3 1236 bnez $3 fail 1237 mflo $3 1238 bnez $3 fail 1239 1240 li $4, 1 1241 multu $4 $4 1242 mfhi $3 1243 bnez $3 fail 1244 mflo $3 1245 bne $3 1 fail 1246 1247 li $4, -1 1248 multu $4 $4 1249 mfhi $3 1250 bne $3 0xfffffffe fail 1251 mflo $3 1252 bne $3 1 fail 1253 1254 li $4, -1 1255 li $5, 0 1256 multu $4 $5 1257 mfhi $3 1258 bne $3 0 fail 1259 mflo $3 1260 bne $3 0 fail 1261 1262 li $4, -1 1263 li $5, 1 1264 multu $4 $5 1265 mfhi $3 1266 bne $3 0 fail 1267 mflo $3 1268 bne $3 -1 fail 1269 1270 li $4, 0x10000 1271 multu $4 $4 1272 mfhi $3 1273 bne $3 1 fail 1274 mflo $3 1275 bne $3 0 fail 1276 1277 li $4, 0x80000000 1278 multu $4 $4 1279 mfhi $3 1280 bne $3 0x40000000 fail 1281 mflo $3 1282 bne $3 0 fail 1283 1284 li $3, 0xcecb8f27 1285 li $4, 0xfd87b5f2 1286 multu $3 $4 1287 mfhi $3 1288 bne $3 0xcccccccb fail 1289 mflo $3 1290 bne $3 0x7134e5de fail 1291 1292 1293 .data 1294mulo_: .asciiz "Testing MULO\n" 1295mulo1_: .asciiz "Expect an exception:\n " 1296 .text 1297 li $v0 4 # syscall 4 (print_str) 1298 la $a0 mulo_ 1299 syscall 1300 1301 mulo $2 $0 $0 1302 bne $2 0 fail 1303 1304 li $4, 1 1305 mulo $2 $4 $4 1306 bne $2 1 fail 1307 1308 li $4, -1 1309 mulo $2 $4 $4 1310 bne $2 1 fail 1311 1312 li $4, -1 1313 li $5, 1 1314 mulo $2 $4 $5 1315 bne $2 -1 fail 1316 1317 li $v0 4 # syscall 4 (print_str) 1318 la $a0 mulo1_ 1319 syscall 1320 1321 li $4, 0x10000 1322 mulo $2 $4 $4 1323 bne $2 0 fail 1324 1325 1326 .data 1327nor_: .asciiz "Testing NOR\n" 1328 .text 1329 li $v0 4 # syscall 4 (print_str) 1330 la $a0 nor_ 1331 syscall 1332 1333 li $2 1 1334 li $3 -1 1335 1336 nor $4 $0 $0 1337 bne $4 -1 fail 1338 nor $4 $2 $2 1339 bne $4 0xfffffffe fail 1340 nor $4 $2 $3 1341 bne $4 0 fail 1342 1343 1344 .data 1345or_: .asciiz "Testing OR\n" 1346 .text 1347 li $v0 4 # syscall 4 (print_str) 1348 la $a0 or_ 1349 syscall 1350 1351 li $2 1 1352 li $3 -1 1353 1354 or $4 $0 $0 1355 bne $4 0 fail 1356 or $4 $2 $2 1357 bne $4 1 fail 1358 or $4 $2 $3 1359 bne $4 -1 fail 1360 1361 1362 .data 1363ori_: .asciiz "Testing ORI\n" 1364 .text 1365 li $v0 4 # syscall 4 (print_str) 1366 la $a0 ori_ 1367 syscall 1368 1369 li $2 1 1370 li $3 -1 1371 1372 ori $4 $0 0 1373 bne $4 0 fail 1374 ori $4 $2 1 1375 bne $4 1 fail 1376 ori $4 $2 0xffff 1377 bne $4 0x0000ffff fail 1378 1379 1380# RFE tested previously 1381 1382 1383# SB is endian-specific 1384 1385 1386 .data 1387sd_: .asciiz "Testing SD\n" 1388sd2_: .asciiz "Expect two address error exceptions:\n" 1389 .align 2 1390sdd_: .word 0, 0, 0, 0 1391 .text 1392 li $v0 4 # syscall 4 (print_str) 1393 la $a0 sd_ 1394 syscall 1395 1396 li $3, 0x7f7f7f7f 1397 li $4, 0xf7f7f7f7 1398 la $2 sdd_ 1399 sd $3 0($2) 1400 ld $5 0($2) 1401 bne $3 $5 fail 1402 bne $4 $4 fail 1403 1404 li $v0 4 # syscall 4 (print_str) 1405 la $a0 sd2_ 1406 syscall 1407 1408 li $t5 0x7fffffff 1409 sd $3 1000($t5) 1410 sd $3 1001($t5) 1411 1412 1413 .data 1414swc1_: .asciiz "Testing SWC1\n" 1415 .align 2 1416swc1d_: .word 0, 0 1417 .text 1418 li $v0 4 # syscall 4 (print_str) 1419 la $a0 swc1_ 1420 syscall 1421 1422 li $3, 0x7f7f7f7f 1423 la $2 swc1d_ 1424 mtc1 $3, $0 1425 swc1 $f0 0($2) 1426 lw $5 0($2) 1427 bne $5 $3 fail 1428 1429 1430 .data 1431s.s_: .asciiz "Testing S.S\n" 1432 .align 2 1433s.sd_: .word 0, 0 1434 .text 1435 li $v0 4 # syscall 4 (print_str) 1436 la $a0 s.s_ 1437 syscall 1438 1439 li $3, 0x7f7f7f7f 1440 la $2 s.sd_ 1441 mtc1 $3, $0 1442 s.s $f0 0($2) 1443 lw $5 0($2) 1444 bne $5 $3 fail 1445 1446 1447 .data 1448sdc1_: .asciiz "Testing SDC1\n" 1449 .align 2 1450sdc1d_: .word 0, 0 1451 .text 1452 li $v0 4 # syscall 4 (print_str) 1453 la $a0 sdc1_ 1454 syscall 1455 1456 li $3, 0x7f7f7f7f 1457 li $4, 0xf7f7f7f7 1458 la $2 sdc1d_ 1459 mtc1 $3, $0 1460 mtc1 $4, $1 1461 sdc1 $f0 0($2) 1462 lw $5 0($2) 1463 bne $5 $3 fail 1464 lw $5 4($2) 1465 bne $5 $4 fail 1466 1467 1468 .data 1469s.d_: .asciiz "Testing S.D\n" 1470 .align 2 1471s.dd_: .word 0, 0 1472 .text 1473 li $v0 4 # syscall 4 (print_str) 1474 la $a0 s.d_ 1475 syscall 1476 1477 li $3, 0x7f7f7f7f 1478 li $4, 0xf7f7f7f7 1479 la $2 s.dd_ 1480 mtc1 $3, $0 1481 mtc1 $4, $1 1482 s.d $f0 0($2) 1483 lw $5 0($2) 1484 bne $5 $3 fail 1485 lw $5 4($2) 1486 bne $5 $4 fail 1487 1488 1489# SDC2 not tested 1490 1491 .data 1492sll_: .asciiz "Testing SLL\n" 1493 .text 1494 li $v0 4 # syscall 4 (print_str) 1495 la $a0 sll_ 1496 syscall 1497 1498 li $2 1 1499 1500 sll $3 $2 0 1501 bne $3 1 fail 1502 sll $3 $2 1 1503 bne $3 2 fail 1504 sll $3 $2 16 1505 bne $3 0x10000 fail 1506 sll $3 $2 31 1507 bne $3 0x80000000 fail 1508 1509 1510 .data 1511sllv_: .asciiz "Testing SLLV\n" 1512 .text 1513 li $v0 4 # syscall 4 (print_str) 1514 la $a0 sllv_ 1515 syscall 1516 1517 li $2 1 1518 li $4 0 1519 sllv $3 $2 $4 1520 bne $3 1 fail 1521 li $4 1 1522 sllv $3 $2 $4 1523 bne $3 2 fail 1524 li $4 16 1525 sllv $3 $2 $4 1526 bne $3 0x10000 fail 1527 li $4 32 1528 sllv $3 $2 $4 1529 bne $3 1 fail 1530 1531 1532 .data 1533slt_: .asciiz "Testing SLT\n" 1534 .text 1535 li $v0 4 # syscall 4 (print_str) 1536 la $a0 slt_ 1537 syscall 1538 1539 slt $3 $0 $0 1540 bne $3 0 fail 1541 li $2 1 1542 slt $3 $2 $0 1543 bne $3 0 fail 1544 slt $3 $0 $2 1545 bne $3 1 fail 1546 li $2 -1 1547 slt $3 $2 $0 1548 bne $3 1 fail 1549 slt $3 $0 $2 1550 bne $3 0 fail 1551 li $2 -1 1552 li $4 1 1553 slt $3 $2 $4 1554 bne $3 1 fail 1555 1556 1557 .data 1558slti_: .asciiz "Testing SLTI\n" 1559 .text 1560 li $v0 4 # syscall 4 (print_str) 1561 la $a0 slti_ 1562 syscall 1563 1564 slti $3 $0 0 1565 bne $3 0 fail 1566 li $2 1 1567 slti $3 $2 0 1568 bne $3 0 fail 1569 slti $3 $0 1 1570 bne $3 1 fail 1571 li $2 -1 1572 slti $3 $2 0 1573 bne $3 1 fail 1574 slti $3 $0 -1 1575 bne $3 0 fail 1576 li $2 -1 1577 li $4 1 1578 slti $3 $2 1 1579 bne $3 1 fail 1580 slti $3 $4 -1 1581 bne $3 0 fail 1582 1583 1584 .data 1585sltiu_: .asciiz "Testing SLTIU\n" 1586 .text 1587 li $v0 4 # syscall 4 (print_str) 1588 la $a0 sltiu_ 1589 syscall 1590 1591 sltiu $3 $0 0 1592 bne $3 0 fail 1593 li $2 1 1594 sltiu $3 $2 0 1595 bne $3 0 fail 1596 sltiu $3 $0 1 1597 bne $3 1 fail 1598 li $2 -1 1599 sltiu $3 $2 0 1600 bne $3 0 fail 1601 sltiu $3 $0 -1 1602 bne $3 1 fail 1603 li $2 -1 1604 li $4 1 1605 sltiu $3 $2 1 1606 bne $3 0 fail 1607 sltiu $3 $4 -1 1608 bne $3 1 fail 1609 1610 1611 .data 1612sltu_: .asciiz "Testing SLTU\n" 1613 .text 1614 li $v0 4 # syscall 4 (print_str) 1615 la $a0 sltu_ 1616 syscall 1617 1618 sltu $3 $0 $0 1619 bne $3 0 fail 1620 li $2 1 1621 sltu $3 $2 $0 1622 bne $3 0 fail 1623 sltu $3 $0 $2 1624 bne $3 1 fail 1625 li $2 -1 1626 sltu $3 $2 $0 1627 bne $3 0 fail 1628 sltu $3 $0 $2 1629 bne $3 1 fail 1630 li $2 -1 1631 li $4 1 1632 sltu $3 $2 $4 1633 bne $3 0 fail 1634 1635 1636 .data 1637sra_: .asciiz "Testing SRA\n" 1638 .text 1639 li $v0 4 # syscall 4 (print_str) 1640 la $a0 sra_ 1641 syscall 1642 1643 li $2 1 1644 sra $3 $2 0 1645 bne $3 1 fail 1646 sra $3 $2 1 1647 bne $3 0 fail 1648 li $2 0x1000 1649 sra $3 $2 4 1650 bne $3 0x100 fail 1651 li $2 0x80000000 1652 sra $3 $2 4 1653 bne $3 0xf8000000 fail 1654 1655 1656 .data 1657srav_: .asciiz "Testing SRAV\n" 1658 .text 1659 li $v0 4 # syscall 4 (print_str) 1660 la $a0 srav_ 1661 syscall 1662 1663 li $2 1 1664 li $4 0 1665 srav $3 $2 $4 1666 bne $3 1 fail 1667 li $4 1 1668 srav $3 $2 $4 1669 bne $3 0 fail 1670 li $2 0x1000 1671 li $4 4 1672 srav $3 $2 $4 1673 bne $3 0x100 fail 1674 li $2 0x80000000 1675 li $4 4 1676 srav $3 $2 $4 1677 bne $3 0xf8000000 fail 1678 1679 1680 .data 1681srl_: .asciiz "Testing SRL\n" 1682 .text 1683 li $v0 4 # syscall 4 (print_str) 1684 la $a0 srl_ 1685 syscall 1686 1687 li $2 1 1688 srl $3 $2 0 1689 bne $3 1 fail 1690 srl $3 $2 1 1691 bne $3 0 fail 1692 li $2 0x1000 1693 srl $3 $2 4 1694 bne $3 0x100 fail 1695 li $2 0x80000000 1696 srl $3 $2 4 1697 bne $3 0x08000000 fail 1698 1699 1700 .data 1701srlv_: .asciiz "Testing SRLV\n" 1702 .text 1703 li $v0 4 # syscall 4 (print_str) 1704 la $a0 srlv_ 1705 syscall 1706 1707 li $2 1 1708 li $4 0 1709 srlv $3 $2 $4 1710 bne $3 1 fail 1711 li $4 1 1712 srlv $3 $2 $4 1713 bne $3 0 fail 1714 li $2 0x1000 1715 li $4 4 1716 srlv $3 $2 $4 1717 bne $3 0x100 fail 1718 li $2 0x80000000 1719 li $4 4 1720 srlv $3 $2 $4 1721 bne $3 0x08000000 fail 1722 1723 1724 .data 1725ssnop_: .asciiz "Testing SSNOP\n" 1726 .text 1727 li $v0 4 # syscall 4 (print_str) 1728 la $a0 nop_ 1729 syscall 1730 1731 ssnop # How do we test it?? 1732 1733 1734 .data 1735sub_: .asciiz "Testing SUB\n" 1736sub1_: .asciiz "Expect an overflow exceptions:\n " 1737 .text 1738 li $v0 4 # syscall 4 (print_str) 1739 la $a0 sub_ 1740 syscall 1741 1742 li $2 1 1743 li $3 -1 1744 1745 sub $4, $0, $0 1746 bnez $4 fail 1747 sub $4, $0, $2 1748 bne $4 -1 fail 1749 sub $4, $2, $0 1750 bne $4, 1 fail 1751 sub $4, $2, $3 1752 bne $4, 2 fail 1753 sub $4, $3, $2 1754 bne $4, -2 fail 1755 1756 li $v0 4 # syscall 4 (print_str) 1757 la $a0 sub1_ 1758 syscall 1759 li $2 0x80000000 1760 li $3 1 1761 sub $4, $3, $2 1762 1763 1764 .data 1765subu_: .asciiz "Testing SUBU\n" 1766 .text 1767 li $v0 4 # syscall 4 (print_str) 1768 la $a0 subu_ 1769 syscall 1770 1771 li $2 1 1772 li $3 -1 1773 1774 subu $4, $0, $0 1775 bnez $4 fail 1776 subu $4, $0, $2 1777 bne $4 -1 fail 1778 subu $4, $2, $0 1779 bne $4, 1 fail 1780 subu $4, $2, $3 1781 bne $4, 2 fail 1782 subu $4, $3, $2 1783 bne $4, -2 fail 1784 1785 li $2 0x80000000 1786 li $3 1 1787 subu $4, $3, $2 1788 1789 1790 .data 1791sw_: .asciiz "Testing SW\n" 1792sw2_: .asciiz "Expect two address error exceptions:\n" 1793 .align 2 1794swd_: .byte 0, 0, 0, 0 1795 .text 1796 li $v0 4 # syscall 4 (print_str) 1797 la $a0 sw_ 1798 syscall 1799 1800 li $3, 0x7f7f7f7f 1801 la $2 swd_ 1802 sw $3 0($2) 1803 lw $4 0($2) 1804 bne $4 0x7f7f7f7f fail 1805 1806 li $2, 4 1807 sw $3 swd_($2) 1808 lw $4 swd_($2) 1809 bne $4 0x7f7f7f7f fail 1810 1811 li $v0 4 # syscall 4 (print_str) 1812 la $a0 sw2_ 1813 syscall 1814 1815 li $t5 0x7fffffff 1816 sw $3 1000($t5) 1817 sw $3 1001($t5) 1818 1819 lw $t0 far_away 1820 sw $0 far_away 1821 lw $t1 far_away 1822 bne $t1 $0 fail 1823 1824 1825# SWL is endian-specific 1826 1827 1828# SWR is endian-specific 1829 1830 1831 .data 1832sync_: .asciiz "Testing SYNC\n" 1833 .text 1834 li $v0 4 # syscall 4 (print_str) 1835 la $a0 nop_ 1836 syscall 1837 1838 sync 1839 1840 1841 .data 1842syscall_:.asciiz "Testing SYSCALL\n" 1843syscall1_:.asciiz "The next line should contain: -1, -1.000000, -2.000000\n" 1844syscall2_:.asciiz ", " 1845fp_sm1: .float -1.0 1846fp_dm2: .double -2.0 1847fp_c1: .float 17.18 1848fp_c2: .float 1700.18 1849fp_c3: .double 17.18e10 1850fp_c4: .double 1700.18e10 1851syscall5_:.asciiz "\n" 1852 .text 1853 li $v0 4 # syscall 4 (print_str) 1854 la $a0 syscall_ 1855 syscall 1856 1857 li $v0 4 # syscall 4 (print_str) 1858 la $a0 syscall1_ 1859 syscall 1860 1861 li $v0 1 # syscall 1 (print_int) 1862 li $a0 -1 1863 syscall 1864 1865 li $v0 4 # syscall 4 (print_str) 1866 la $a0 syscall2_ 1867 syscall 1868 1869 lwc1 $f12 fp_sm1# syscall 2 (print_float) 1870 li $v0 2 1871 syscall 1872 1873 li $v0 4 # syscall 4 (print_str) 1874 la $a0 syscall2_ 1875 syscall 1876 1877 lwc1 $f12 fp_dm2# syscall 3 (print_double) 1878 lwc1 $f13 fp_dm2+4 1879 li $v0 3 1880 syscall 1881 1882 li $v0 4 # syscall 4 (print_str) 1883 la $a0 syscall5_ 1884 syscall 1885 1886 li $v0 5 # syscall 5 (read_int) 1887 syscall 1888 bne $v0 17 fail 1889 1890 li $v0 5 # syscall 5 (read_int) 1891 syscall 1892 bne $v0 1717 fail 1893 1894 li $v0 6 # syscall 6 (read_float) 1895 syscall 1896 lwc1 $f2 fp_c1 1897 c.eq.s $f0, $f2 1898 bc1f fail 1899 1900 li $v0 6 # syscall 6 (read_float) 1901 syscall 1902 lwc1 $f2 fp_c2 1903 c.eq.s $f0, $f2 1904 bc1f fail 1905 1906 li $v0 7 # syscall 7 (read_double) 1907 syscall 1908 lwc1 $f2 fp_c3 1909 lwc1 $f3 fp_c3+4 1910 c.eq.d $f0, $f2 1911 bc1f fail 1912 1913 li $v0 7 # syscall 7 (read_double) 1914 syscall 1915 lwc1 $f2 fp_c4 1916 lwc1 $f3 fp_c4+4 1917 c.eq.d $f0, $f2 1918 bc1f fail 1919 1920 1921 .data 1922teq_: .asciiz "Testing TEQ\nExpect one exception message:\n " 1923 .text 1924 li $v0 4 # syscall 4 (print_str) 1925 la $a0 teq_ 1926 syscall 1927 1928 li $2 1 1929 teq $0 $2 1930 teq $0 $0 1931 1932 1933 .data 1934teqi_: .asciiz "Testing TEQI\nExpect one exception message:\n " 1935 .text 1936 li $v0 4 # syscall 4 (print_str) 1937 la $a0 teqi_ 1938 syscall 1939 1940 teqi $0 4 1941 teqi $0 0 1942 1943 1944 .data 1945tge_: .asciiz "Testing TGE\nExpect two exception messages:\n " 1946 .text 1947 li $v0 4 # syscall 4 (print_str) 1948 la $a0 tge_ 1949 syscall 1950 1951 li $2 1 1952 li $3 2 1953 tge $2 $3 1954 tge $0 $0 1955 tge $3 $2 1956 1957 1958 .data 1959tgei_: .asciiz "Testing TGEI\nExpect two exception messages:\n " 1960 .text 1961 li $v0 4 # syscall 4 (print_str) 1962 la $a0 tgei_ 1963 syscall 1964 1965 li $2 8 1966 tgei $0 4 1967 tgei $0 0 1968 tgei $2 1 1969 1970 1971 .data 1972tgeiu_: .asciiz "Testing TGEIU\nExpect two exception messages:\n " 1973 .text 1974 li $v0 4 # syscall 4 (print_str) 1975 la $a0 tgeiu_ 1976 syscall 1977 1978 li $2 -4 1979 tgeiu $0 4 1980 tgeiu $0 0 1981 tgeiu $2 1 1982 1983 1984 .data 1985tgeu_: .asciiz "Testing TGEU\nExpect two exception messages:\n " 1986 .text 1987 li $v0 4 # syscall 4 (print_str) 1988 la $a0 tgeu_ 1989 syscall 1990 1991 li $2 1 1992 li $3 -4 1993 tgeu $2 $3 1994 tgeu $0 $0 1995 tgeu $3 $2 1996 1997 1998 .data 1999tlb_: .asciiz "Testing TLB operations:\n " 2000 .text 2001 li $v0 4 # syscall 4 (print_str) 2002 la $a0 tlb_ 2003 syscall 2004 tlbp 2005 tlbr 2006 tlbwi 2007 tlbr 2008 2009 2010 .data 2011tlt_: .asciiz "Testing TLT\nExpect one exception message:\n " 2012 .text 2013 li $v0 4 # syscall 4 (print_str) 2014 la $a0 tlt_ 2015 syscall 2016 2017 li $2 1 2018 li $3 2 2019 tlt $2 $3 2020 tlt $0 $0 2021 tlt $3 $2 2022 2023 2024 .data 2025tlti_: .asciiz "Testing TLTI\nExpect one exception message:\n " 2026 .text 2027 li $v0 4 # syscall 4 (print_str) 2028 la $a0 tlti_ 2029 syscall 2030 2031 li $2 8 2032 tlti $0 4 2033 tlti $0 0 2034 tlti $2 1 2035 2036 2037 .data 2038tltiu_: .asciiz "Testing TLTIU\nExpect one exception message:\n " 2039 .text 2040 li $v0 4 # syscall 4 (print_str) 2041 la $a0 tltiu_ 2042 syscall 2043 2044 li $2 -4 2045 tltiu $0 4 2046 tltiu $0 0 2047 tltiu $2 1 2048 2049 2050 .data 2051tltu_: .asciiz "Testing TLTU\nExpect one exception message:\n " 2052 .text 2053 li $v0 4 # syscall 4 (print_str) 2054 la $a0 tltu_ 2055 syscall 2056 2057 li $2 1 2058 li $3 -4 2059 tltu $2 $3 2060 tltu $0 $0 2061 tltu $3 $2 2062 2063 2064 .data 2065tne_: .asciiz "Testing TNE\nExpect one exception message:\n " 2066 .text 2067 li $v0 4 # syscall 4 (print_str) 2068 la $a0 tne_ 2069 syscall 2070 2071 li $2 1 2072 tne $0 $2 2073 tne $0 $0 2074 2075 2076 .data 2077tnei_: .asciiz "Testing TNEI\nExpect one exception message:\n " 2078 .text 2079 li $v0 4 # syscall 4 (print_str) 2080 la $a0 tnei_ 2081 syscall 2082 2083 tnei $0 4 2084 tnei $0 0 2085 2086 2087 .data 2088xor_: .asciiz "Testing XOR\n" 2089 .text 2090 li $v0 4 # syscall 4 (print_str) 2091 la $a0 xor_ 2092 syscall 2093 2094 li $2 1 2095 li $3 -1 2096 2097 xor $4 $0 $0 2098 bne $4 0 fail 2099 xor $4 $3 $3 2100 bne $4 0 fail 2101 xor $4 $2 $3 2102 bne $4 0xfffffffe fail 2103 2104 .data 2105xori_: .asciiz "Testing XORI\n" 2106 .text 2107 li $v0 4 # syscall 4 (print_str) 2108 la $a0 xori_ 2109 syscall 2110 2111 li $2 1 2112 li $3 -1 2113 2114 xori $4 $0 0 2115 bne $4 0 fail 2116 xori $4 $3 0xffff 2117 bne $4 0xffff0000 fail 2118 xori $4 $2 0xffff 2119 bne $4 0x0000fffe fail 2120 2121 2122# 2123# Testing Floating Point Ops 2124# 2125 2126 .data 2127abs.s_:.asciiz "Testing ABS.S\n" 2128fp_s100:.float 100.0 2129fp_sm100:.float -100.0 2130 .text 2131 li $v0 4 # syscall 4 (print_str) 2132 la $a0 abs.s_ 2133 syscall 2134 2135 lw $4 fp_s100 2136 lwc1 $f0 fp_s100 2137 abs.s $f2 $f0 2138 mfc1 $5 $f2 2139 bne $4 $5 fail 2140 2141 lwc1 $f0 fp_sm100 2142 abs.s $f2 $f0 2143 mfc1 $5 $f2 2144 bne $4 $5 fail 2145 2146 2147 .data 2148abs.d_:.asciiz "Testing ABS.D\n" 2149fp_d100:.double 100.0 2150fp_dm100:.double -100.0 2151 .text 2152 li $v0 4 # syscall 4 (print_str) 2153 la $a0 abs.d_ 2154 syscall 2155 2156 lw $4 fp_d100 2157 lw $5 fp_d100+4 2158 lwc1 $f0 fp_d100 2159 lwc1 $f1 fp_d100+4 2160 abs.d $f2 $f0 2161 mfc1 $6 $f2 2162 mfc1 $7 $f3 2163 bne $4 $6 fail 2164 bne $5 $7 fail 2165 2166 lwc1 $f0 fp_dm100 2167 lwc1 $f1 fp_dm100+4 2168 abs.d $f2 $f0 2169 mfc1 $6 $f2 2170 mfc1 $7 $f3 2171 bne $4 $6 fail 2172 bne $5 $7 fail 2173 2174 2175 .data 2176add.s_: .asciiz "Testing ADD.S\n" 2177fp_s0: .float 0.0 2178fp_s1: .float 1.0 2179 .text 2180 li $v0 4 # syscall 4 (print_str) 2181 la $a0 add.s_ 2182 syscall 2183 2184 lw $4 fp_s0 2185 lwc1 $f0 fp_s0 2186 add.s $f2 $f0 $f0 2187 mfc1 $6 $f2 2188 bne $4 $6 fail 2189 2190 lw $4 fp_s1 2191 lwc1 $f0 fp_s0 2192 lwc1 $f2 fp_s1 2193 add.s $f4 $f0 $f2 2194 mfc1 $6 $f4 2195 bne $4 $6 fail 2196 2197 lw $4 fp_s0 2198 lwc1 $f0 fp_s1 2199 lwc1 $f2 fp_sm1 2200 add.s $f4 $f0 $f2 2201 mfc1 $6 $f4 2202 bne $4 $6 fail 2203 2204 2205 .data 2206add.d_: .asciiz "Testing ADD.D\n" 2207fp_d0: .double 0.0 2208fp_d1: .double 1.0 2209fp_dm1: .double -1.0 2210 .text 2211 li $v0 4 # syscall 4 (print_str) 2212 la $a0 add.d_ 2213 syscall 2214 2215 lw $4 fp_d0 2216 lw $5 fp_d0+4 2217 lwc1 $f0 fp_d0 2218 lwc1 $f1 fp_d0+4 2219 add.d $f2 $f0 $f0 2220 mfc1 $6 $f2 2221 mfc1 $7 $f3 2222 bne $4 $6 fail 2223 bne $5 $7 fail 2224 2225 lw $4 fp_d1 2226 lw $5 fp_d1+4 2227 lwc1 $f0 fp_d0 2228 lwc1 $f1 fp_d0+4 2229 lwc1 $f2 fp_d1 2230 lwc1 $f3 fp_d1+4 2231 add.d $f4 $f0 $f2 2232 mfc1 $6 $f4 2233 mfc1 $7 $f5 2234 bne $4 $6 fail 2235 bne $5 $7 fail 2236 2237 lw $4 fp_d0 2238 lw $5 fp_d0+4 2239 lwc1 $f0 fp_d1 2240 lwc1 $f1 fp_d1+4 2241 lwc1 $f2 fp_dm1 2242 lwc1 $f3 fp_dm1+4 2243 add.d $f4 $f0 $f2 2244 mfc1 $6 $f4 2245 mfc1 $7 $f5 2246 bne $4 $6 fail 2247 bne $5 $7 fail 2248 2249 2250 .data 2251bc1f_: .asciiz "Testing BC1F and BC1T\n" 2252 .text 2253 li $v0 4 # syscall 4 (print_str) 2254 la $a0 bc1f_ 2255 syscall 2256 2257 lwc1 $f0 fp_s1 2258 lwc1 $f2 fp_s1 2259 lwc1 $f4 fp_s1p5 2260 c.eq.s $f0 $f2 2261 bc1f fail 2262 bc1t l205 2263 j fail 2264l205: c.eq.s $f0 $f4 2265 bc1t fail 2266 bc1f l206 2267 j fail 2268l206: 2269 2270 2271 2272 2273# ToDo: Check order/unordered exception in floating point comparison. 2274 2275 .data 2276c.eq.d_: .asciiz "Testing C.EQ.D\n" 2277 .text 2278 li $v0 4 # syscall 4 (print_str) 2279 la $a0 c.eq.d_ 2280 syscall 2281 2282 lwc1 $f0 fp_d1 2283 lwc1 $f1 fp_d1+4 2284 lwc1 $f2 fp_d1 2285 lwc1 $f3 fp_d1+4 2286 lwc1 $f4 fp_d1p5 2287 lwc1 $f5 fp_d1p5+4 2288 c.eq.d $f0 $f2 2289 bc1f fail 2290 bc1t l200 2291 j fail 2292l200: c.eq.d $f0 $f4 2293 bc1t fail 2294 bc1f l201 2295 j fail 2296l201: 2297 2298 2299 .data 2300c.eq.s_: .asciiz "Testing C.EQ.S\n" 2301 .text 2302 li $v0 4 # syscall 4 (print_str) 2303 la $a0 c.eq.s_ 2304 syscall 2305 2306 lwc1 $f0 fp_s1 2307 lwc1 $f2 fp_s1 2308 lwc1 $f4 fp_s1p5 2309 c.eq.s $f0 $f2 2310 bc1f fail 2311 bc1t l210 2312 j fail 2313l210: c.eq.s $f0 $f4 2314 bc1t fail 2315 bc1f l211 2316 j fail 2317l211: 2318 2319 2320 .data 2321c.f.d_: .asciiz "Testing C.F.D\n" 2322 .text 2323 li $v0 4 # syscall 4 (print_str) 2324 la $a0 c.f.d_ 2325 syscall 2326 2327 lwc1 $f0 fp_d1 2328 lwc1 $f1 fp_d1+4 2329 lwc1 $f2 fp_d1 2330 lwc1 $f3 fp_d1+4 2331 lwc1 $f4 fp_d1p5 2332 lwc1 $f5 fp_d1p5+4 2333 c.f.d $f0 $f2 2334 bc1t fail 2335 bc1f l220 2336 j fail 2337l220: c.f.d $f0 $f4 2338 bc1t fail 2339 bc1f l221 2340 j fail 2341l221: 2342 2343 2344 .data 2345c.f.s_: .asciiz "Testing C.F.S\n" 2346 .text 2347 li $v0 4 # syscall 4 (print_str) 2348 la $a0 c.f.s_ 2349 syscall 2350 2351 lwc1 $f0 fp_s1 2352 lwc1 $f2 fp_s1 2353 lwc1 $f4 fp_s1p5 2354 c.f.s $f0 $f2 2355 bc1t fail 2356 bc1f l230 2357 j fail 2358l230: c.f.s $f0 $f4 2359 bc1t fail 2360 bc1f l231 2361 j fail 2362l231: 2363 2364 2365 .data 2366c.le.d_: .asciiz "Testing C.LE.D\n" 2367 .text 2368 li $v0 4 # syscall 4 (print_str) 2369 la $a0 c.le.d_ 2370 syscall 2371 2372 lwc1 $f0 fp_d1 2373 lwc1 $f1 fp_d1+4 2374 lwc1 $f2 fp_d1p5 2375 lwc1 $f3 fp_d1p5+4 2376 lwc1 $f4 fp_dm2 2377 lwc1 $f5 fp_dm2+4 2378 c.le.d $f0 $f2 2379 bc1f fail 2380 bc1t l240 2381 j fail 2382l240: c.le.d $f2 $f0 2383 bc1t fail 2384 bc1f l241 2385 j fail 2386l241: c.le.d $f0 $f0 2387 bc1f fail 2388 bc1t l242 2389 j fail 2390l242: c.le.d $f4 $f0 2391 bc1f fail 2392 bc1t l243 2393 j fail 2394l243: 2395 2396 2397 .data 2398c.le.s_: .asciiz "Testing C.LE.S\n" 2399fp_sm2: .float -2.0 2400 .text 2401 li $v0 4 # syscall 4 (print_str) 2402 la $a0 c.le.s_ 2403 syscall 2404 2405 lwc1 $f0 fp_s1 2406 lwc1 $f2 fp_s1p5 2407 lwc1 $f4 fp_sm2 2408 c.le.s $f0 $f2 2409 bc1f fail 2410 bc1t l250 2411 j fail 2412l250: c.le.s $f2 $f0 2413 bc1t fail 2414 bc1f l251 2415 j fail 2416l251: c.le.s $f0 $f0 2417 bc1f fail 2418 bc1t l252 2419 j fail 2420l252: c.le.s $f4 $f0 2421 bc1f fail 2422 bc1t l253 2423 j fail 2424l253: 2425 2426 2427 .data 2428c.lt.d_: .asciiz "Testing C.LT.D\n" 2429 .text 2430 li $v0 4 # syscall 4 (print_str) 2431 la $a0 c.lt.d_ 2432 syscall 2433 2434 lwc1 $f0 fp_d1 2435 lwc1 $f1 fp_d1+4 2436 lwc1 $f2 fp_d1p5 2437 lwc1 $f3 fp_d1p5+4 2438 lwc1 $f4 fp_dm2 2439 lwc1 $f5 fp_dm2+4 2440 c.lt.d $f0 $f2 2441 bc1f fail 2442 bc1t l260 2443 j fail 2444l260: c.lt.d $f2 $f0 2445 bc1t fail 2446 bc1f l261 2447 j fail 2448l261: c.lt.d $f0 $f0 2449 bc1t fail 2450 bc1f l262 2451 j fail 2452l262: c.lt.d $f4 $f0 2453 bc1f fail 2454 bc1t l263 2455 j fail 2456l263: 2457 2458 2459 .data 2460c.lt.s_: .asciiz "Testing C.LT.S\n" 2461 .text 2462 li $v0 4 # syscall 4 (print_str) 2463 la $a0 c.lt.s_ 2464 syscall 2465 2466 lwc1 $f0 fp_s1 2467 lwc1 $f2 fp_s1p5 2468 lwc1 $f4 fp_sm2 2469 c.lt.s $f0 $f2 2470 bc1f fail 2471 bc1t l270 2472 j fail 2473l270: c.lt.s $f2 $f0 2474 bc1t fail 2475 bc1f l271 2476 j fail 2477l271: c.lt.s $f0 $f0 2478 bc1t fail 2479 bc1f l272 2480 j fail 2481l272: c.lt.s $f4 $f0 2482 bc1f fail 2483 bc1t l273 2484 j fail 2485l273: 2486 2487 2488 .data 2489c.nge.d_: .asciiz "Testing C.NGE.D\n" 2490 .text 2491 li $v0 4 # syscall 4 (print_str) 2492 la $a0 c.nge.d_ 2493 syscall 2494 2495 lwc1 $f0 fp_d1 2496 lwc1 $f1 fp_d1+4 2497 lwc1 $f2 fp_d1p5 2498 lwc1 $f3 fp_d1p5+4 2499 lwc1 $f4 fp_dm2 2500 lwc1 $f5 fp_dm2+4 2501 c.nge.d $f0 $f2 2502 bc1f fail 2503 bc1t l280 2504 j fail 2505l280: c.nge.d $f2 $f0 2506 bc1t fail 2507 bc1f l281 2508 j fail 2509l281: c.nge.d $f0 $f0 2510 bc1t fail 2511 bc1f l282 2512 j fail 2513l282: c.nge.d $f4 $f0 2514 bc1f fail 2515 bc1t l283 2516 j fail 2517l283: 2518 2519 2520 .data 2521c.nge.s_: .asciiz "Testing C.NGE.S\n" 2522 .text 2523 li $v0 4 # syscall 4 (print_str) 2524 la $a0 c.nge.s_ 2525 syscall 2526 2527 lwc1 $f0 fp_s1 2528 lwc1 $f2 fp_s1p5 2529 lwc1 $f4 fp_sm2 2530 c.nge.s $f0 $f2 2531 bc1f fail 2532 bc1t l290 2533 j fail 2534l290: c.nge.s $f2 $f0 2535 bc1t fail 2536 bc1f l291 2537 j fail 2538l291: c.nge.s $f0 $f0 2539 bc1t fail 2540 bc1f l292 2541 j fail 2542l292: c.nge.s $f4 $f0 2543 bc1f fail 2544 bc1t l293 2545 j fail 2546l293: 2547 2548 2549 .data 2550c.ngle.d_: .asciiz "Testing C.NGLE.D\n" 2551 .text 2552 li $v0 4 # syscall 4 (print_str) 2553 la $a0 c.ngle.d_ 2554 syscall 2555 2556 lwc1 $f0 fp_d1 2557 lwc1 $f1 fp_d1+4 2558 lwc1 $f2 fp_d1 2559 lwc1 $f3 fp_d1+4 2560 lwc1 $f4 fp_d1p5 2561 lwc1 $f5 fp_d1p5+4 2562 c.ngle.d $f0 $f2 2563 bc1t fail 2564l300: c.ngle.d $f0 $f4 2565 bc1t fail 2566l301: 2567 2568 2569 .data 2570c.ngle.s_: .asciiz "Testing C.NGLE.S\n" 2571 .text 2572 li $v0 4 # syscall 4 (print_str) 2573 la $a0 c.ngle.s_ 2574 syscall 2575 2576 lwc1 $f0 fp_s1 2577 lwc1 $f2 fp_s1 2578 lwc1 $f4 fp_s1p5 2579 c.ngle.s $f0 $f2 2580 bc1t fail 2581l310: c.ngle.s $f0 $f4 2582 bc1t fail 2583l311: 2584 2585 2586 .data 2587c.ngl.d_: .asciiz "Testing C.NGL.D\n" 2588 .text 2589 li $v0 4 # syscall 4 (print_str) 2590 la $a0 c.ngl.d_ 2591 syscall 2592 2593 lwc1 $f0 fp_d1 2594 lwc1 $f1 fp_d1+4 2595 lwc1 $f2 fp_d1 2596 lwc1 $f3 fp_d1+4 2597 lwc1 $f4 fp_d1p5 2598 lwc1 $f5 fp_d1p5+4 2599 c.ngl.d $f0 $f2 2600 bc1f fail 2601 bc1t l320 2602 j fail 2603l320: c.ngl.d $f0 $f4 2604 bc1t fail 2605 bc1f l321 2606 j fail 2607l321: 2608 2609 2610 .data 2611c.ngl.s_: .asciiz "Testing C.NGL.S\n" 2612 .text 2613 li $v0 4 # syscall 4 (print_str) 2614 la $a0 c.ngl.s_ 2615 syscall 2616 2617 lwc1 $f0 fp_s1 2618 lwc1 $f2 fp_s1 2619 lwc1 $f4 fp_s1p5 2620 c.ngl.s $f0 $f2 2621 bc1f fail 2622 bc1t l330 2623 j fail 2624l330: c.ngl.s $f0 $f4 2625 bc1t fail 2626 bc1f l331 2627 j fail 2628l331: 2629 2630 2631 .data 2632c.ngt.d_: .asciiz "Testing C.NGT.D\n" 2633 .text 2634 li $v0 4 # syscall 4 (print_str) 2635 la $a0 c.ngt.d_ 2636 syscall 2637 2638 lwc1 $f0 fp_d1 2639 lwc1 $f1 fp_d1+4 2640 lwc1 $f2 fp_d1p5 2641 lwc1 $f3 fp_d1p5+4 2642 lwc1 $f4 fp_dm2 2643 lwc1 $f5 fp_dm2+4 2644 c.ngt.d $f0 $f2 2645 bc1f fail 2646 bc1t l340 2647 j fail 2648l340: c.ngt.d $f2 $f0 2649 bc1t fail 2650 bc1f l341 2651 j fail 2652l341: c.ngt.d $f0 $f0 2653 bc1f fail 2654 bc1t l342 2655 j fail 2656l342: c.ngt.d $f4 $f0 2657 bc1f fail 2658 bc1t l343 2659 j fail 2660l343: 2661 2662 2663 .data 2664c.ngt.s_: .asciiz "Testing C.NGT.S\n" 2665 .text 2666 li $v0 4 # syscall 4 (print_str) 2667 la $a0 c.ngt.s_ 2668 syscall 2669 2670 lwc1 $f0 fp_s1 2671 lwc1 $f2 fp_s1p5 2672 lwc1 $f4 fp_sm2 2673 c.ngt.s $f0 $f2 2674 bc1f fail 2675 bc1t l350 2676 j fail 2677l350: c.ngt.s $f2 $f0 2678 bc1t fail 2679 bc1f l351 2680 j fail 2681l351: c.ngt.s $f0 $f0 2682 bc1f fail 2683 bc1t l352 2684 j fail 2685l352: c.ngt.s $f4 $f0 2686 bc1f fail 2687 bc1t l353 2688 j fail 2689l353: 2690 2691 2692 .data 2693c.ole.d_: .asciiz "Testing C.OLE.D\n" 2694 .text 2695 li $v0 4 # syscall 4 (print_str) 2696 la $a0 c.ole.d_ 2697 syscall 2698 2699 lwc1 $f0 fp_d1 2700 lwc1 $f1 fp_d1+4 2701 lwc1 $f2 fp_d1p5 2702 lwc1 $f3 fp_d1p5+4 2703 lwc1 $f4 fp_dm2 2704 lwc1 $f5 fp_dm2+4 2705 c.ole.d $f0 $f2 2706 bc1f fail 2707 bc1t l360 2708 j fail 2709l360: c.ole.d $f2 $f0 2710 bc1t fail 2711 bc1f l361 2712 j fail 2713l361: c.ole.d $f0 $f0 2714 bc1f fail 2715 bc1t l362 2716 j fail 2717l362: c.ole.d $f4 $f0 2718 bc1f fail 2719 bc1t l363 2720 j fail 2721l363: 2722 2723 2724 .data 2725c.ole.s_: .asciiz "Testing C.OLE.S\n" 2726 .text 2727 li $v0 4 # syscall 4 (print_str) 2728 la $a0 c.ole.s_ 2729 syscall 2730 2731 lwc1 $f0 fp_s1 2732 lwc1 $f2 fp_s1p5 2733 lwc1 $f4 fp_sm2 2734 c.ole.s $f0 $f2 2735 bc1f fail 2736 bc1t l370 2737 j fail 2738l370: c.ole.s $f2 $f0 2739 bc1t fail 2740 bc1f l371 2741 j fail 2742l371: c.ole.s $f0 $f0 2743 bc1f fail 2744 bc1t l372 2745 j fail 2746l372: c.ole.s $f4 $f0 2747 bc1f fail 2748 bc1t l373 2749 j fail 2750l373: 2751 2752 2753 .data 2754c.seq.d_: .asciiz "Testing C.SEQ.D\n" 2755 .text 2756 li $v0 4 # syscall 4 (print_str) 2757 la $a0 c.seq.d_ 2758 syscall 2759 2760 lwc1 $f0 fp_d1 2761 lwc1 $f1 fp_d1+4 2762 lwc1 $f2 fp_d1 2763 lwc1 $f3 fp_d1+4 2764 lwc1 $f4 fp_d1p5 2765 lwc1 $f5 fp_d1p5+4 2766 c.seq.d $f0 $f2 2767 bc1f fail 2768 bc1t l380 2769 j fail 2770l380: c.seq.d $f0 $f4 2771 bc1t fail 2772 bc1f l381 2773 j fail 2774l381: 2775 2776 2777 .data 2778c.seq.s_: .asciiz "Testing C.SEQ.S\n" 2779 .text 2780 li $v0 4 # syscall 4 (print_str) 2781 la $a0 c.seq.s_ 2782 syscall 2783 2784 lwc1 $f0 fp_s1 2785 lwc1 $f2 fp_s1 2786 lwc1 $f4 fp_s1p5 2787 c.seq.s $f0 $f2 2788 bc1f fail 2789 bc1t l390 2790 j fail 2791l390: c.seq.s $f0 $f4 2792 bc1t fail 2793 bc1f l391 2794 j fail 2795l391: 2796 2797 2798 .data 2799c.sf.d_: .asciiz "Testing C.SF.D\n" 2800 .text 2801 li $v0 4 # syscall 4 (print_str) 2802 la $a0 c.sf.d_ 2803 syscall 2804 2805 lwc1 $f0 fp_d1 2806 lwc1 $f1 fp_d1+4 2807 lwc1 $f2 fp_d1 2808 lwc1 $f3 fp_d1+4 2809 lwc1 $f4 fp_d1p5 2810 lwc1 $f5 fp_d1p5+4 2811 c.sf.d $f0 $f2 2812 bc1t fail 2813l400: c.sf.d $f0 $f4 2814 bc1t fail 2815l401: 2816 2817 2818 .data 2819c.sf.s_: .asciiz "Testing C.SF.S\n" 2820 .text 2821 li $v0 4 # syscall 4 (print_str) 2822 la $a0 c.sf.s_ 2823 syscall 2824 2825 lwc1 $f0 fp_s1 2826 lwc1 $f2 fp_s1 2827 lwc1 $f4 fp_s1p5 2828 c.sf.s $f0 $f2 2829 bc1t fail 2830l410: c.sf.s $f0 $f4 2831 bc1t fail 2832l411: 2833 2834 2835 .data 2836c.ueq.d_: .asciiz "Testing C.UEQ.D\n" 2837 .text 2838 li $v0 4 # syscall 4 (print_str) 2839 la $a0 c.ueq.d_ 2840 syscall 2841 2842 lwc1 $f0 fp_d1 2843 lwc1 $f1 fp_d1+4 2844 lwc1 $f2 fp_d1 2845 lwc1 $f3 fp_d1+4 2846 lwc1 $f4 fp_d1p5 2847 lwc1 $f5 fp_d1p5+4 2848 c.ueq.d $f0 $f2 2849 bc1f fail 2850 bc1t l420 2851 j fail 2852l420: c.ueq.d $f0 $f4 2853 bc1t fail 2854 bc1f l421 2855 j fail 2856l421: 2857 2858 2859 .data 2860c.ueq.s_: .asciiz "Testing C.UEQ.S\n" 2861 .text 2862 li $v0 4 # syscall 4 (print_str) 2863 la $a0 c.ueq.s_ 2864 syscall 2865 2866 lwc1 $f0 fp_s1 2867 lwc1 $f2 fp_s1 2868 lwc1 $f4 fp_s1p5 2869 c.ueq.s $f0 $f2 2870 bc1f fail 2871 bc1t l430 2872 j fail 2873l430: c.ueq.s $f0 $f4 2874 bc1t fail 2875 bc1f l431 2876 j fail 2877l431: 2878 2879 2880 .data 2881c.ule.d_: .asciiz "Testing C.ULE.D\n" 2882 .text 2883 li $v0 4 # syscall 4 (print_str) 2884 la $a0 c.ule.d_ 2885 syscall 2886 2887 lwc1 $f0 fp_d1 2888 lwc1 $f1 fp_d1+4 2889 lwc1 $f2 fp_d1p5 2890 lwc1 $f3 fp_d1p5+4 2891 lwc1 $f4 fp_dm2 2892 lwc1 $f5 fp_dm2+4 2893 c.ule.d $f0 $f2 2894 bc1f fail 2895 bc1t l440 2896 j fail 2897l440: c.ule.d $f2 $f0 2898 bc1t fail 2899 bc1f l441 2900 j fail 2901l441: c.ule.d $f0 $f0 2902 bc1f fail 2903 bc1t l442 2904 j fail 2905l442: c.ule.d $f4 $f0 2906 bc1f fail 2907 bc1t l443 2908 j fail 2909l443: 2910 2911 2912 .data 2913c.ule.s_: .asciiz "Testing C.ULE.S\n" 2914 .text 2915 li $v0 4 # syscall 4 (print_str) 2916 la $a0 c.ule.s_ 2917 syscall 2918 2919 lwc1 $f0 fp_s1 2920 lwc1 $f2 fp_s1p5 2921 lwc1 $f4 fp_sm2 2922 c.ule.s $f0 $f2 2923 bc1f fail 2924 bc1t l450 2925 j fail 2926l450: c.ule.s $f2 $f0 2927 bc1t fail 2928 bc1f l451 2929 j fail 2930l451: c.ule.s $f0 $f0 2931 bc1f fail 2932 bc1t l452 2933 j fail 2934l452: c.ule.s $f4 $f0 2935 bc1f fail 2936 bc1t l453 2937 j fail 2938l453: 2939 2940 2941 .data 2942c.un.d_: .asciiz "Testing C.UN.D\n" 2943 .text 2944 li $v0 4 # syscall 4 (print_str) 2945 la $a0 c.un.d_ 2946 syscall 2947 2948 lwc1 $f0 fp_d1 2949 lwc1 $f1 fp_d1+4 2950 lwc1 $f2 fp_d1 2951 lwc1 $f3 fp_d1+4 2952 lwc1 $f4 fp_d1p5 2953 lwc1 $f5 fp_d1p5+4 2954 c.un.d $f0 $f2 2955 bc1t fail 2956 bc1f l460 2957 j fail 2958l460: c.un.d $f0 $f4 2959 bc1t fail 2960 bc1f l461 2961 j fail 2962l461: 2963 2964 2965 .data 2966c.un.s_: .asciiz "Testing C.UN.S\n" 2967 .text 2968 li $v0 4 # syscall 4 (print_str) 2969 la $a0 c.un.s_ 2970 syscall 2971 2972 lwc1 $f0 fp_s1 2973 lwc1 $f2 fp_s1 2974 lwc1 $f4 fp_s1p5 2975 c.un.s $f0 $f2 2976 bc1t fail 2977 bc1f l470 2978 j fail 2979l470: c.un.s $f0 $f4 2980 bc1t fail 2981 bc1f l471 2982 j fail 2983l471: 2984 2985 2986# CFC1 and CTC1 tested previously 2987 2988 2989 .data 2990ceil.w.d_: .asciiz "Testing CEIL.W.D\n" 2991 .text 2992 li $v0 4 # syscall 4 (print_str) 2993 la $a0 ceil.w.d_ 2994 syscall 2995 2996 lwc1 $f2 fp_d0 2997 lwc1 $f3 fp_d0+4 2998 ceil.w.d $f0 $f2 2999 mfc1 $6 $f0 3000 bne $6 0 fail 3001 3002 lwc1 $f2 fp_d1 3003 lwc1 $f3 fp_d1+4 3004 ceil.w.d $f0 $f2 3005 mfc1 $6 $f0 3006 bne $6 1 fail 3007 3008 lwc1 $f2 fp_d1p5 3009 lwc1 $f3 fp_d1p5+4 3010 ceil.w.d $f0 $f2 3011 mfc1 $6 $f0 3012 bne $6 2 fail 3013 3014 3015 .data 3016ceil.w.s_: .asciiz "Testing CEIL.W.S\n" 3017 .text 3018 li $v0 4 # syscall 4 (print_str) 3019 la $a0 ceil.w.s_ 3020 syscall 3021 3022 lwc1 $f2 fp_s0 3023 ceil.w.s $f0 $f2 3024 mfc1 $6 $f0 3025 bne $6 0 fail 3026 3027 lwc1 $f2 fp_s1 3028 ceil.w.s $f0 $f2 3029 mfc1 $6 $f0 3030 bne $6 1 fail 3031 3032 lwc1 $f2 fp_s1p5 3033 ceil.w.s $f0 $f2 3034 mfc1 $6 $f0 3035 bne $6 2 fail 3036 3037 3038 .data 3039cvt.d.s_: .asciiz "Testing CVT.D.S\n" 3040 .text 3041 li $v0 4 # syscall 4 (print_str) 3042 la $a0 cvt.d.s_ 3043 syscall 3044 3045 lw $4 fp_d0 3046 lw $5 fp_d0+4 3047 lwc1 $f0 fp_s0 3048 cvt.d.s $f2 $f0 3049 mfc1 $6 $f2 3050 mfc1 $7 $f3 3051 bne $4 $6 fail 3052 bne $5 $7 fail 3053 3054 lw $4 fp_d1 3055 lw $5 fp_d1+4 3056 lwc1 $f0 fp_s1 3057 cvt.d.s $f2 $f0 3058 mfc1 $6 $f2 3059 mfc1 $7 $f3 3060 bne $4 $6 fail 3061 bne $5 $7 fail 3062 3063 lw $4 fp_dm1 3064 lw $5 fp_dm1+4 3065 lwc1 $f0 fp_sm1 3066 cvt.d.s $f2 $f0 3067 mfc1 $6 $f2 3068 mfc1 $7 $f3 3069 bne $4 $6 fail 3070 bne $5 $7 fail 3071 3072 3073 .data 3074cvt.d.w_: .asciiz "Testing CVT.D.W\n" 3075 .text 3076 li $v0 4 # syscall 4 (print_str) 3077 la $a0 cvt.d.w_ 3078 syscall 3079 3080 lw $4 fp_d0 3081 lw $5 fp_d0+4 3082 mtc1 $0 $0 3083 cvt.d.w $f2 $f0 3084 mfc1 $6 $f2 3085 mfc1 $7 $f3 3086 bne $4 $6 fail 3087 bne $5 $7 fail 3088 3089 lw $4 fp_d1 3090 lw $5 fp_d1+4 3091 li $t1 1 3092 mtc1 $t1 $0 3093 cvt.d.w $f2 $f0 3094 mfc1 $6 $f2 3095 mfc1 $7 $f3 3096 bne $4 $6 fail 3097 bne $5 $7 fail 3098 3099 lw $4 fp_dm1 3100 lw $5 fp_dm1+4 3101 li $t1 -1 3102 mtc1 $t1 $0 3103 cvt.d.w $f2 $f0 3104 mfc1 $6 $f2 3105 mfc1 $7 $f3 3106 bne $4 $6 fail 3107 bne $5 $7 fail 3108 3109 3110 .data 3111cvt.s.d_: .asciiz "Testing CVT.S.D\n" 3112 .text 3113 li $v0 4 # syscall 4 (print_str) 3114 la $a0 cvt.s.d_ 3115 syscall 3116 3117 lw $4 fp_s0 3118 lwc1 $f0 fp_d0 3119 lwc1 $f1 fp_d0+4 3120 cvt.s.d $f2 $f0 3121 mfc1 $6 $f2 3122 bne $4 $6 fail 3123 3124 lw $4 fp_s1 3125 lwc1 $f0 fp_d1 3126 lwc1 $f1 fp_d1+4 3127 cvt.s.d $f2 $f0 3128 mfc1 $6 $f2 3129 bne $4 $6 fail 3130 3131 lw $4 fp_sm1 3132 lwc1 $f0 fp_dm1 3133 lwc1 $f1 fp_dm1+4 3134 cvt.s.d $f2 $f0 3135 mfc1 $6 $f2 3136 bne $4 $6 fail 3137 3138 3139 .data 3140cvt.s.w_: .asciiz "Testing CVT.S.W\n" 3141 .text 3142 li $v0 4 # syscall 4 (print_str) 3143 la $a0 cvt.s.w_ 3144 syscall 3145 3146 lw $4 fp_s0 3147 mtc1 $0 $0 3148 cvt.s.w $f2 $f0 3149 mfc1 $6 $f2 3150 bne $4 $6 fail 3151 3152 lw $4 fp_s1 3153 li $t1 1 3154 mtc1 $t1 $0 3155 cvt.s.w $f2 $f0 3156 mfc1 $6 $f2 3157 bne $4 $6 fail 3158 3159 lw $4 fp_sm1 3160 li $t1 -1 3161 mtc1 $t1 $0 3162 cvt.s.w $f2 $f0 3163 mfc1 $6 $f2 3164 bne $4 $6 fail 3165 3166 3167 .data 3168cvt.w.d_: .asciiz "Testing CVT.W.D\n" 3169 .text 3170 li $v0 4 # syscall 4 (print_str) 3171 la $a0 cvt.w.d_ 3172 syscall 3173 3174 lwc1 $f0 fp_d0 3175 lwc1 $f1 fp_d0+4 3176 cvt.w.d $f2 $f0 3177 mfc1 $6 $f2 3178 bne $0 $6 fail 3179 3180 lwc1 $f0 fp_d1 3181 lwc1 $f1 fp_d1+4 3182 cvt.w.d $f2 $f0 3183 mfc1 $6 $f2 3184 li $4 1 3185 bne $4 $6 fail 3186 3187 lwc1 $f0 fp_dm1 3188 lwc1 $f1 fp_dm1+4 3189 cvt.w.d $f2 $f0 3190 mfc1 $6 $f2 3191 li $4 -1 3192 bne $4 $6 fail 3193 3194 3195 .data 3196cvt.w.s_: .asciiz "Testing CVT.W.S\n" 3197 .text 3198 li $v0 4 # syscall 4 (print_str) 3199 la $a0 cvt.w.s_ 3200 syscall 3201 3202 lwc1 $f0 fp_s0 3203 cvt.w.s $f2 $f0 3204 mfc1 $6 $f2 3205 bne $0 $6 fail 3206 3207 lwc1 $f0 fp_s1 3208 cvt.w.s $f2 $f0 3209 mfc1 $6 $f2 3210 li $4 1 3211 bne $4 $6 fail 3212 3213 lwc1 $f0 fp_sm1 3214 cvt.w.s $f2 $f0 3215 mfc1 $6 $f2 3216 li $4 -1 3217 bne $4 $6 fail 3218 3219 3220 .data 3221div.s_: .asciiz "Testing DIV.S\n" 3222fp_s2: .float 2.0 3223fp_s3: .float 3.0 3224fp_s1p5:.float 1.5 3225 .text 3226 li $v0 4 # syscall 4 (print_str) 3227 la $a0 div.s_ 3228 syscall 3229 3230 lw $4 fp_s1 3231 lwc1 $f0 fp_s1 3232 div.s $f2 $f0 $f0 3233 mfc1 $6 $f2 3234 bne $4 $6 fail 3235 3236 lw $4 fp_s1p5 3237 lwc1 $f0 fp_s3 3238 lwc1 $f2 fp_s2 3239 div.s $f4 $f0 $f2 3240 mfc1 $6 $f4 3241 bne $4 $6 fail 3242 3243 3244 .data 3245div.d_: .asciiz "Testing DIV.D\n" 3246fp_d2: .double 2.0 3247fp_d3: .double 3.0 3248fp_d1p5:.double 1.5 3249 .text 3250 li $v0 4 # syscall 4 (print_str) 3251 la $a0 div.d_ 3252 syscall 3253 3254 lw $4 fp_d1 3255 lw $5 fp_d1+4 3256 lwc1 $f0 fp_d1 3257 lwc1 $f1 fp_d1+4 3258 div.d $f2 $f0 $f0 3259 mfc1 $6 $f2 3260 mfc1 $7 $f3 3261 bne $4 $6 fail 3262 bne $5 $7 fail 3263 3264 lw $4 fp_d1p5 3265 lw $5 fp_d1p5+4 3266 lwc1 $f0 fp_d3 3267 lwc1 $f1 fp_d3+4 3268 lwc1 $f2 fp_d2 3269 lwc1 $f3 fp_d2+4 3270 div.d $f4 $f0 $f2 3271 mfc1 $6 $f4 3272 mfc1 $7 $f5 3273 bne $4 $6 fail 3274 bne $5 $7 fail 3275 3276 3277 .data 3278floor.w.d_: .asciiz "Testing FLOOR.W.D\n" 3279 .text 3280 li $v0 4 # syscall 4 (print_str) 3281 la $a0 floor.w.d_ 3282 syscall 3283 3284 lwc1 $f2 fp_d0 3285 lwc1 $f3 fp_d0+4 3286 floor.w.d $f0 $f2 3287 mfc1 $6 $f0 3288 bne $6 0 fail 3289 3290 lwc1 $f2 fp_d1 3291 lwc1 $f3 fp_d1+4 3292 floor.w.d $f0 $f2 3293 mfc1 $6 $f0 3294 bne $6 1 fail 3295 3296 lwc1 $f2 fp_d1p5 3297 lwc1 $f3 fp_d1p5+4 3298 floor.w.d $f0 $f2 3299 mfc1 $6 $f0 3300 bne $6 1 fail 3301 3302 3303 .data 3304floor.w.s_: .asciiz "Testing FLOOR.W.S\n" 3305 .text 3306 li $v0 4 # syscall 4 (print_str) 3307 la $a0 floor.w.s_ 3308 syscall 3309 3310 lwc1 $f2 fp_s0 3311 floor.w.s $f0 $f2 3312 mfc1 $6 $f0 3313 bne $6 0 fail 3314 3315 lwc1 $f2 fp_s1 3316 floor.w.s $f0 $f2 3317 mfc1 $6 $f0 3318 bne $6 1 fail 3319 3320 lwc1 $f2 fp_s1p5 3321 floor.w.s $f0 $f2 3322 mfc1 $6 $f0 3323 bne $6 1 fail 3324 3325 3326 .data 3327ldc1_: .asciiz "Testing LDC1\n" 3328 .align 2 3329ldc1d_: .word 0x7f7f7f7f, 0xf7f7f7f7 3330 .text 3331 li $v0 4 # syscall 4 (print_str) 3332 la $a0 ldc1_ 3333 syscall 3334 3335 la $2 ldc1d_ 3336 ldc1 $f0 0($2) 3337 mfc1 $3, $f0 3338 mfc1 $4, $f1 3339 lw $5 0($2) 3340 bne $5 $3 fail 3341 lw $5 4($2) 3342 bne $5 $4 fail 3343 3344 3345 .data 3346l.d_: .asciiz "Testing L.D\n" 3347 .align 2 3348l.dd_: .word 0x7f7f7f7f, 0xf7f7f7f7 3349 .text 3350 li $v0 4 # syscall 4 (print_str) 3351 la $a0 l.d_ 3352 syscall 3353 3354 la $2 l.dd_ 3355 l.d $f0 0($2) 3356 mfc1 $3, $f0 3357 mfc1 $4, $f1 3358 lw $5 0($2) 3359 bne $5 $3 fail 3360 lw $5 4($2) 3361 bne $5 $4 fail 3362 3363 3364 .data 3365lwc1_: .asciiz "Testing LWC1\n" 3366 .align 2 3367lwc1d_: .word 0x7f7f7f7f 3368 .text 3369 li $v0 4 # syscall 4 (print_str) 3370 la $a0 lwc1_ 3371 syscall 3372 3373 la $2 lwc1d_ 3374 lwc1 $f0 0($2) 3375 mfc1 $3 $f0 3376 lw $4 0($2) 3377 bne $4 $3 fail 3378 3379 3380 .data 3381l.s_: .asciiz "Testing L.S\n" 3382 .align 2 3383l.sd_: .word 0x7f7f7f7f 3384 .text 3385 li $v0 4 # syscall 4 (print_str) 3386 la $a0 l.s_ 3387 syscall 3388 3389 la $2 l.sd_ 3390 l.s $f0 0($2) 3391 mfc1 $3 $f0 3392 lw $4 0($2) 3393 bne $4 $3 fail 3394 3395 3396# MFC1 tested previously 3397 3398 3399 .data 3400mov.s_: .asciiz "Testing MOV.S\n" 3401 .text 3402 li $v0 4 # syscall 4 (print_str) 3403 la $a0 mov.s_ 3404 syscall 3405 3406 lw $4 fp_s1 3407 lwc1 $f2 fp_s1 3408 mov.s $f4 $f2 3409 mov.s $f6 $f4 3410 mfc1 $6 $f6 3411 bne $4 $6 fail 3412 3413 .data 3414mov.d_: .asciiz "Testing MOV.D\n" 3415 .text 3416 li $v0 4 # syscall 4 (print_str) 3417 la $a0 mov.d_ 3418 syscall 3419 3420 lw $4 fp_d1 3421 lw $5 fp_d1+4 3422 lwc1 $f2 fp_d1 3423 lwc1 $f3 fp_d1+4 3424 mov.d $f4 $f2 3425 mov.d $f6 $f4 3426 mfc1 $6 $f6 3427 mfc1 $7 $f7 3428 bne $4 $6 fail 3429 bne $5 $7 fail 3430 3431 .data 3432movf.d_:.asciiz "Testing MOVF.D\n" 3433 .text 3434 li $v0 4 # syscall 4 (print_str) 3435 la $a0 movf.d_ 3436 syscall 3437 3438 li $2 0xf0 3439 ctc1 $2 $25 3440 3441 lw $4 fp_d1 3442 lw $5 fp_d1+4 3443 lwc1 $f2 fp_d1 3444 lwc1 $f3 fp_d1+4 3445 mtc1 $0 $6 3446 mtc1 $0 $7 3447 movf.d $f4 $f2 1 3448 movf.d $f6 $f4 7 3449 mfc1 $6 $f4 3450 mfc1 $7 $f5 3451 bne $4 $6 fail 3452 bne $5 $7 fail 3453 mfc1 $6 $f6 3454 mfc1 $7 $f7 3455 bne $6 0 fail 3456 bne $7 0 fail 3457 3458 3459 .data 3460movf.s_:.asciiz "Testing MOVF.S\n" 3461 .text 3462 li $v0 4 # syscall 4 (print_str) 3463 la $a0 movf.s_ 3464 syscall 3465 3466 li $2 0xf0 3467 ctc1 $2 $25 3468 3469 lw $4 fp_s1 3470 lwc1 $f2 fp_s1 3471 mtc1 $0 $6 3472 mtc1 $0 $7 3473 movf.s $f4 $f2 1 3474 movf.s $f6 $f4 7 3475 mfc1 $6 $f4 3476 bne $4 $6 fail 3477 mfc1 $6 $f6 3478 bne $6 0 fail 3479 3480 3481 .data 3482movn.d_:.asciiz "Testing MOVN.D\n" 3483 .text 3484 li $v0 4 # syscall 4 (print_str) 3485 la $a0 movn.d_ 3486 syscall 3487 3488 li $2 2 3489 lw $4 fp_d1 3490 lw $5 fp_d1+4 3491 lwc1 $f0 fp_d1 3492 lwc1 $f1 fp_d1+4 3493 movn.d $f2 $f0 $2 3494 mfc1 $6 $f2 3495 mfc1 $7 $f3 3496 bne $6 $4 fail 3497 bne $7 $5 fail 3498 3499 lwc1 $f0 fp_d1p5 3500 lwc1 $f1 fp_d1p5+4 3501 movn.d $f2 $f0 $0 3502 mfc1 $6 $f2 3503 mfc1 $7 $f3 3504 bne $6 $4 fail 3505 bne $7 $5 fail 3506 3507 3508 .data 3509movn.s_:.asciiz "Testing MOVN.s\n" 3510 .text 3511 li $v0 4 # syscall 4 (print_str) 3512 la $a0 movn.s_ 3513 syscall 3514 3515 li $2 2 3516 lw $4 fp_s1 3517 lwc1 $f0 fp_s1 3518 movn.s $f2 $f0 $2 3519 mfc1 $6 $f2 3520 bne $6 $4 fail 3521 3522 lwc1 $f0 fp_s1p5 3523 movn.s $f2 $f0 $0 3524 mfc1 $6 $f2 3525 bne $6 $4 fail 3526 3527 3528 .data 3529movt.d_:.asciiz "Testing MOVT.D\n" 3530 .text 3531 li $v0 4 # syscall 4 (print_str) 3532 la $a0 movt.d_ 3533 syscall 3534 3535 li $2 0xf 3536 ctc1 $2 $25 3537 3538 lw $4 fp_d1 3539 lw $5 fp_d1+4 3540 lwc1 $f2 fp_d1 3541 lwc1 $f3 fp_d1+4 3542 mtc1 $0 $6 3543 mtc1 $0 $7 3544 movt.d $f4 $f2 1 3545 movt.d $f6 $f4 7 3546 mfc1 $6 $f4 3547 mfc1 $7 $f5 3548 bne $4 $6 fail 3549 bne $5 $7 fail 3550 mfc1 $6 $f6 3551 mfc1 $7 $f7 3552 bne $6 0 fail 3553 bne $7 0 fail 3554 3555 3556 .data 3557movt.s_:.asciiz "Testing MOVT.S\n" 3558 .text 3559 li $v0 4 # syscall 4 (print_str) 3560 la $a0 movt.s_ 3561 syscall 3562 3563 li $2 0xf 3564 ctc1 $2 $25 3565 3566 lw $4 fp_s1 3567 lwc1 $f2 fp_s1 3568 mtc1 $0 $6 3569 mtc1 $0 $7 3570 movt.s $f4 $f2 1 3571 movt.s $f6 $f4 7 3572 mfc1 $6 $f4 3573 bne $4 $6 fail 3574 mfc1 $6 $f6 3575 bne $6 0 fail 3576 3577 3578 .data 3579movz.d_:.asciiz "Testing MOVZ.D\n" 3580 .text 3581 li $v0 4 # syscall 4 (print_str) 3582 la $a0 movz.d_ 3583 syscall 3584 3585 li $2 2 3586 lw $4 fp_d1 3587 lw $5 fp_d1+4 3588 lwc1 $f0 fp_d1 3589 lwc1 $f1 fp_d1+4 3590 movz.d $f2 $f0 $0 3591 mfc1 $6 $f2 3592 mfc1 $7 $f3 3593 bne $6 $4 fail 3594 bne $7 $5 fail 3595 3596 lwc1 $f0 fp_d1p5 3597 lwc1 $f1 fp_d1p5+4 3598 movz.d $f2 $f0 $2 3599 mfc1 $6 $f2 3600 mfc1 $7 $f3 3601 bne $6 $4 fail 3602 bne $7 $5 fail 3603 3604 3605 .data 3606movz.s_:.asciiz "Testing MOVZ.s\n" 3607 .text 3608 li $v0 4 # syscall 4 (print_str) 3609 la $a0 movz.s_ 3610 syscall 3611 3612 li $2 2 3613 lw $4 fp_s1 3614 lwc1 $f0 fp_s1 3615 movz.s $f2 $f0 $0 3616 mfc1 $6 $f2 3617 bne $6 $4 fail 3618 3619 lwc1 $f0 fp_s1p5 3620 movz.s $f2 $f0 $2 3621 mfc1 $6 $f2 3622 bne $6 $4 fail 3623 3624 3625# MTC1 tested previously 3626 3627 .data 3628mul.s_: .asciiz "Testing MUL.S\n" 3629 .text 3630 li $v0 4 # syscall 4 (print_str) 3631 la $a0 mul.s_ 3632 syscall 3633 3634 lw $4 fp_s1 3635 lwc1 $f0 fp_s1 3636 mul.s $f2 $f0 $f0 3637 mfc1 $6 $f2 3638 bne $4 $6 fail 3639 3640 lw $4 fp_s3 3641 lwc1 $f0 fp_s1p5 3642 lwc1 $f2 fp_s2 3643 mul.s $f4 $f0 $f2 3644 mfc1 $6 $f4 3645 bne $4 $6 fail 3646 3647 3648 .data 3649mul.d_: .asciiz "Testing MUL.D\n" 3650 .text 3651 li $v0 4 # syscall 4 (print_str) 3652 la $a0 mul.d_ 3653 syscall 3654 3655 lw $4 fp_d1 3656 lw $5 fp_d1+4 3657 lwc1 $f0 fp_d1 3658 lwc1 $f1 fp_d1+4 3659 mul.d $f2 $f0 $f0 3660 mfc1 $6 $f2 3661 mfc1 $7 $f3 3662 bne $4 $6 fail 3663 bne $5 $7 fail 3664 3665 lw $4 fp_d3 3666 lw $5 fp_d3+4 3667 lwc1 $f0 fp_d1p5 3668 lwc1 $f1 fp_d1p5+4 3669 lwc1 $f2 fp_d2 3670 lwc1 $f3 fp_d2+4 3671 mul.d $f4 $f0 $f2 3672 mfc1 $6 $f4 3673 mfc1 $7 $f5 3674 bne $4 $6 fail 3675 bne $5 $7 fail 3676 3677 3678 .data 3679neg.s_: .asciiz "Testing NEG.S\n" 3680fp_sm3: .float -3.0 3681 .text 3682 li $v0 4 # syscall 4 (print_str) 3683 la $a0 neg.s_ 3684 syscall 3685 3686 lw $4 fp_sm1 3687 lwc1 $f0 fp_s1 3688 neg.s $f2 $f0 3689 mfc1 $6 $f2 3690 bne $4 $6 fail 3691 3692 lw $4 fp_s3 3693 lwc1 $f0 fp_sm3 3694 neg.s $f2 $f0 3695 mfc1 $6 $f2 3696 bne $4 $6 fail 3697 3698 3699 .data 3700neg.d_: .asciiz "Testing NEG.D\n" 3701fp_dm3: .double -3.0 3702 .text 3703 li $v0 4 # syscall 4 (print_str) 3704 la $a0 neg.d_ 3705 syscall 3706 3707 lw $4 fp_dm1 3708 lw $5 fp_dm1+4 3709 lwc1 $f0 fp_d1 3710 lwc1 $f1 fp_d1+4 3711 neg.d $f2 $f0 3712 mfc1 $6 $f2 3713 mfc1 $7 $f3 3714 bne $4 $6 fail 3715 bne $5 $7 fail 3716 3717 lw $4 fp_d3 3718 lw $5 fp_d3+4 3719 lwc1 $f0 fp_dm3 3720 lwc1 $f1 fp_dm3+4 3721 neg.d $f4 $f0 3722 mfc1 $6 $f4 3723 mfc1 $7 $f5 3724 bne $4 $6 fail 3725 bne $5 $7 fail 3726 3727 3728 .data 3729round.w.d_: .asciiz "Testing ROUND.W.D\n" 3730fp_d1p6:.double 1.6 3731 .text 3732 li $v0 4 # syscall 4 (print_str) 3733 la $a0 round.w.d_ 3734 syscall 3735 3736 lwc1 $f2 fp_d0 3737 lwc1 $f3 fp_d0+4 3738 round.w.d $f0 $f2 3739 mfc1 $6 $f0 3740 bne $6 0 fail 3741 3742 lwc1 $f2 fp_d1 3743 lwc1 $f3 fp_d1+4 3744 round.w.d $f0 $f2 3745 mfc1 $6 $f0 3746 bne $6 1 fail 3747 3748 lwc1 $f2 fp_d1p6 3749 lwc1 $f3 fp_d1p6+4 3750 round.w.d $f0 $f2 3751 mfc1 $6 $f0 3752 bne $6 2 fail 3753 3754 3755 .data 3756round.w.s_: .asciiz "Testing ROUND.W.S\n" 3757fp_s1p6:.float 1.6 3758 .text 3759 li $v0 4 # syscall 4 (print_str) 3760 la $a0 round.w.s_ 3761 syscall 3762 3763 lwc1 $f2 fp_s0 3764 round.w.s $f0 $f2 3765 mfc1 $6 $f0 3766 bne $6 0 fail 3767 3768 lwc1 $f2 fp_s1 3769 round.w.s $f0 $f2 3770 mfc1 $6 $f0 3771 bne $6 1 fail 3772 3773 lwc1 $f2 fp_s1p6 3774 round.w.s $f0 $f2 3775 mfc1 $6 $f0 3776 bne $6 2 fail 3777 3778 3779 .data 3780sqrt.d_:.asciiz "Testing SQRT.D\n" 3781fp_d9: .double 9.0 3782 .text 3783 li $v0 4 # syscall 4 (print_str) 3784 la $a0 sqrt.d_ 3785 syscall 3786 3787 ldc1 $f2 fp_d9 3788 sqrt.d $f0 $f2 3789 mul.d $f4 $f0 $f0 3790 c.eq.d $f2 $f4 3791 bc1f 0 fail 3792 3793 3794 .data 3795sqrt.s_:.asciiz "Testing SQRT.S\n" 3796fp_s9: .float 9.0 3797 .text 3798 li $v0 4 # syscall 4 (print_str) 3799 la $a0 sqrt.s_ 3800 syscall 3801 3802 ldc1 $f2 fp_s9 3803 sqrt.s $f0 $f2 3804 mul.s $f4 $f0 $f0 3805 c.eq.s $f2 $f4 3806 bc1f 0 fail 3807 3808 3809 .data 3810sub.s_: .asciiz "Testing SUB.S\n" 3811 .text 3812 li $v0 4 # syscall 4 (print_str) 3813 la $a0 sub.s_ 3814 syscall 3815 3816 lw $4 fp_s0 3817 lwc1 $f0 fp_s0 3818 sub.s $f2 $f0 $f0 3819 mfc1 $6 $f2 3820 bne $4 $6 fail 3821 3822 lw $4 fp_sm1 3823 lw $5 fp_s1 3824 lwc1 $f0 fp_s0 3825 lwc1 $f2 fp_s1 3826 sub.s $f4 $f0 $f2 3827 mfc1 $6 $f4 3828 bne $4 $6 fail 3829 sub.s $f4 $f2 $f0 3830 mfc1 $6 $f4 3831 bne $5 $6 fail 3832 3833 lw $4 fp_s1p5 3834 lwc1 $f0 fp_s1p5 3835 lwc1 $f2 fp_s3 3836 sub.s $f4 $f2 $f0 3837 mfc1 $6 $f4 3838 bne $4 $6 fail 3839 3840 3841 .data 3842sub.d_: .asciiz "Testing SUB.D\n" 3843 .text 3844 li $v0 4 # syscall 4 (print_str) 3845 la $a0 sub.d_ 3846 syscall 3847 3848 lw $4 fp_d0 3849 lw $5 fp_d0+4 3850 lwc1 $f0 fp_d0 3851 lwc1 $f1 fp_d0+4 3852 sub.d $f2 $f0 $f0 3853 mfc1 $6 $f2 3854 mfc1 $7 $f3 3855 bne $4 $6 fail 3856 bne $5 $7 fail 3857 3858 lw $4 fp_dm1 3859 lw $5 fp_dm1+4 3860 lwc1 $f0 fp_d0 3861 lwc1 $f1 fp_d0+4 3862 lwc1 $f2 fp_d1 3863 lwc1 $f3 fp_d1+4 3864 sub.d $f4 $f0 $f2 3865 mfc1 $6 $f4 3866 mfc1 $7 $f5 3867 bne $4 $6 fail 3868 bne $5 $7 fail 3869 lw $4 fp_d1 3870 lw $5 fp_d1+4 3871 sub.d $f4 $f2 $f0 3872 mfc1 $6 $f4 3873 mfc1 $7 $f5 3874 bne $4 $6 fail 3875 bne $5 $7 fail 3876 3877 lw $4 fp_d1p5 3878 lw $5 fp_d1p5+4 3879 lwc1 $f0 fp_d1p5 3880 lwc1 $f1 fp_d1p5+4 3881 lwc1 $f2 fp_d3 3882 lwc1 $f3 fp_d3+4 3883 sub.d $f4 $f2 $f0 3884 mfc1 $6 $f4 3885 mfc1 $7 $f5 3886 bne $4 $6 fail 3887 bne $5 $7 fail 3888 3889 3890 .data 3891trunc.w.d_: .asciiz "Testing TRUNC.W.D\n" 3892 .text 3893 li $v0 4 # syscall 4 (print_str) 3894 la $a0 trunc.w.d_ 3895 syscall 3896 3897 lwc1 $f2 fp_d0 3898 lwc1 $f3 fp_d0+4 3899 trunc.w.d $f0 $f2 3900 mfc1 $6 $f0 3901 bne $6 0 fail 3902 3903 lwc1 $f2 fp_d1 3904 lwc1 $f3 fp_d1+4 3905 trunc.w.d $f0 $f2 3906 mfc1 $6 $f0 3907 bne $6 1 fail 3908 3909 lwc1 $f2 fp_d1p6 3910 lwc1 $f3 fp_d1p6+4 3911 trunc.w.d $f0 $f2 3912 mfc1 $6 $f0 3913 bne $6 1 fail 3914 3915 3916 .data 3917trunc.w.s_: .asciiz "Testing TRUNC.W.S\n" 3918 .text 3919 li $v0 4 # syscall 4 (print_str) 3920 la $a0 trunc.w.s_ 3921 syscall 3922 3923 lwc1 $f2 fp_s0 3924 trunc.w.s $f0 $f2 3925 mfc1 $6 $f0 3926 bne $6 0 fail 3927 3928 lwc1 $f2 fp_s1 3929 trunc.w.s $f0 $f2 3930 mfc1 $6 $f0 3931 bne $6 1 fail 3932 3933 lwc1 $f2 fp_s1p6 3934 trunc.w.s $f0 $f2 3935 mfc1 $6 $f0 3936 bne $6 1 fail 3937 3938 3939# 3940# Testing Pseudo Ops 3941# 3942 3943 .data 3944abs_: .asciiz "Testing ABS\n" 3945 .text 3946 li $v0 4 # syscall 4 (print_str) 3947 la $a0 abs_ 3948 syscall 3949 3950 li $2 1 3951 abs $3 $2 3952 bne $3 1 fail 3953 3954 li $2 -1 3955 abs $2 $2 3956 bne $2 1 fail 3957 3958 li $2 0 3959 abs $2 $2 3960 bne $2 0 fail 3961 3962 3963 .data 3964b_: .asciiz "Testing B\n" 3965 .text 3966 li $v0 4 # syscall 4 (print_str) 3967 la $a0 b_ 3968 syscall 3969 3970 3971 b l101 3972 b fail 3973l101: 3974 3975 3976 .data 3977bal_: .asciiz "Testing BAL\n" 3978 .text 3979 li $v0 4 # syscall 4 (print_str) 3980 la $a0 bal_ 3981 syscall 3982 3983 bal l102 3984l103: j l104 3985l102: la $4 l103 3986 bne $31 $4 fail 3987 jr $31 3988l104: 3989 3990 3991 .data 3992beqz_: .asciiz "Testing BEQZ\n" 3993 .text 3994 li $v0 4 # syscall 4 (print_str) 3995 la $a0 beqz_ 3996 syscall 3997 3998 beqz $0 l105 3999 j fail 4000l105: li $2 1 4001 beqz $2 fail 4002 4003 4004 .data 4005bge_: .asciiz "Testing BGE\n" 4006 .text 4007 li $v0 4 # syscall 4 (print_str) 4008 la $a0 bge_ 4009 syscall 4010 4011 bge $0 $0 l106 4012 j fail 4013l106: li $2 1 4014 bge $0 $2 fail 4015 bge $2 $0 l107 4016 j fail 4017l107: li $3 -1 4018 bge $3 $2 fail 4019 bge $2 $3 l108 4020 j fail 4021l108: 4022 4023 bge $0 0 l109 4024 j fail 4025l109: li $2 1 4026 bge $0 1 fail 4027 bge $2 0 l110 4028 j fail 4029l110: li $3 -1 4030 bge $3 1 fail 4031 bge $2 -1 l111 4032 j fail 4033l111: 4034 4035 4036 .data 4037bgeu_: .asciiz "Testing BGEU\n" 4038 .text 4039 li $v0 4 # syscall 4 (print_str) 4040 la $a0 bgeu_ 4041 syscall 4042 4043 bgeu $0 $0 l112 4044 j fail 4045l112: li $2 1 4046 bgeu $0 $2 fail 4047 bgeu $2 $0 l113 4048 j fail 4049l113: li $3 -1 4050 bgeu $2 $3 fail 4051 bgeu $3 $2 l114 4052 j fail 4053l114: 4054 4055 bgeu $0 0 l115 4056 j fail 4057l115: li $2 1 4058 bgeu $0 1 fail 4059 bgeu $2 0 l116 4060 j fail 4061l116: li $3 -1 4062 bgeu $2 -1 fail 4063 bgeu $3 1 l117 4064 j fail 4065l117: 4066 4067 4068 .data 4069bgt_: .asciiz "Testing BGT\n" 4070 .text 4071 li $v0 4 # syscall 4 (print_str) 4072 la $a0 bgt_ 4073 syscall 4074 4075 bgt $0 $0 fail 4076l120: li $2 1 4077 bgt $0 $2 fail 4078 bgt $2 $0 l121 4079 j fail 4080l121: li $3 -1 4081 bgt $3 $2 fail 4082 bgt $2 $3 l122 4083 j fail 4084l122: 4085 4086 bgt $0 0 fail 4087l123: li $2 1 4088 bgt $0 1 fail 4089 bgt $2 0 l124 4090 j fail 4091l124: li $3 -1 4092 bgt $3 1 fail 4093 bgt $2 -1 l125 4094 j fail 4095l125: 4096 4097 4098 .data 4099bgtu_: .asciiz "Testing BGTU\n" 4100 .text 4101 li $v0 4 # syscall 4 (print_str) 4102 la $a0 bgtu_ 4103 syscall 4104 4105 bgtu $0 $0 fail 4106l132: li $2 1 4107 bgtu $0 $2 fail 4108 bgtu $2 $0 l133 4109 j fail 4110l133: li $3 -1 4111 bgtu $2 $3 fail 4112 bgtu $3 $2 l134 4113 j fail 4114l134: 4115 4116 bgtu $0 0 fail 4117l135: li $2 1 4118 bgtu $0 1 fail 4119 bgtu $2 0 l136 4120 j fail 4121l136: li $3 -1 4122 bgtu $2 -1 fail 4123 bgtu $3 1 l137 4124 j fail 4125l137: 4126 4127 4128 .data 4129ble_: .asciiz "Testing BLE\n" 4130 .text 4131 li $v0 4 # syscall 4 (print_str) 4132 la $a0 ble_ 4133 syscall 4134 4135 ble $0 $0 l140 4136 j fail 4137l140: li $2 1 4138 ble $2 $0 fail 4139 ble $0 $2 l141 4140 j fail 4141l141: li $3 -1 4142 ble $2 $3 fail 4143 ble $3 $2 l142 4144 j fail 4145l142: 4146 4147 ble $0 0 l143 4148 j fail 4149l143: li $2 1 4150 ble $2 0 fail 4151 ble $0 1 l144 4152 j fail 4153l144: li $3 -1 4154 ble $2 -1 fail 4155 ble $3 1 l145 4156 j fail 4157l145: 4158 4159 4160 .data 4161bleu_: .asciiz "Testing BLEU\n" 4162 .text 4163 li $v0 4 # syscall 4 (print_str) 4164 la $a0 bleu_ 4165 syscall 4166 4167 bleu $0 $0 l152 4168 j fail 4169l152: li $2 1 4170 bleu $2 $0 fail 4171 bleu $0 $2 l153 4172 j fail 4173l153: li $3 -1 4174 bleu $3 $2 fail 4175 bleu $2 $3 l154 4176 j fail 4177l154: 4178 4179 bleu $0 0 l155 4180 j fail 4181l155: li $2 1 4182 bleu $2 0 fail 4183 bleu $0 1 l156 4184 j fail 4185l156: li $3 -1 4186 bleu $3 1 fail 4187 bleu $2 -1 l157 4188 j fail 4189l157: 4190 4191 4192 .data 4193blt_: .asciiz "Testing BLT\n" 4194 .text 4195 li $v0 4 # syscall 4 (print_str) 4196 la $a0 blt_ 4197 syscall 4198 4199 blt $0 $0 fail 4200l160: li $2 1 4201 blt $2 $0 fail 4202 blt $0 $2 l161 4203 j fail 4204l161: li $3 -1 4205 blt $2 $3 fail 4206 blt $3 $2 l162 4207 j fail 4208l162: 4209 4210 blt $0 0 fail 4211l163: li $2 1 4212 blt $2 0 fail 4213 blt $0 1 l164 4214 j fail 4215l164: li $3 -1 4216 blt $2 -1 fail 4217 blt $3 1 l165 4218 j fail 4219l165: 4220 4221 4222 .data 4223bltu_: .asciiz "Testing BLTU\n" 4224 .text 4225 li $v0 4 # syscall 4 (print_str) 4226 la $a0 bltu_ 4227 syscall 4228 4229 bltu $0 $0 fail 4230l172: li $2 1 4231 bltu $2 $0 fail 4232 bltu $0 $2 l173 4233 j fail 4234l173: li $3 -1 4235 bltu $3 $2 fail 4236 bltu $2 $3 l174 4237 j fail 4238l174: 4239 4240 bltu $0 0 fail 4241l175: li $2 1 4242 bltu $2 0 fail 4243 bltu $0 1 l176 4244 j fail 4245l176: li $3 -1 4246 bltu $3 1 fail 4247 bltu $2 -1 l177 4248 j fail 4249l177: 4250 4251 4252 .data 4253bnez_: .asciiz "Testing BNEZ\n" 4254 .text 4255 li $v0 4 # syscall 4 (print_str) 4256 la $a0 bnez_ 4257 syscall 4258 4259 bnez $0 fail 4260 li $2 1 4261 bnez $2 l180 4262 j fail 4263l180: 4264 4265 4266# DIV and DIVU checked previously 4267 4268 4269# LA better work or nothing above will work 4270 4271 4272 .data 4273li_: .asciiz "Testing LI\n" 4274 .text 4275 li $v0 4 # syscall 4 (print_str) 4276 la $a0 li_ 4277 syscall 4278 4279 li $2 0xfffffff 4280 bne $2 0xfffffff fail 4281 li $2 0xffffffe 4282 bne $2 0xffffffe fail 4283 li $2 0 4284 bnez $2 fail 4285 li $2 0x7fffffff 4286 bne $2 0x7fffffff fail 4287 li $2 32767 4288 bne $2 32767 fail 4289 li $2 32768 4290 bne $2 32768 fail 4291 li $2 65535 4292 bne $2 65535 fail 4293 li $2 65536 4294 bne $2 65536 fail 4295 4296 4297 .data 4298li.d_: .asciiz "Testing LI.d\n" 4299 .text 4300 li $v0 4 # syscall 4 (print_str) 4301 la $a0 li.d_ 4302 syscall 4303 4304 li.d $f0 1.0 4305 mfc1 $2, $f0 4306 mfc1 $3, $f1 4307 lw $4, fp_d1 4308 lw $5, fp_d1+4 4309 bne $2 $4 fail 4310 bne $3 $5 fail 4311 4312 li.d $f0 -1.0 4313 mfc1 $2, $f0 4314 mfc1 $3, $f1 4315 lw $4, fp_dm1 4316 lw $5, fp_dm1+4 4317 bne $2 $4 fail 4318 bne $3 $5 fail 4319 4320 4321 .data 4322li.s_: .asciiz "Testing LI.s\n" 4323 .text 4324 li $v0 4 # syscall 4 (print_str) 4325 la $a0 li.s_ 4326 syscall 4327 4328 li.s $f0 1.0 4329 mfc1 $2, $f0 4330 lw $3, fp_s1 4331 bne $2 $3 fail 4332 4333 li.s $f0 -1.0 4334 mfc1 $2, $f0 4335 lw $3, fp_sm1 4336 bne $2 $3 fail 4337 4338 4339 .data 4340move_: .asciiz "Testing MOVE\n" 4341 .text 4342 li $v0 4 # syscall 4 (print_str) 4343 la $a0 move_ 4344 syscall 4345 4346 li $2 0xfffffff 4347 move $3 $2 4348 bne $2 $3 fail 4349 4350 4351# MUL and MULO and MULOU were tested previously 4352 4353 4354 .data 4355neg_: .asciiz "Testing NEG\n" 4356 .text 4357 li $v0 4 # syscall 4 (print_str) 4358 la $a0 neg_ 4359 syscall 4360 4361 li $2 -101 4362 neg $3 $2 4363 bne $3 101 fail 4364 li $2 101 4365 neg $2 $2 4366 bne $2 -101 fail 4367 neg $2 $0 4368 bne $2 0 fail 4369 4370 4371 .data 4372negu_: .asciiz "Testing NEGU\n" 4373 .text 4374 li $v0 4 # syscall 4 (print_str) 4375 la $a0 negu_ 4376 syscall 4377 4378 li $2 -101 4379 negu $3 $2 4380 bne $3 101 fail 4381 li $2 101 4382 negu $2 $2 4383 bne $2 -101 fail 4384 negu $2 $0 4385 bne $2 0 fail 4386 4387 4388 .data 4389nop_: .asciiz "Testing NOP\n" 4390 .text 4391 li $v0 4 # syscall 4 (print_str) 4392 la $a0 nop_ 4393 syscall 4394 4395 nop # How do we test it?? 4396 4397 4398 .data 4399not_: .asciiz "Testing NOT\n" 4400 .text 4401 li $v0 4 # syscall 4 (print_str) 4402 la $a0 not_ 4403 syscall 4404 4405 not $2 $0 4406 bne $2 0xffffffff fail 4407 li $2 0 4408 not $3 $2 4409 bne $3 0xffffffff fail 4410 li $2 0xffffffff 4411 not $3 $2 4412 bne $3 0 fail 4413 4414 4415 .data 4416rem_: .asciiz "Testing REM\n" 4417 .text 4418 li $v0 4 # syscall 4 (print_str) 4419 la $a0 rem_ 4420 syscall 4421 4422 li $2 5 4423 li $3 2 4424 li $4 -2 4425 4426 rem $5 $2 $3 4427 bne $5 1 fail 4428 4429 rem $5 $2 $4 4430 bne $5 1 fail 4431 4432 .data 4433remu_: .asciiz "Testing REMU\n" 4434 .text 4435 li $v0 4 # syscall 4 (print_str) 4436 la $a0 remu_ 4437 syscall 4438 4439 li $2 5 4440 li $3 2 4441 li $4 -2 4442 4443 remu $5 $2 $3 4444 bne $5 1 fail 4445 4446 remu $5 $2 $4 4447 bne $5 5 fail 4448 4449 4450 .data 4451rol_: .asciiz "Testing ROL\n" 4452 .text 4453 li $v0 4 # syscall 4 (print_str) 4454 la $a0 rol_ 4455 syscall 4456 li $2 5 4457 li $3 5 4458 rol $4 $2 $3 4459 bne $4 0xa0 fail 4460 li $2 5 4461 li $3 -5 4462 rol $4 $2 $3 4463 bne $4 0x28000000 fail 4464 li $2 5 4465 rol $4 $2 5 4466 bne $4 0xa0 fail 4467 4468 4469 .data 4470ror_: .asciiz "Testing ROR\n" 4471 .text 4472 li $v0 4 # syscall 4 (print_str) 4473 la $a0 ror_ 4474 syscall 4475 li $2 5 4476 li $3 5 4477 ror $4 $2 $3 4478 bne $4 0x28000000 fail 4479 li $2 5 4480 li $3 -5 4481 ror $4 $2 $3 4482 bne $4 0xa0 fail 4483 li $2 5 4484 ror $4 $2 5 4485 bne $4 0x28000000 fail 4486 4487 4488 .data 4489seq_: .asciiz "Testing SEQ\n" 4490 .text 4491 li $v0 4 # syscall 4 (print_str) 4492 la $a0 seq_ 4493 syscall 4494 4495 li $2 -1 4496 li $3 1 4497 4498 seq $4 $0 $0 4499 beqz $4 fail 4500 seq $4 $2 $3 4501 bnez $4 fail 4502 4503 seq $4 $0 0 4504 beqz $4 fail 4505 seq $4 $3 2 4506 bnez $4 fail 4507 4508 4509 .data 4510sge_: .asciiz "Testing SGE\n" 4511 .text 4512 li $v0 4 # syscall 4 (print_str) 4513 la $a0 sge_ 4514 syscall 4515 4516 sge $4 $0 $0 4517 beqz $4 fail 4518 li $2 1 4519 sge $4 $0 $2 4520 bnez $4 fail 4521 sge $4 $2 $0 4522 beqz $4 fail 4523 li $2 -1 4524 sge $4 $0 $2 4525 beqz $4 fail 4526 sge $4 $2 $0 4527 bnez $4 fail 4528 4529 li $2 1 4530 sge $2 $0 $2 4531 bnez $2 fail 4532 li $2 1 4533 sge $2 $2 $0 4534 beqz $2 fail 4535 li $2 -1 4536 sge $2 $0 $2 4537 beqz $2 fail 4538 li $2 -1 4539 sge $2 $2 $0 4540 bnez $2 fail 4541 4542 sge $4 $0 0 4543 beqz $4 fail 4544 li $2 1 4545 sge $4 $0 1 4546 bnez $4 fail 4547 sge $4 $2 0 4548 beqz $4 fail 4549 li $2 -1 4550 sge $4 $0 -1 4551 beqz $4 fail 4552 sge $4 $2 0 4553 bnez $4 fail 4554 4555 4556 .data 4557sgeu_: .asciiz "Testing SGEU\n" 4558 .text 4559 li $v0 4 # syscall 4 (print_str) 4560 la $a0 sgeu_ 4561 syscall 4562 4563 sgeu $4 $0 $0 4564 beqz $4 fail 4565 li $2 1 4566 sgeu $4 $0 $2 4567 bnez $4 fail 4568 sgeu $4 $2 $0 4569 beqz $4 fail 4570 li $2 -1 4571 sgeu $4 $0 $2 4572 bnez $4 fail 4573 sgeu $4 $2 $0 4574 beqz $4 fail 4575 4576 sgeu $4 $0 0 4577 beqz $4 fail 4578 li $2 1 4579 sgeu $4 $0 1 4580 bnez $4 fail 4581 sgeu $4 $2 0 4582 beqz $4 fail 4583 li $2 -1 4584 sgeu $4 $0 -1 4585 bnez $4 fail 4586 sgeu $4 $2 0 4587 beqz $4 fail 4588 4589 4590 .data 4591sgt_: .asciiz "Testing SGT\n" 4592 .text 4593 li $v0 4 # syscall 4 (print_str) 4594 la $a0 sgt_ 4595 syscall 4596 4597 sgt $4 $0 $0 4598 bnez $4 fail 4599 li $2 1 4600 sgt $4 $0 $2 4601 bnez $4 fail 4602 sgt $4 $2 $0 4603 beqz $4 fail 4604 li $2 -1 4605 sgt $4 $0 $2 4606 beqz $4 fail 4607 sgt $4 $2 $0 4608 bnez $4 fail 4609 4610 sgt $4 $0 0 4611 bnez $4 fail 4612 sgt $4 $0 1 4613 bnez $4 fail 4614 li $2 1 4615 sgt $4 $2 0 4616 beqz $4 fail 4617 sgt $4 $0 -1 4618 beqz $4 fail 4619 li $2 -1 4620 sgt $4 $2 0 4621 bnez $4 fail 4622 4623 .data 4624sgtu_: .asciiz "Testing SGTU\n" 4625 .text 4626 li $v0 4 # syscall 4 (print_str) 4627 la $a0 sgtu_ 4628 syscall 4629 4630 sgtu $4 $0 $0 4631 bnez $4 fail 4632 li $2 1 4633 sgtu $4 $0 $2 4634 bnez $4 fail 4635 sgtu $4 $2 $0 4636 beqz $4 fail 4637 li $2 -1 4638 sgtu $4 $0 $2 4639 bnez $4 fail 4640 sgtu $4 $2 $0 4641 beqz $4 fail 4642 4643 sgtu $4 $0 0 4644 bnez $4 fail 4645 sgtu $4 $0 1 4646 bnez $4 fail 4647 li $2 1 4648 sgtu $4 $2 0 4649 beqz $4 fail 4650 sgtu $4 $0 -1 4651 bnez $4 fail 4652 li $2 -1 4653 sgtu $4 $2 0 4654 beqz $4 fail 4655 4656 4657 .data 4658sle_: .asciiz "Testing SLE\n" 4659 .text 4660 li $v0 4 # syscall 4 (print_str) 4661 la $a0 sle_ 4662 syscall 4663 4664 sle $4 $0 $0 4665 beqz $4 fail 4666 li $2 1 4667 sle $4 $0 $2 4668 beqz $4 fail 4669 sle $4 $2 $0 4670 bnez $4 fail 4671 li $2 -1 4672 sle $4 $0 $2 4673 bnez $4 fail 4674 sle $4 $2 $0 4675 beqz $4 fail 4676 4677 li $2 1 4678 sle $2 $0 $2 4679 beqz $2 fail 4680 li $2 1 4681 sle $2 $2 $0 4682 bnez $2 fail 4683 li $2 -1 4684 sle $2 $0 $2 4685 bnez $2 fail 4686 li $2 -1 4687 sle $2 $2 $0 4688 beqz $2 fail 4689 4690 sle $4 $0 0 4691 beqz $4 fail 4692 li $2 1 4693 sle $4 $0 1 4694 beqz $4 fail 4695 sle $4 $2 0 4696 bnez $4 fail 4697 li $2 -1 4698 sle $4 $0 -1 4699 bnez $4 fail 4700 sle $4 $2 0 4701 beqz $4 fail 4702 4703 4704 .data 4705sleu_: .asciiz "Testing SLEU\n" 4706 .text 4707 li $v0 4 # syscall 4 (print_str) 4708 la $a0 sleu_ 4709 syscall 4710 4711 sleu $4 $0 $0 4712 beqz $4 fail 4713 li $2 1 4714 sleu $4 $0 $2 4715 beqz $4 fail 4716 sleu $4 $2 $0 4717 bnez $4 fail 4718 li $2 -1 4719 sleu $4 $0 $2 4720 beqz $4 fail 4721 sleu $4 $2 $0 4722 bnez $4 fail 4723 4724 sleu $4 $0 0 4725 beqz $4 fail 4726 li $2 1 4727 sleu $4 $0 1 4728 beqz $4 fail 4729 sleu $4 $2 0 4730 bnez $4 fail 4731 li $2 -1 4732 sleu $4 $0 -1 4733 beqz $4 fail 4734 sleu $4 $2 0 4735 bnez $4 fail 4736 4737 4738 .data 4739sne_: .asciiz "Testing SNE\n" 4740 .text 4741 li $v0 4 # syscall 4 (print_str) 4742 la $a0 sne_ 4743 syscall 4744 4745 li $2 -1 4746 li $3 1 4747 4748 sne $4 $0 $0 4749 bnez $4 fail 4750 sne $4 $2 $3 4751 beqz $4 fail 4752 4753 sne $4 $0 0 4754 bnez $4 fail 4755 sne $4 $3 2 4756 beqz $4 fail 4757 4758 4759# ULH is endian-specific 4760 4761 4762# ULHU is endian-specific 4763 4764 4765# ULW is endian-specific 4766 4767 4768# USH is endian-specific 4769 4770 4771# USW is endian-specific 4772 4773 4774# .WORD is endian-specific 4775 4776 4777OK: 4778 4779 4780# Done !!! 4781 .data 4782sm: .asciiz "\nPassed all tests\n" 4783 .text 4784 li $v0 4 # syscall 4 (print_str) 4785 la $a0 sm 4786 syscall 4787 lw $31 saved_ret_pc 4788 jr $31 # Return from main 4789 4790 4791 .data 4792fm: .asciiz "Failed test\n" 4793 .text 4794fail: li $v0 4 # syscall 4 (print_str) 4795 la $a0 fm 4796 syscall 4797 li $v0, 10 # syscall 10 (exit) 4798 syscall 4799 4800 4801 .text 0x408000 4802far_away: 4803 beq $0, $0, come_back 4804