| #include <stdio.h> |
| |
| #define N 16 |
| #define SOLL 8 /* size of unsigned long long */ |
| |
| unsigned long long memSrc[] = { |
| 0x12345658121f1e1f, 0, |
| 3, -1, |
| 0x232f2e2f56568441, 0x242c2b2b1236548c, |
| 0xffffffff252a2e2b, 0x262d2d2a4521dddd, |
| 0x3f343f3e22222222, 0x3e353d3c41231548, |
| 0x363a3c3b45421212, 0x3b373b3a4545afcb, |
| 0x454f4e4556984525, 0xfffffffffffffffc, |
| 0x474d474c55aaaaaa, 0x4a484a4c65665659 |
| }; |
| |
| unsigned long long memDst[] = { |
| 0, 0, 0, 0, |
| 0, 0, 0, 0, |
| 0, 0, 0, 0, |
| 0, 0, 0, 0, |
| }; |
| |
| int main() |
| { |
| #if defined(__mips_hard_float) |
| int i, index; |
| unsigned long long outLoad; |
| for (i = 0; i < N * SOLL; i++) { |
| outLoad = 0; |
| __asm__ __volatile__( |
| "move $t0, %1" "\n\t" |
| "move $t1, %2" "\n\t" |
| "luxc1 $f0, $t1($t0)" "\n\t" |
| "dmfc1 %0, $f0" "\n\t" |
| "move $t0, %3" "\n\t" |
| "suxc1 $f0, $t1($t0)" "\n\t" |
| : "=r" (outLoad) |
| : "r" (memSrc), "r" (i), "r" (memDst) |
| : "t0", "t1", "$f0" |
| ); |
| index = (i / SOLL) % N; |
| printf("i: %d, memSrc[%d]: 0x%llx, memDst[%d]: 0x%llx, outLoad: 0x%llx\n", |
| i, index, memSrc[index], index, memDst[index], outLoad); |
| } |
| #endif |
| return 0; |
| } |