#define TEST1(instruction, RSval, RTval, RD, RS, RT) \ { \ unsigned long long out; \ __asm__ __volatile__( \ "move $"#RS", %1" "\n\t" \ "move $"#RT", %2" "\n\t" \ "move $"#RD", $zero" "\n\t" \ instruction "\n\t" \ "move %0, $"#RD "\n\t" \ : "=r" (out) \ : "r" (RSval), "r" (RTval) \ : #RD, #RS, #RT \ ); \ printf("%s :: rd 0x%llx, rs 0x%llx, rt 0x%llx\n", \ instruction, out, (long long) RSval, \ (long long) RTval); \ } #define TEST2(instruction, RSval, imm, RT, RS) \ { \ unsigned long long out; \ __asm__ __volatile__( \ "move $"#RS", %1" "\n\t" \ "move $"#RT", $zero" "\n\t" \ instruction "\n\t" \ "move %0, $"#RT "\n\t" \ : "=r" (out) \ : "r" (RSval) \ : #RT, #RS \ ); \ printf("%s :: rt 0x%llx, rs 0x%llx, imm 0x%04x\n", \ instruction, out, (long long) RSval, imm); \ } #define TEST3(instruction, RSval, RD, RS) \ { \ unsigned long long out; \ __asm__ __volatile__( \ "move $"#RS", %1" "\n\t" \ "move $"#RD", $zero" "\n\t" \ instruction "\n\t" \ "move %0, $"#RD "\n\t" \ : "=r" (out) \ : "r" (RSval) \ : #RD, #RS \ ); \ printf("%s :: rd 0x%llx, rs 0x%llx\n", \ instruction, out, (long long) RSval); \ } #define TEST4(instruction, RSval, RTval, RS, RT) \ { \ unsigned long long HI; \ unsigned long long LO; \ __asm__ __volatile__( \ "move $"#RS", %2" "\n\t" \ "move $"#RT", %3" "\n\t" \ "mthi $zero" "\n\t" \ "mtlo $zero" "\n\t" \ instruction "\n\t" \ "mfhi %0" "\n\t" \ "mflo %1" "\n\t" \ : "=r" (HI), "=r" (LO) \ : "r" (RSval), "r"(RTval) \ : #RS, #RT \ ); \ printf("%s :: rs 0x%llx, rt 0x%llx, HI 0x%llx, LO 0x%llx\n", \ instruction, (long long) RSval, (long long) RTval, HI, LO); \ } #define TEST5(instruction, RSval, RTval, RS, RT) \ { \ unsigned long long HI; \ unsigned long long LO; \ __asm__ __volatile__( \ "move $"#RS", %2" "\n\t" \ "move $"#RT", %3" "\n\t" \ "mthi $"#RS "\n\t" \ "mtlo $"#RT "\n\t" \ instruction "\n\t" \ "mfhi %0" "\n\t" \ "mflo %1" "\n\t" \ : "=r" (HI), "=r" (LO) \ : "r" (RSval), "r"(RTval) \ : #RS, #RT \ ); \ printf("%s :: rs 0x%llx, rt 0x%llx, HI 0x%llx, LO 0x%llx\n", \ instruction, (long long) RSval, (long long) RTval, HI, LO); \ } #define TEST6(instruction, imm, RT) \ { \ unsigned long long out; \ __asm__ __volatile__( \ "move $"#RT", $zero" "\n\t" \ instruction "\n\t" \ "move %0, $"#RT "\n\t" \ : "=r" (out) : \ : #RT \ ); \ printf("%s :: rt 0x%llx, imm 0x%04x\n", \ instruction, out, imm); \ }