1 #include <stdio.h>
2 #include "const.h"
3 #include "macro_int.h"
4 
5 typedef enum {
6    AND=0,  ANDI,   LUI,    NOR,
7    OR,     ORI,    XOR,    XORI
8 } logical_op;
9 
main()10 int main()
11 {
12    logical_op op;
13    int i;
14    init_reg_val2();
15    for (op = AND; op <= XORI; op++) {
16       for (i = 0; i < N; i++) {
17          switch (op) {
18             case AND:
19                /* No Integer Overflow exception occurs under any
20                   circumstances. */
21                TEST1("and $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
22                                           t0, t1, t2);
23                TEST1("and $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
24                                           s0, s1, s2);
25                break;
26 
27             case ANDI:
28                /* No Integer Overflow exception occurs under any
29                   circumstances. */
30                TEST2("andi $t0, $t1, 0xff",   reg_val1[i], 0xff,   t0, t1);
31                TEST2("andi $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
32                TEST2("andi $a0, $a1, 0x0",    reg_val1[i], 0x0,    a0, a1);
33                TEST2("andi $s0, $s1, 0x23",   reg_val1[i], 0x23,   s0, s1);
34                TEST2("andi $t0, $t1, 0xff",   reg_val2[i], 0xff,   t0, t1);
35                TEST2("andi $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
36                TEST2("andi $a0, $a1, 0x0",    reg_val2[i], 0x0,    a0, a1);
37                TEST2("andi $s0, $s1, 0x23",   reg_val2[i], 0x23,   s0, s1);
38                break;
39 
40             case LUI:
41                /* No Integer Overflow exception occurs under any
42                   circumstances. */
43                if (i == 0) {
44                   TEST6("lui $t0, 0xffff", 0xffff, t0);
45                   TEST6("lui $a0, 0x0",    0x0,    a0);
46                   TEST6("lui $t9, 0xff",   0xff,   t9);
47                   TEST6("lui $v0, 0xfff",  0xfff,  v0);
48                   TEST6("lui $s0, 0x2",    0x2,    s0);
49                }
50                break;
51 
52             case NOR:
53                /* No arithmetic exception occurs under any circumstances. */
54                TEST1("nor $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
55                                           t0, t1, t2);
56                TEST1("nor $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
57                                           s0, s1, s2);
58                break;
59 
60             case OR:
61                /* No arithmetic exception occurs under any circumstances. */
62                TEST1("or $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
63                                          t0, t1, t2);
64                TEST1("or $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
65                                          s0, s1, s2);
66                break;
67 
68             case ORI:
69                /* No arithmetic exception occurs under any circumstances. */
70                TEST2("ori $t0, $t1, 0xff",   reg_val1[i], 0xff,   t0, t1);
71                TEST2("ori $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
72                TEST2("ori $a0, $a1, 0x0",    reg_val1[i], 0x0,    a0, a1);
73                TEST2("ori $s0, $s1, 0x23",   reg_val1[i], 0x23,   s0, s1);
74                TEST2("ori $t0, $t1, 0xff",   reg_val2[i], 0xff,   t0, t1);
75                TEST2("ori $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
76                TEST2("ori $a0, $a1, 0x0",    reg_val2[i], 0x0,    a0, a1);
77                TEST2("ori $s0, $s1, 0x23",   reg_val2[i], 0x23,   s0, s1);
78                break;
79 
80             case XOR:
81                /* No arithmetic exception occurs under any circumstances. */
82                TEST1("xor $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
83                                           t0, t1, t2);
84                TEST1("xor $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
85                                           s0, s1, s2);
86                break;
87 
88             case XORI:
89                /* No arithmetic exception occurs under any circumstances. */
90                TEST2("xori $t0, $t1, 0xff",   reg_val1[i], 0xff,   t0, t1);
91                TEST2("xori $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
92                TEST2("xori $a0, $a1, 0x0",    reg_val1[i], 0x0,    a0, a1);
93                TEST2("xori $s0, $s1, 0x23",   reg_val1[i], 0x23,   s0, s1);
94                TEST2("xori $t0, $t1, 0xff",   reg_val2[i], 0xff,   t0, t1);
95                TEST2("xori $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
96                TEST2("xori $a0, $a1, 0x0",    reg_val2[i], 0x0,    a0, a1);
97                TEST2("xori $s0, $s1, 0x23",   reg_val2[i], 0x23,   s0, s1);
98                break;
99          }
100       }
101    }
102    return 0;
103 }
104