| #include <stdio.h> |
| |
| __attribute__((noinline)) int test_block_size1 () |
| { |
| int result = 1; |
| __asm__ __volatile__( |
| ".set noreorder" "\n\t" |
| ".set nomacro" "\n\t" |
| "b begin1" "\n\t" |
| "nop" "\n\t" |
| "begin1:" "\n\t" |
| ".rept 56" "\n\t" |
| ".word 0" "\n\t" |
| ".endr" "\n\t" |
| "li $4, 0" "\n\t" |
| "j end1" "\n\t" |
| "nop" "\n\t" |
| "b label1" "\n\t" |
| "nop" "\n\t" |
| "label1:" "\n\t" |
| "li $4, 1" "\n\t" |
| "end1:" "\n\t" |
| "move %0, $4" "\n\t" |
| ".set reorder" "\n\t" |
| ".set macro" "\n\t" |
| : /*out*/ "=r" (result) |
| : /*in*/ |
| : /*trash*/ "$4"); |
| return result; |
| } |
| |
| __attribute__((noinline)) int test_block_size2 () |
| { |
| int result = 1; |
| __asm__ __volatile__( |
| ".set noreorder" "\n\t" |
| ".set nomacro" "\n\t" |
| "b begin2" "\n\t" |
| "nop" "\n\t" |
| "begin2:" "\n\t" |
| ".rept 58" "\n\t" |
| ".word 0" "\n\t" |
| ".endr" "\n\t" |
| "li $4, 1" "\n\t" |
| "j end2" "\n\t" |
| "li $4, 0" "\n\t" |
| "end2:" "\n\t" |
| "move %0, $4" "\n\t" |
| ".set reorder" "\n\t" |
| ".set macro" "\n\t" |
| : /*out*/ "=r" (result) |
| : /*in*/ |
| : /*trash*/ "$4"); |
| return result; |
| } |
| |
| int main () |
| { |
| /*******************TEST1*******************/ |
| if (test_block_size1() == 0) |
| printf("test1 - PASS\n"); |
| else |
| printf("test1 - FAIL\n"); |
| |
| /*******************TEST2*******************/ |
| if (test_block_size2() == 0) |
| printf("test2 - PASS\n"); |
| else |
| printf("test2 - FAIL\n"); |
| return 0; |
| } |