@@ -3,10 +3,12 @@ mod intrinsic;
3
3
mod types;
4
4
mod xml_parser;
5
5
6
- use crate :: common:: SupportedArchitectureTest ;
7
6
use crate :: common:: cli:: ProcessedCli ;
8
- use crate :: common:: intrinsic:: Intrinsic ;
7
+ use crate :: common:: intrinsic:: { Intrinsic , IntrinsicDefinition } ;
8
+ use crate :: common:: intrinsic_helpers:: TypeKind ;
9
+ use crate :: common:: SupportedArchitectureTest ;
9
10
use intrinsic:: X86IntrinsicType ;
11
+ use xml_parser:: get_xml_intrinsics;
10
12
11
13
pub struct X86ArchitectureTest {
12
14
intrinsics : Vec < Intrinsic < X86IntrinsicType > > ,
@@ -15,7 +17,28 @@ pub struct X86ArchitectureTest {
15
17
16
18
impl SupportedArchitectureTest for X86ArchitectureTest {
17
19
fn create ( cli_options : ProcessedCli ) -> Box < Self > {
18
- todo ! ( "create in X86ArchitectureTest is not implemented" )
20
+ let intrinsics =
21
+ get_xml_intrinsics ( & cli_options. filename ) . expect ( "Error parsing input file" ) ;
22
+
23
+ let mut intrinsics = intrinsics
24
+ . into_iter ( )
25
+ // Not sure how we would compare intrinsic that returns void.
26
+ . filter ( |i| i. results . kind ( ) != TypeKind :: Void )
27
+ . filter ( |i| i. results . kind ( ) != TypeKind :: BFloat )
28
+ . filter ( |i| i. arguments ( ) . args . len ( ) > 0 )
29
+ . filter ( |i| !i. arguments . iter ( ) . any ( |a| a. ty . kind ( ) == TypeKind :: BFloat ) )
30
+ // Skip pointers for now, we would probably need to look at the return
31
+ // type to work out how many elements we need to point to.
32
+ . filter ( |i| !i. arguments . iter ( ) . any ( |a| a. is_ptr ( ) ) )
33
+ . filter ( |i| !i. arguments . iter ( ) . any ( |a| a. ty . inner_size ( ) == 128 ) )
34
+ . filter ( |i| !cli_options. skip . contains ( & i. name ) )
35
+ . collect :: < Vec < _ > > ( ) ;
36
+
37
+ intrinsics. sort_by ( |a, b| a. name . cmp ( & b. name ) ) ;
38
+ Box :: new ( Self {
39
+ intrinsics : intrinsics,
40
+ cli_options : cli_options,
41
+ } )
19
42
}
20
43
21
44
fn build_c_file ( & self ) -> bool {
0 commit comments