1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <stdio.h>
2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "const.h"
3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "macro_int.h"
4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef enum {
6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   AND=0,  ANDI,   LUI,    NOR,
7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   OR,     ORI,    XOR,    XORI
8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} logical_op;
9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovint main()
11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   logical_op op;
13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   int i;
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   init_reg_val2();
15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   for (op = AND; op <= XORI; op++) {
16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      for (i = 0; i < N; i++) {
17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         switch (op) {
18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case AND:
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No Integer Overflow exception occurs under any
20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  circumstances. */
21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("and $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                          t0, t1, t2);
23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("and $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                          s0, s1, s2);
25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case ANDI:
28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No Integer Overflow exception occurs under any
29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  circumstances. */
30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $t0, $t1, 0xff",   reg_val1[i], 0xff,   t0, t1);
31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $a0, $a1, 0x0",    reg_val1[i], 0x0,    a0, a1);
33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $s0, $s1, 0x23",   reg_val1[i], 0x23,   s0, s1);
34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $t0, $t1, 0xff",   reg_val2[i], 0xff,   t0, t1);
35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $a0, $a1, 0x0",    reg_val2[i], 0x0,    a0, a1);
37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("andi $s0, $s1, 0x23",   reg_val2[i], 0x23,   s0, s1);
38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case LUI:
41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No Integer Overflow exception occurs under any
42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  circumstances. */
43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               if (i == 0) {
44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  TEST6("lui $t0, 0xffff", 0xffff, t0);
45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  TEST6("lui $a0, 0x0",    0x0,    a0);
46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  TEST6("lui $t9, 0xff",   0xff,   t9);
47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  TEST6("lui $v0, 0xfff",  0xfff,  v0);
48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                  TEST6("lui $s0, 0x2",    0x2,    s0);
49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               }
50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case NOR:
53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No arithmetic exception occurs under any circumstances. */
54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("nor $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                          t0, t1, t2);
56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("nor $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                          s0, s1, s2);
58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
60436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case OR:
61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No arithmetic exception occurs under any circumstances. */
62436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("or $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
63436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                         t0, t1, t2);
64436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("or $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
65436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                         s0, s1, s2);
66436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
68436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case ORI:
69436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No arithmetic exception occurs under any circumstances. */
70436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $t0, $t1, 0xff",   reg_val1[i], 0xff,   t0, t1);
71436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $a0, $a1, 0x0",    reg_val1[i], 0x0,    a0, a1);
73436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $s0, $s1, 0x23",   reg_val1[i], 0x23,   s0, s1);
74436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $t0, $t1, 0xff",   reg_val2[i], 0xff,   t0, t1);
75436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
76436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $a0, $a1, 0x0",    reg_val2[i], 0x0,    a0, a1);
77436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("ori $s0, $s1, 0x23",   reg_val2[i], 0x23,   s0, s1);
78436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
79436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
80436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case XOR:
81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No arithmetic exception occurs under any circumstances. */
82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("xor $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
83436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                          t0, t1, t2);
84436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST1("xor $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
85436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                                          s0, s1, s2);
86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            case XORI:
89436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               /* No arithmetic exception occurs under any circumstances. */
90436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $t0, $t1, 0xff",   reg_val1[i], 0xff,   t0, t1);
91436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
92436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $a0, $a1, 0x0",    reg_val1[i], 0x0,    a0, a1);
93436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $s0, $s1, 0x23",   reg_val1[i], 0x23,   s0, s1);
94436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $t0, $t1, 0xff",   reg_val2[i], 0xff,   t0, t1);
95436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
96436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $a0, $a1, 0x0",    reg_val2[i], 0x0,    a0, a1);
97436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               TEST2("xori $s0, $s1, 0x23",   reg_val2[i], 0x23,   s0, s1);
98436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov               break;
99436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         }
100436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      }
101436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
102436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   return 0;
103436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
104