@@ -23,9 +23,9 @@ pub enum Language {
23
23
C ,
24
24
}
25
25
26
- fn generate_c_program ( header_file : & str , intrinsic : & Intrinsic ) -> String {
26
+ fn generate_c_program ( header_files : & [ & str ] , intrinsic : & Intrinsic ) -> String {
27
27
format ! (
28
- r#"#include <{header_file}>
28
+ r#"{header_files}
29
29
#include <iostream>
30
30
#include <cstring>
31
31
#include <iomanip>
@@ -52,7 +52,11 @@ int main(int argc, char **argv) {{
52
52
{passes}
53
53
return 0;
54
54
}}"# ,
55
- header_file = header_file,
55
+ header_files = header_files
56
+ . iter( )
57
+ . map( |header| format!( "#include <{}>" , header) )
58
+ . collect:: <Vec <_>>( )
59
+ . join( "\n " ) ,
56
60
passes = ( 1 ..20 )
57
61
. map( |idx| intrinsic. generate_pass_c( idx) )
58
62
. collect:: <Vec <_>>( )
@@ -85,8 +89,9 @@ fn compile_c(c_filename: &str, intrinsic: &Intrinsic, compiler: &str) -> bool {
85
89
let output = Command :: new ( "sh" )
86
90
. arg ( "-c" )
87
91
. arg ( format ! (
88
- "{cpp} {cppflags} -Wno-narrowing -O2 -target {target} -o c_programs/{intrinsic} {filename}" ,
92
+ "{cpp} {cppflags} {arch_flags} -Wno-narrowing -O2 -target {target} -o c_programs/{intrinsic} {filename}" ,
89
93
target = "aarch64-unknown-linux-gnu" ,
94
+ arch_flags = "-march=armv8-a+crypto+crc" ,
90
95
filename = c_filename,
91
96
intrinsic = intrinsic. name,
92
97
cpp = compiler,
@@ -125,7 +130,7 @@ fn build_c(intrinsics: &Vec<Intrinsic>, compiler: &str) -> bool {
125
130
let c_filename = format ! ( r#"c_programs/{}.cpp"# , i. name) ;
126
131
let mut file = File :: create ( & c_filename) . unwrap ( ) ;
127
132
128
- let c_code = generate_c_program ( "arm_neon.h" , & i) ;
133
+ let c_code = generate_c_program ( & [ "arm_neon.h" , "arm_acle.h" ] , & i) ;
129
134
file. write_all ( c_code. into_bytes ( ) . as_slice ( ) ) . unwrap ( ) ;
130
135
compile_c ( & c_filename, & i, compiler)
131
136
} )
0 commit comments