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