| #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; |
| } |