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