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