1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <sys/time.h>
23#include <stdint.h>
24
25#include "../../../../include/wrappers_mips64r6.h"
26#include "../../../../include/test_inputs_64.h"
27#include "../../../../include/test_utils_64.h"
28
29#define TEST_COUNT_TOTAL (PATTERN_INPUTS_64_COUNT + RANDOM_INPUTS_64_COUNT)
30
31
32int32_t main(void)
33{
34 char *instruction_name = "DMUL";
35 int32_t ret;
36 uint32_t i, j;
37 struct timeval start, end;
38 double elapsed_time;
39
40 uint64_t b64_result[TEST_COUNT_TOTAL];
41 uint64_t b64_expect[TEST_COUNT_TOTAL] = {
42 0x0000000000000001ULL,
43 0x0000000000000000ULL,
44 0x5555555555555556ULL,
45 0xaaaaaaaaaaaaaaabULL,
46 0x3333333333333334ULL,
47 0xcccccccccccccccdULL,
48 0x1c71c71c71c71c72ULL,
49 0xe38e38e38e38e38fULL,
50 0x0000000000000000ULL,
51 0x0000000000000000ULL,
52 0x0000000000000000ULL,
53 0x0000000000000000ULL,
54 0x0000000000000000ULL,
55 0x0000000000000000ULL,
56 0x0000000000000000ULL,
57 0x0000000000000000ULL,
58 0x5555555555555556ULL,
59 0x0000000000000000ULL,
60 0x38e38e38e38e38e4ULL,
61 0x1c71c71c71c71c72ULL,
62 0x7777777777777778ULL,
63 0xdddddddddddddddeULL,
64 0x12f684bda12f684cULL,
65 0x425ed097b425ed0aULL,
66 0xaaaaaaaaaaaaaaabULL,
67 0x0000000000000000ULL,
68 0x1c71c71c71c71c72ULL,
69 0x8e38e38e38e38e39ULL,
70 0xbbbbbbbbbbbbbbbcULL,
71 0xeeeeeeeeeeeeeeefULL,
72 0x097b425ed097b426ULL,
73 0xa12f684bda12f685ULL,
74 0x3333333333333334ULL,
75 0x0000000000000000ULL,
76 0x7777777777777778ULL,
77 0xbbbbbbbbbbbbbbbcULL,
78 0xf5c28f5c28f5c290ULL,
79 0x3d70a3d70a3d70a4ULL,
80 0x7d27d27d27d27d28ULL,
81 0xb60b60b60b60b60cULL,
82 0xcccccccccccccccdULL,
83 0x0000000000000000ULL,
84 0xdddddddddddddddeULL,
85 0xeeeeeeeeeeeeeeefULL,
86 0x3d70a3d70a3d70a4ULL,
87 0x8f5c28f5c28f5c29ULL,
88 0x9f49f49f49f49f4aULL,
89 0x2d82d82d82d82d83ULL,
90 0x1c71c71c71c71c72ULL,
91 0x0000000000000000ULL,
92 0x12f684bda12f684cULL,
93 0x097b425ed097b426ULL,
94 0x7d27d27d27d27d28ULL,
95 0x9f49f49f49f49f4aULL,
96 0xb0fcd6e9e06522c4ULL,
97 0x6b74f0329161f9aeULL,
98 0xe38e38e38e38e38fULL,
99 0x0000000000000000ULL,
100 0x425ed097b425ed0aULL,
101 0xa12f684bda12f685ULL,
102 0xb60b60b60b60b60cULL,
103 0x2d82d82d82d82d83ULL,
104 0x6b74f0329161f9aeULL,
105 0x781948b0fcd6e9e1ULL,
106 0xad45be6961639000ULL,
107 0xefa7a5a0e7176a00ULL,
108 0x08c6139fc4346000ULL,
109 0xfbe1883aee787980ULL,
110 0xefa7a5a0e7176a00ULL,
111 0x37ae2b38fded7040ULL,
112 0x6acb3d68be6cdc00ULL,
113 0xedbf72842143b470ULL,
114 0x08c6139fc4346000ULL,
115 0x6acb3d68be6cdc00ULL,
116 0x8624e5e1e5044000ULL,
117 0x76a5ab8089e38100ULL,
118 0xfbe1883aee787980ULL,
119 0xedbf72842143b470ULL,
120 0x76a5ab8089e38100ULL,
121 0x4bb436d5b1e9cfc4ULL,
122 };
123
124 gettimeofday(&start, NULL);
125
126 for (i = 0; i < PATTERN_INPUTS_64_SHORT_COUNT; i++) {
127 for (j = 0; j < PATTERN_INPUTS_64_SHORT_COUNT; j++) {
128 do_mips64r6_DMUL(b64_pattern + i, b64_pattern + j,
129 b64_result + (PATTERN_INPUTS_64_SHORT_COUNT * i + j));
130 }
131 }
132
133 for (i = 0; i < RANDOM_INPUTS_64_SHORT_COUNT; i++) {
134 for (j = 0; j < RANDOM_INPUTS_64_SHORT_COUNT; j++) {
135 do_mips64r6_DMUL(b64_random + i, b64_random + j,
136 b64_result + (((PATTERN_INPUTS_64_SHORT_COUNT) *
137 (PATTERN_INPUTS_64_SHORT_COUNT)) +
138 RANDOM_INPUTS_64_SHORT_COUNT * i + j));
139 }
140 }
141
142 gettimeofday(&end, NULL);
143
144 elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0;
145 elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0;
146
147 ret = check_results_64(instruction_name, TEST_COUNT_TOTAL, elapsed_time,
148 b64_result, b64_expect);
149
150 return ret;
151}
152