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