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 = "DMUHU";
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 0xfffffffffffffffeULL,
45 0x0000000000000000ULL,
46 0xaaaaaaaaaaaaaaa9ULL,
47 0x5555555555555554ULL,
48 0xcccccccccccccccbULL,
49 0x3333333333333332ULL,
50 0xe38e38e38e38e38dULL,
51 0x1c71c71c71c71c70ULL,
52 0x0000000000000000ULL,
53 0x0000000000000000ULL,
54 0x0000000000000000ULL,
55 0x0000000000000000ULL,
56 0x0000000000000000ULL,
57 0x0000000000000000ULL,
58 0x0000000000000000ULL,
59 0x0000000000000000ULL,
60 0xaaaaaaaaaaaaaaa9ULL,
61 0x0000000000000000ULL,
62 0x71c71c71c71c71c6ULL,
63 0x38e38e38e38e38e3ULL,
64 0x8888888888888887ULL,
65 0x2222222222222221ULL,
66 0x97b425ed097b425eULL,
67 0x12f684bda12f684bULL,
68 0x5555555555555554ULL,
69 0x0000000000000000ULL,
70 0x38e38e38e38e38e3ULL,
71 0x1c71c71c71c71c71ULL,
72 0x4444444444444443ULL,
73 0x1111111111111110ULL,
74 0x4bda12f684bda12fULL,
75 0x097b425ed097b425ULL,
76 0xcccccccccccccccbULL,
77 0x0000000000000000ULL,
78 0x8888888888888887ULL,
79 0x4444444444444443ULL,
80 0xa3d70a3d70a3d708ULL,
81 0x28f5c28f5c28f5c2ULL,
82 0xb60b60b60b60b60aULL,
83 0x16c16c16c16c16c0ULL,
84 0x3333333333333332ULL,
85 0x0000000000000000ULL,
86 0x2222222222222221ULL,
87 0x1111111111111110ULL,
88 0x28f5c28f5c28f5c2ULL,
89 0x0a3d70a3d70a3d70ULL,
90 0x2d82d82d82d82d82ULL,
91 0x05b05b05b05b05b0ULL,
92 0xe38e38e38e38e38dULL,
93 0x0000000000000000ULL,
94 0x97b425ed097b425eULL,
95 0x4bda12f684bda12fULL,
96 0xb60b60b60b60b60aULL,
97 0x2d82d82d82d82d82ULL,
98 0xca4587e6b74f0328ULL,
99 0x1948b0fcd6e9e064ULL,
100 0x1c71c71c71c71c70ULL,
101 0x0000000000000000ULL,
102 0x12f684bda12f684bULL,
103 0x097b425ed097b425ULL,
104 0x16c16c16c16c16c0ULL,
105 0x05b05b05b05b05b0ULL,
106 0x1948b0fcd6e9e064ULL,
107 0x0329161f9add3c0cULL,
108 0x48b1c1dcdc0d6763ULL,
109 0x86260fd661cc8a61ULL,
110 0x5bd825b9f1c8246fULL,
111 0x3bd8e9d8f4da4851ULL,
112 0x86260fd661cc8a61ULL,
113 0xf78e21c74d87162aULL,
114 0xa97cd4d1e230b671ULL,
115 0x6e70e5bbf9651043ULL,
116 0x5bd825b9f1c8246fULL,
117 0xa97cd4d1e230b671ULL,
118 0x7409fad4b0e60fd3ULL,
119 0x4b9ceb6a79ae3b40ULL,
120 0x3bd8e9d8f4da4851ULL,
121 0x6e70e5bbf9651043ULL,
122 0x4b9ceb6a79ae3b40ULL,
123 0x31454bf2781d2c60ULL,
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_DMUHU(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_DMUHU(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