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 = "MUHU";
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 0xffffffffaaaaaaa9ULL,
47 0x0000000055555554ULL,
48 0xffffffffcccccccbULL,
49 0x0000000033333332ULL,
50 0xffffffffe38e38e2ULL,
51 0x000000001c71c71bULL,
52 0x0000000000000000ULL,
53 0x0000000000000000ULL,
54 0x0000000000000000ULL,
55 0x0000000000000000ULL,
56 0x0000000000000000ULL,
57 0x0000000000000000ULL,
58 0x0000000000000000ULL,
59 0x0000000000000000ULL,
60 0xffffffffaaaaaaa9ULL,
61 0x0000000000000000ULL,
62 0x0000000071c71c70ULL,
63 0x0000000038e38e38ULL,
64 0xffffffff88888887ULL,
65 0x0000000022222221ULL,
66 0xffffffff97b425ecULL,
67 0x0000000012f684bdULL,
68 0x0000000055555554ULL,
69 0x0000000000000000ULL,
70 0x0000000038e38e38ULL,
71 0x000000001c71c71cULL,
72 0x0000000044444443ULL,
73 0x0000000011111110ULL,
74 0x000000004bda12f6ULL,
75 0x00000000097b425eULL,
76 0xffffffffcccccccbULL,
77 0x0000000000000000ULL,
78 0xffffffff88888887ULL,
79 0x0000000044444443ULL,
80 0xffffffffa3d70a3cULL,
81 0x0000000028f5c28fULL,
82 0xffffffffb60b60b4ULL,
83 0x0000000016c16c16ULL,
84 0x0000000033333332ULL,
85 0x0000000000000000ULL,
86 0x0000000022222221ULL,
87 0x0000000011111110ULL,
88 0x0000000028f5c28fULL,
89 0x000000000a3d70a3ULL,
90 0x000000002d82d82dULL,
91 0x0000000005b05b05ULL,
92 0xffffffffe38e38e2ULL,
93 0x0000000000000000ULL,
94 0xffffffff97b425ecULL,
95 0x000000004bda12f6ULL,
96 0xffffffffb60b60b4ULL,
97 0x000000002d82d82dULL,
98 0xffffffffca4587e5ULL,
99 0x000000001948b0fcULL,
100 0x000000001c71c71bULL,
101 0x0000000000000000ULL,
102 0x0000000012f684bdULL,
103 0x00000000097b425eULL,
104 0x0000000016c16c16ULL,
105 0x0000000005b05b05ULL,
106 0x000000001948b0fcULL,
107 0x000000000329161fULL,
108 0x0000000048b1c1dcULL,
109 0xffffffff86260fd6ULL,
110 0x000000005bd825b9ULL,
111 0x000000003bd8e9d8ULL,
112 0xffffffff86260fd6ULL,
113 0xfffffffff78e21c6ULL,
114 0xffffffffa97cd4d0ULL,
115 0x000000006e70e5bbULL,
116 0x000000005bd825b9ULL,
117 0xffffffffa97cd4d0ULL,
118 0x000000007409fad3ULL,
119 0x000000004b9ceb69ULL,
120 0x000000003bd8e9d8ULL,
121 0x000000006e70e5bbULL,
122 0x000000004b9ceb69ULL,
123 0x0000000031454bf2ULL,
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_MUHU(b64_pattern_se + i, b64_pattern_se + 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_MUHU(b64_random_se + i, b64_random_se + 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