1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <orc/orc.h>
#include <orc-test/orctest.h>
int error = FALSE;
char * test_opcode (OrcStaticOpcode *opcode, OrcTarget *target,
unsigned int target_flags);
int
main (int argc, char *argv[])
{
int i;
int j;
OrcOpcodeSet *opcode_set;
OrcTarget *targets[10];
unsigned int target_flags[10];
int n_targets = 0;
orc_init();
orc_test_init();
targets[n_targets] = orc_target_get_by_name("sse");
target_flags[n_targets] = orc_target_get_default_flags(targets[n_targets]);
n_targets++;
targets[n_targets] = orc_target_get_by_name("mmx");
target_flags[n_targets] = orc_target_get_default_flags(targets[n_targets]);
n_targets++;
targets[n_targets] = orc_target_get_by_name("altivec");
target_flags[n_targets] = orc_target_get_default_flags(targets[n_targets]);
n_targets++;
/* disabled due to bad coverage
targets[n_targets] = orc_target_get_by_name("arm");
target_flags[n_targets] = orc_target_get_default_flags(targets[n_targets]);
n_targets++;
*/
targets[n_targets] = orc_target_get_by_name("neon");
target_flags[n_targets] = orc_target_get_default_flags(targets[n_targets]);
n_targets++;
targets[n_targets] = orc_target_get_by_name("c64x-c");
target_flags[n_targets] = orc_target_get_default_flags(targets[n_targets]);
n_targets++;
printf(
"<!-- generated by " __FILE__ " -->\n"
"<table frame=\"all\" id=\"table-basictypes\" xreflabel=\"Table of Opcode Rule Coverage\">\n"
"<title>Table of Opcode Rule Coverage</title>\n"
"<tgroup cols=\"%d\" align=\"left\" colsep=\"1\" rowsep=\"1\">\n"
"<thead>\n"
"<row>\n"
"<entry>opcode name</entry>\n", n_targets+1);
for(j=0;j<n_targets;j++){
printf("<entry>%s</entry>\n",
orc_target_get_name(targets[j]));
}
printf(
"</row>\n"
"</thead>\n"
"<tbody valign=\"top\">\n");
opcode_set = orc_opcode_set_get ("sys");
for(i=0;i<opcode_set->n_opcodes;i++){
printf("<row>\n");
printf("<entry>%s</entry>\n", opcode_set->opcodes[i].name);
for(j=0;j<n_targets;j++){
printf("<entry>%s</entry>\n",
test_opcode (opcode_set->opcodes + i, targets[j], target_flags[j]));
}
printf("</row>\n");
}
printf(
"</tbody>\n"
"</tgroup>\n"
"</table>\n");
return 0;
}
char *
test_opcode (OrcStaticOpcode *opcode, OrcTarget *target,
unsigned int target_flags)
{
OrcProgram *p;
OrcCompileResult ret;
p = orc_test_get_program_for_opcode (opcode);
if (p) {
ret = orc_program_compile_full (p, target, target_flags);
orc_program_free (p);
if (ORC_COMPILE_RESULT_IS_SUCCESSFUL(ret)) {
return "yes";
}
}
p = orc_test_get_program_for_opcode_const (opcode);
if (p) {
ret = orc_program_compile_full (p, target, target_flags);
orc_program_free (p);
if (ORC_COMPILE_RESULT_IS_SUCCESSFUL(ret)) {
return "yes";
}
}
return "no";
}
|