mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 16:36:21 +00:00
104 lines
4.4 KiB
C
104 lines
4.4 KiB
C
#include <stdio.h>
|
|
#include "const.h"
|
|
#include "macro_int.h"
|
|
|
|
typedef enum {
|
|
AND=0, ANDI, LUI, NOR,
|
|
OR, ORI, XOR, XORI
|
|
} logical_op;
|
|
|
|
int main()
|
|
{
|
|
logical_op op;
|
|
int i;
|
|
init_reg_val2();
|
|
for (op = AND; op <= XORI; op++) {
|
|
for (i = 0; i < N; i++) {
|
|
switch (op) {
|
|
case AND:
|
|
/* No Integer Overflow exception occurs under any
|
|
circumstances. */
|
|
TEST1("and $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
|
|
t0, t1, t2);
|
|
TEST1("and $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
|
|
s0, s1, s2);
|
|
break;
|
|
|
|
case ANDI:
|
|
/* No Integer Overflow exception occurs under any
|
|
circumstances. */
|
|
TEST2("andi $t0, $t1, 0xff", reg_val1[i], 0xff, t0, t1);
|
|
TEST2("andi $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
|
|
TEST2("andi $a0, $a1, 0x0", reg_val1[i], 0x0, a0, a1);
|
|
TEST2("andi $s0, $s1, 0x23", reg_val1[i], 0x23, s0, s1);
|
|
TEST2("andi $t0, $t1, 0xff", reg_val2[i], 0xff, t0, t1);
|
|
TEST2("andi $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
|
|
TEST2("andi $a0, $a1, 0x0", reg_val2[i], 0x0, a0, a1);
|
|
TEST2("andi $s0, $s1, 0x23", reg_val2[i], 0x23, s0, s1);
|
|
break;
|
|
|
|
case LUI:
|
|
/* No Integer Overflow exception occurs under any
|
|
circumstances. */
|
|
if (i == 0) {
|
|
TEST6("lui $t0, 0xffff", 0xffff, t0);
|
|
TEST6("lui $a0, 0x0", 0x0, a0);
|
|
TEST6("lui $t9, 0xff", 0xff, t9);
|
|
TEST6("lui $v0, 0xfff", 0xfff, v0);
|
|
TEST6("lui $s0, 0x2", 0x2, s0);
|
|
}
|
|
break;
|
|
|
|
case NOR:
|
|
/* No arithmetic exception occurs under any circumstances. */
|
|
TEST1("nor $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
|
|
t0, t1, t2);
|
|
TEST1("nor $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
|
|
s0, s1, s2);
|
|
break;
|
|
|
|
case OR:
|
|
/* No arithmetic exception occurs under any circumstances. */
|
|
TEST1("or $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
|
|
t0, t1, t2);
|
|
TEST1("or $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
|
|
s0, s1, s2);
|
|
break;
|
|
|
|
case ORI:
|
|
/* No arithmetic exception occurs under any circumstances. */
|
|
TEST2("ori $t0, $t1, 0xff", reg_val1[i], 0xff, t0, t1);
|
|
TEST2("ori $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
|
|
TEST2("ori $a0, $a1, 0x0", reg_val1[i], 0x0, a0, a1);
|
|
TEST2("ori $s0, $s1, 0x23", reg_val1[i], 0x23, s0, s1);
|
|
TEST2("ori $t0, $t1, 0xff", reg_val2[i], 0xff, t0, t1);
|
|
TEST2("ori $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
|
|
TEST2("ori $a0, $a1, 0x0", reg_val2[i], 0x0, a0, a1);
|
|
TEST2("ori $s0, $s1, 0x23", reg_val2[i], 0x23, s0, s1);
|
|
break;
|
|
|
|
case XOR:
|
|
/* No arithmetic exception occurs under any circumstances. */
|
|
TEST1("xor $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1],
|
|
t0, t1, t2);
|
|
TEST1("xor $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1],
|
|
s0, s1, s2);
|
|
break;
|
|
|
|
case XORI:
|
|
/* No arithmetic exception occurs under any circumstances. */
|
|
TEST2("xori $t0, $t1, 0xff", reg_val1[i], 0xff, t0, t1);
|
|
TEST2("xori $t2, $t3, 0xffff", reg_val1[i], 0xffff, t2, t3);
|
|
TEST2("xori $a0, $a1, 0x0", reg_val1[i], 0x0, a0, a1);
|
|
TEST2("xori $s0, $s1, 0x23", reg_val1[i], 0x23, s0, s1);
|
|
TEST2("xori $t0, $t1, 0xff", reg_val2[i], 0xff, t0, t1);
|
|
TEST2("xori $t2, $t3, 0xffff", reg_val2[i], 0xffff, t2, t3);
|
|
TEST2("xori $a0, $a1, 0x0", reg_val2[i], 0x0, a0, a1);
|
|
TEST2("xori $s0, $s1, 0x23", reg_val2[i], 0x23, s0, s1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|