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 = "MULU";
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 0x0000000055555556ULL,
47 0xffffffffaaaaaaabULL,
48 0x0000000033333334ULL,
49 0xffffffffcccccccdULL,
50 0x0000000071c71c72ULL,
51 0xffffffff8e38e38fULL,
52 0x0000000000000000ULL,
53 0x0000000000000000ULL,
54 0x0000000000000000ULL,
55 0x0000000000000000ULL,
56 0x0000000000000000ULL,
57 0x0000000000000000ULL,
58 0x0000000000000000ULL,
59 0x0000000000000000ULL,
60 0x0000000055555556ULL,
61 0x0000000000000000ULL,
62 0xffffffffe38e38e4ULL,
63 0x0000000071c71c72ULL,
64 0x0000000077777778ULL,
65 0xffffffffdddddddeULL,
66 0xffffffffa12f684cULL,
67 0xffffffffb425ed0aULL,
68 0xffffffffaaaaaaabULL,
69 0x0000000000000000ULL,
70 0x0000000071c71c72ULL,
71 0x0000000038e38e39ULL,
72 0xffffffffbbbbbbbcULL,
73 0xffffffffeeeeeeefULL,
74 0xffffffffd097b426ULL,
75 0xffffffffda12f685ULL,
76 0x0000000033333334ULL,
77 0x0000000000000000ULL,
78 0x0000000077777778ULL,
79 0xffffffffbbbbbbbcULL,
80 0x0000000028f5c290ULL,
81 0x000000000a3d70a4ULL,
82 0x0000000027d27d28ULL,
83 0x000000000b60b60cULL,
84 0xffffffffcccccccdULL,
85 0x0000000000000000ULL,
86 0xffffffffdddddddeULL,
87 0xffffffffeeeeeeefULL,
88 0x000000000a3d70a4ULL,
89 0xffffffffc28f5c29ULL,
90 0x0000000049f49f4aULL,
91 0xffffffff82d82d83ULL,
92 0x0000000071c71c72ULL,
93 0x0000000000000000ULL,
94 0xffffffffa12f684cULL,
95 0xffffffffd097b426ULL,
96 0x0000000027d27d28ULL,
97 0x0000000049f49f4aULL,
98 0xffffffffe06522c4ULL,
99 0xffffffff9161f9aeULL,
100 0xffffffff8e38e38fULL,
101 0x0000000000000000ULL,
102 0xffffffffb425ed0aULL,
103 0xffffffffda12f685ULL,
104 0x000000000b60b60cULL,
105 0xffffffff82d82d83ULL,
106 0xffffffff9161f9aeULL,
107 0xfffffffffcd6e9e1ULL,
108 0x0000000061639000ULL,
109 0xffffffffe7176a00ULL,
110 0xffffffffc4346000ULL,
111 0xffffffffee787980ULL,
112 0xffffffffe7176a00ULL,
113 0xfffffffffded7040ULL,
114 0xffffffffbe6cdc00ULL,
115 0x000000002143b470ULL,
116 0xffffffffc4346000ULL,
117 0xffffffffbe6cdc00ULL,
118 0xffffffffe5044000ULL,
119 0xffffffff89e38100ULL,
120 0xffffffffee787980ULL,
121 0x000000002143b470ULL,
122 0xffffffff89e38100ULL,
123 0xffffffffb1e9cfc4ULL,
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_MULU(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_MULU(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