1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "const.h" 2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST1(instruction, offset, mem) \ 4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long out = 0; \ 6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %2" "\n\t" \ 9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, $zero" "\n\t" \ 11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $t1, 0($t0)" "\n\t" \ 12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move %0, $t1" "\n\t" \ 13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (mem), "r" (offset) \ 15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1" \ 16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%lx\n", \ 18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST2(instruction, offset) \ 22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long out = 0; \ 24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long outHI = 0; \ 25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %2" "\n\t" \ 27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %4" "\n\t" \ 28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld $t3, 0($t0)" "\n\t" \ 30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %3" "\n\t" \ 31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t2, %4" "\n\t" \ 32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t1, $t1, $t2" "\n\t" \ 33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $t3, 0($t1)" "\n\t" \ 34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "li $t2, 7" "\n\t" \ 35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "nor $t2, $t2, $zero" "\n\t" \ 36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "and $t1, $t1, $t2" "\n\t" \ 37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld %0, 0($t1)" "\n\t" \ 38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld %1, 8($t1)" "\n\t" \ 39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out), "=r" (outHI) \ 40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (reg_val2) , "r" (reg_val_zero), "r" (offset) \ 41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "t2", "t3" \ 42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%lx, outHI: 0x%lx\n", \ 44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out, outHI); \ 45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST3(instruction, offset, mem) \ 48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long long out = 0; \ 50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %2" "\n\t" \ 53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmtc1 $zero, $f0" "\n\t" \ 55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $f0, 0($t0)" "\n\t" \ 56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmfc1 %0, $f0" "\n\t" \ 57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (mem) , "r" (offset) \ 59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "$f0" \ 60436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%llx\n", \ 62436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 63436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 64436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 65436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST3w(instruction, offset, mem) \ 66436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned int out = 0; \ 68436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 69436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 70436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %2" "\n\t" \ 71436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmtc1 $zero, $f0" "\n\t" \ 73436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $f0, 0($t0)" "\n\t" \ 74436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "mfc1 %0, $f0" "\n\t" \ 75436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 76436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (mem) , "r" (offset) \ 77436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "$f0" \ 78436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 79436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%x\n", \ 80436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 83436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST4(instruction, offset) \ 84436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 85436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long long out = 0; \ 86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %3" "\n\t" \ 89436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 90436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld $t2, 0($t0)" "\n\t" \ 91436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %2" "\n\t" \ 92436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 93436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmtc1 $t2, $f0" "\n\t" \ 94436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $f0, 0($t0)" "\n\t" \ 95436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld %0, 0($t0)" "\n\t" \ 96436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 97436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (reg_val1) , "r" (reg_val_zero), "r" (offset) \ 98436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "t2", "$f0" \ 99436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 100436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%llx\n", \ 101436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 102436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 103436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 104436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST5(instruction, offset, mem) \ 105436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 106436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long long out = 0; \ 107436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 108436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 109436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %2" "\n\t" \ 110436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmtc1 $zero, $f0" "\n\t" \ 111436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $f0, $t1($t0)" "\n\t" \ 112436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmfc1 %0, $f0" "\n\t" \ 113436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 114436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (mem) , "r" (offset) \ 115436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "$f0" \ 116436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 117436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%llx\n", \ 118436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 119436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 120436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 121436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST5w(instruction, offset, mem) \ 122436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 123436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned int out = 0; \ 124436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 125436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 126436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %2" "\n\t" \ 127436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmtc1 $zero, $f0" "\n\t" \ 128436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $f0, $t1($t0)" "\n\t" \ 129436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "mfc1 %0, $f0" "\n\t" \ 130436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 131436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (mem) , "r" (offset) \ 132436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "$f0" \ 133436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 134436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%x\n", \ 135436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 136436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 137436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 138436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST6(instruction, offset) \ 139436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ \ 140436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov unsigned long long out = 0; \ 141436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( \ 142436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %1" "\n\t" \ 143436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %3" "\n\t" \ 144436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t0, $t0, $t1" "\n\t" \ 145436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld $t3, 0($t0)" "\n\t" \ 146436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t1, %2" "\n\t" \ 147436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t2, %3" "\n\t" \ 148436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "daddu $t1, $t1, $t2" "\n\t" \ 149436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "dmtc1 $t3, $f3" "\n\t" \ 150436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "move $t0, %3" "\n\t" \ 151436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction" $f3, $t0($t1)" "\n\t" \ 152436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ld %0, 0($t1)" "\n\t" \ 153436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "=r" (out) \ 154436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "r" (reg_val2) , "r" (reg_val_zero), "r" (offset) \ 155436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0", "t1", "t2", "t3" \ 156436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); \ 157436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("%s :: offset: 0x%x, out: 0x%llx\n", \ 158436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov instruction, offset, out); \ 159436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 160