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 = "DMUH";
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 0x0000000000000000ULL,
45 0x0000000000000000ULL,
46 0x0000000000000000ULL,
47 0xffffffffffffffffULL,
48 0x0000000000000000ULL,
49 0xffffffffffffffffULL,
50 0x0000000000000000ULL,
51 0xffffffffffffffffULL,
52 0x0000000000000000ULL,
53 0x0000000000000000ULL,
54 0x0000000000000000ULL,
55 0x0000000000000000ULL,
56 0x0000000000000000ULL,
57 0x0000000000000000ULL,
58 0x0000000000000000ULL,
59 0x0000000000000000ULL,
60 0x0000000000000000ULL,
61 0x0000000000000000ULL,
62 0x1c71c71c71c71c72ULL,
63 0xe38e38e38e38e38eULL,
64 0x1111111111111111ULL,
65 0xeeeeeeeeeeeeeeeeULL,
66 0x097b425ed097b426ULL,
67 0xf684bda12f684bdaULL,
68 0xffffffffffffffffULL,
69 0x0000000000000000ULL,
70 0xe38e38e38e38e38eULL,
71 0x1c71c71c71c71c71ULL,
72 0xeeeeeeeeeeeeeeeeULL,
73 0x1111111111111110ULL,
74 0xf684bda12f684bdaULL,
75 0x097b425ed097b425ULL,
76 0x0000000000000000ULL,
77 0x0000000000000000ULL,
78 0x1111111111111111ULL,
79 0xeeeeeeeeeeeeeeeeULL,
80 0x0a3d70a3d70a3d70ULL,
81 0xf5c28f5c28f5c28fULL,
82 0x05b05b05b05b05b0ULL,
83 0xfa4fa4fa4fa4fa4fULL,
84 0xffffffffffffffffULL,
85 0x0000000000000000ULL,
86 0xeeeeeeeeeeeeeeeeULL,
87 0x1111111111111110ULL,
88 0xf5c28f5c28f5c28fULL,
89 0x0a3d70a3d70a3d70ULL,
90 0xfa4fa4fa4fa4fa4fULL,
91 0x05b05b05b05b05b0ULL,
92 0x0000000000000000ULL,
93 0x0000000000000000ULL,
94 0x097b425ed097b426ULL,
95 0xf684bda12f684bdaULL,
96 0x05b05b05b05b05b0ULL,
97 0xfa4fa4fa4fa4fa4fULL,
98 0x0329161f9add3c0cULL,
99 0xfcd6e9e06522c3f3ULL,
100 0xffffffffffffffffULL,
101 0x0000000000000000ULL,
102 0xf684bda12f684bdaULL,
103 0x097b425ed097b425ULL,
104 0xfa4fa4fa4fa4fa4fULL,
105 0x05b05b05b05b05b0ULL,
106 0xfcd6e9e06522c3f3ULL,
107 0x0329161f9add3c0cULL,
108 0x37dbf4448b48bce3ULL,
109 0x01fd28a6ebd66e19ULL,
110 0x271290430f9643afULL,
111 0xcb89d38b96a86603ULL,
112 0x01fd28a6ebd66e19ULL,
113 0x00122100b25f881aULL,
114 0x016425c3dacd63e9ULL,
115 0xfe21cf6e9b332df5ULL,
116 0x271290430f9643afULL,
117 0x016425c3dacd63e9ULL,
118 0x1b549d7f3d46f8d3ULL,
119 0xdb4dd51d1b7c58f2ULL,
120 0xcb89d38b96a86603ULL,
121 0xfe21cf6e9b332df5ULL,
122 0xdb4dd51d1b7c58f2ULL,
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_DMUH(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_DMUH(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