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 *isa_ase_name = "mips64r6";
35 char *group_name = "Int Multiply";
36 char *instruction_name = "DMUL";
37 int32_t ret;
38 uint32_t i, j;
39 struct timeval start, end;
40 double elapsed_time;
41
42 uint64_t b64_result[TEST_COUNT_TOTAL];
43 uint64_t b64_expect[TEST_COUNT_TOTAL] = {
44 0x0000000000000001ULL,
45 0x0000000000000000ULL,
46 0x5555555555555556ULL,
47 0xaaaaaaaaaaaaaaabULL,
48 0x3333333333333334ULL,
49 0xcccccccccccccccdULL,
50 0x1c71c71c71c71c72ULL,
51 0xe38e38e38e38e38fULL,
52 0x0000000000000000ULL,
53 0x0000000000000000ULL,
54 0x0000000000000000ULL,
55 0x0000000000000000ULL,
56 0x0000000000000000ULL,
57 0x0000000000000000ULL,
58 0x0000000000000000ULL,
59 0x0000000000000000ULL,
60 0x5555555555555556ULL,
61 0x0000000000000000ULL,
62 0x38e38e38e38e38e4ULL,
63 0x1c71c71c71c71c72ULL,
64 0x7777777777777778ULL,
65 0xdddddddddddddddeULL,
66 0x12f684bda12f684cULL,
67 0x425ed097b425ed0aULL,
68 0xaaaaaaaaaaaaaaabULL,
69 0x0000000000000000ULL,
70 0x1c71c71c71c71c72ULL,
71 0x8e38e38e38e38e39ULL,
72 0xbbbbbbbbbbbbbbbcULL,
73 0xeeeeeeeeeeeeeeefULL,
74 0x097b425ed097b426ULL,
75 0xa12f684bda12f685ULL,
76 0x3333333333333334ULL,
77 0x0000000000000000ULL,
78 0x7777777777777778ULL,
79 0xbbbbbbbbbbbbbbbcULL,
80 0xf5c28f5c28f5c290ULL,
81 0x3d70a3d70a3d70a4ULL,
82 0x7d27d27d27d27d28ULL,
83 0xb60b60b60b60b60cULL,
84 0xcccccccccccccccdULL,
85 0x0000000000000000ULL,
86 0xdddddddddddddddeULL,
87 0xeeeeeeeeeeeeeeefULL,
88 0x3d70a3d70a3d70a4ULL,
89 0x8f5c28f5c28f5c29ULL,
90 0x9f49f49f49f49f4aULL,
91 0x2d82d82d82d82d83ULL,
92 0x1c71c71c71c71c72ULL,
93 0x0000000000000000ULL,
94 0x12f684bda12f684cULL,
95 0x097b425ed097b426ULL,
96 0x7d27d27d27d27d28ULL,
97 0x9f49f49f49f49f4aULL,
98 0xb0fcd6e9e06522c4ULL,
99 0x6b74f0329161f9aeULL,
100 0xe38e38e38e38e38fULL,
101 0x0000000000000000ULL,
102 0x425ed097b425ed0aULL,
103 0xa12f684bda12f685ULL,
104 0xb60b60b60b60b60cULL,
105 0x2d82d82d82d82d83ULL,
106 0x6b74f0329161f9aeULL,
107 0x781948b0fcd6e9e1ULL,
108 0xad45be6961639000ULL,
109 0xefa7a5a0e7176a00ULL,
110 0x08c6139fc4346000ULL,
111 0xfbe1883aee787980ULL,
112 0xefa7a5a0e7176a00ULL,
113 0x37ae2b38fded7040ULL,
114 0x6acb3d68be6cdc00ULL,
115 0xedbf72842143b470ULL,
116 0x08c6139fc4346000ULL,
117 0x6acb3d68be6cdc00ULL,
118 0x8624e5e1e5044000ULL,
119 0x76a5ab8089e38100ULL,
120 0xfbe1883aee787980ULL,
121 0xedbf72842143b470ULL,
122 0x76a5ab8089e38100ULL,
123 0x4bb436d5b1e9cfc4ULL,
124 };
125
126 gettimeofday(&start, NULL);
127
128 for (i = 0; i < PATTERN_INPUTS_64_SHORT_COUNT; i++) {
129 for (j = 0; j < PATTERN_INPUTS_64_SHORT_COUNT; j++) {
130 do_mips64r6_DMUL(b64_pattern + i, b64_pattern + j,
131 b64_result + (PATTERN_INPUTS_64_SHORT_COUNT * i + j));
132 }
133 }
134
135 for (i = 0; i < RANDOM_INPUTS_64_SHORT_COUNT; i++) {
136 for (j = 0; j < RANDOM_INPUTS_64_SHORT_COUNT; j++) {
137 do_mips64r6_DMUL(b64_random + i, b64_random + j,
138 b64_result + (((PATTERN_INPUTS_64_SHORT_COUNT) *
139 (PATTERN_INPUTS_64_SHORT_COUNT)) +
140 RANDOM_INPUTS_64_SHORT_COUNT * i + j));
141 }
142 }
143
144 gettimeofday(&end, NULL);
145
146 elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0;
147 elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0;
148
149 ret = check_results_64(instruction_name, TEST_COUNT_TOTAL, elapsed_time,
150 b64_result, b64_expect);
151
152 return ret;
153}
154