#include <stdio.h> #include "const.h" #include "macro_int.h" typedef enum { DROTR=0, DROTR32, DROTRV, DSLL, DSLL32, DSLLV, DSRA, DSRA32, DSRAV, DSRL, DSRL32, DSRLV, ROTR, ROTRV, SLL, SLLV, SRA, SRAV, SRL, SRLV } logical_op; int main() { logical_op op; int i; init_reg_val2(); for (op = DROTR; op <= SRLV; op++) { for (i = 0; i < N; i++) { switch(op) { case DROTR: /* Release 2 Only */ #if (__mips == 64) && (__mips_isa_rev >= 2) TEST2("drotr $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("drotr $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("drotr $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("drotr $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("drotr $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("drotr $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("drotr $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("drotr $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); #endif break; case DROTR32: /* Release 2 Only */ #if (__mips == 64) && (__mips_isa_rev >= 2) TEST2("drotr32 $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("drotr32 $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("drotr32 $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("drotr32 $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("drotr32 $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("drotr32 $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("drotr32 $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("drotr32 $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); #endif break; case DROTRV: /* Release 2 Only */ #if (__mips == 64) && (__mips_isa_rev >= 2) TEST1("drotrv $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); TEST1("drotrv $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1], s0, s1, s2); #endif break; case DSLL: TEST2("dsll $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("dsll $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("dsll $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("dsll $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("dsll $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("dsll $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("dsll $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("dsll $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case DSLL32: TEST2("dsll32 $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("dsll32 $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("dsll32 $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("dsll32 $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("dsll32 $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("dsll32 $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("dsll32 $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("dsll32 $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case DSLLV: TEST1("dsllv $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); TEST1("dsllv $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1], s0, s1, s2); break; case DSRA: TEST2("dsra $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("dsra $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("dsra $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("dsra $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("dsra $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("dsra $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("dsra $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("dsra $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case DSRA32: TEST2("dsra32 $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("dsra32 $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("dsra32 $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("dsra32 $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("dsra32 $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("dsra32 $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("dsra32 $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("dsra32 $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case DSRAV: TEST1("dsrav $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); TEST1("dsrav $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1], s0, s1, s2); break; case DSRL: TEST2("dsrl $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("dsrl $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("dsrl $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("dsrl $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("dsrl $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("dsrl $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("dsrl $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("dsrl $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case DSRL32: TEST2("dsrl32 $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("dsrl32 $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("dsrl32 $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("dsrl32 $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("dsrl32 $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("dsrl32 $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("dsrl32 $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("dsrl32 $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case DSRLV: TEST1("dsrlv $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); TEST1("dsrlv $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1], s0, s1, s2); break; case ROTR: /* Release 2 Only */ #if (__mips == 64) && (__mips_isa_rev >= 2) TEST2("rotr $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("rotr $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("rotr $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("rotr $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); #endif break; case ROTRV: /* Release 2 Only */ #if (__mips == 64) && (__mips_isa_rev >= 2) TEST1("rotrv $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); #endif break; case SLL: TEST2("sll $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("sll $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("sll $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("sll $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); TEST2("sll $t0, $t1, 0x00", reg_val2[i], 0x00, t0, t1); TEST2("sll $t2, $t3, 0x1f", reg_val2[i], 0x1f, t2, t3); TEST2("sll $a0, $a1, 0x0f", reg_val2[i], 0x0f, a0, a1); TEST2("sll $s0, $s1, 0x03", reg_val2[i], 0x03, s0, s1); break; case SLLV: TEST1("sllv $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); TEST1("sllv $s0, $s1, $s2", reg_val2[i], reg_val2[N-i-1], s0, s1, s2); break; case SRA: TEST2("sra $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("sra $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("sra $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("sra $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); break; case SRAV: TEST1("srav $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); break; case SRL: TEST2("srl $t0, $t1, 0x00", reg_val1[i], 0x00, t0, t1); TEST2("srl $t2, $t3, 0x1f", reg_val1[i], 0x1f, t2, t3); TEST2("srl $a0, $a1, 0x0f", reg_val1[i], 0x0f, a0, a1); TEST2("srl $s0, $s1, 0x03", reg_val1[i], 0x03, s0, s1); break; case SRLV: TEST1("srlv $t0, $t1, $t2", reg_val1[i], reg_val1[N-i-1], t0, t1, t2); break; } } } return 0; }