mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 16:36:21 +00:00
77 lines
2.3 KiB
C
77 lines
2.3 KiB
C
#include <stdio.h>
|
|
|
|
int main()
|
|
{
|
|
#if (_MIPS_ARCH_OCTEON)
|
|
int t1 = 0;
|
|
int t2 = 0;
|
|
__asm__ volatile(
|
|
".set noreorder" "\n\t"
|
|
"move $t0, $zero" "\n\t"
|
|
"label2:" "\n\t"
|
|
"addiu $t0, $t0, 1" "\n\t"
|
|
"bbit0 $t0, 0x3, label2" "\n\t"
|
|
"nop" "\n\t"
|
|
"move %0, $t0" "\n\t"
|
|
".set reorder" "\n\t"
|
|
: "=r" (t1)
|
|
:
|
|
: "t0");
|
|
__asm__ volatile(
|
|
".set noreorder" "\n\t"
|
|
"li $t0, 0xff" "\n\t"
|
|
"label1:" "\n\t"
|
|
"addiu $t0, $t0, -1" "\n\t"
|
|
"bbit1 $t0, 0x3, label1" "\n\t"
|
|
"nop" "\n\t"
|
|
"move %0, $t0" "\n\t"
|
|
".set reorder" "\n\t"
|
|
: "=r" (t2)
|
|
:
|
|
: "t0");
|
|
|
|
printf("TEST bbit0: %s\n", t1 == 0x08 ? "PASS" : "FAIL");
|
|
printf("TEST bbit1: %s\n", t2 == 0xF7 ? "PASS" : "FAIL");
|
|
|
|
long int lt1 = 0;
|
|
long int lt2 = 0;
|
|
long int lt3 = 0xff00000000;
|
|
long int lt4 = 0x100000000;
|
|
/* Take 0x100000000 and loop until 35th bit is set
|
|
by incrementing 0x100000000 at a time. */
|
|
__asm__ volatile(
|
|
".set noreorder" "\n\t"
|
|
"move $t0, $zero" "\n\t"
|
|
"move $t1, %1" "\n\t"
|
|
"label4:" "\n\t"
|
|
"dadd $t0, $t0, $t1" "\n\t"
|
|
"bbit032 $t0, 0x3, label4" "\n\t"
|
|
"nop" "\n\t"
|
|
"move %0, $t0" "\n\t"
|
|
".set reorder" "\n\t"
|
|
: "=r" (lt1)
|
|
: "r" (lt4)
|
|
: "t0", "t1");
|
|
/* Take 0xff00000000 and loop until 35th bit is cleared
|
|
by decrementing 0x100000000 at a time. */
|
|
__asm__ volatile(
|
|
".set noreorder" "\n\t"
|
|
"move $t0, %1" "\n\t"
|
|
"move $t1, %2" "\n\t"
|
|
"label3:" "\n\t"
|
|
"dadd $t0, $t0, $t1" "\n\t"
|
|
"bbit132 $t0, 0x3, label3" "\n\t"
|
|
"nop" "\n\t"
|
|
"move %0, $t0" "\n\t"
|
|
".set reorder" "\n\t"
|
|
: "=r" (lt2)
|
|
: "r" (lt3), "r" (-lt4)
|
|
: "t0", "t1");
|
|
|
|
printf("TEST bbit032: %s\n", lt1 == 0x0800000000 ? "PASS" : "FAIL");
|
|
printf("TEST bbit132: %s\n", lt2 == 0xF700000000 ? "PASS" : "FAIL");
|
|
|
|
#endif
|
|
return 0;
|
|
}
|