mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 16:36:21 +00:00
104 lines
5.5 KiB
C
104 lines
5.5 KiB
C
#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); \
|
|
}
|