@@ -2,11 +2,12 @@ use super::argument::Argument;
22use super :: config:: { AARCH_CONFIGURATIONS , POLY128_OSTREAM_DEF , build_notices} ;
33use super :: format:: Indentation ;
44use super :: intrinsic:: Intrinsic ;
5- use crate :: common:: gen_c:: { compile_c, create_c_files, generate_c_program} ;
6- use crate :: common:: gen_rust:: { compile_rust, create_rust_files, generate_rust_program} ;
5+ use crate :: common:: gen_c:: { compile_c, create_c_filenames, generate_c_program} ;
6+ use crate :: common:: gen_rust:: { compile_rust, create_rust_filenames, generate_rust_program} ;
7+ use crate :: common:: write_file;
78use itertools:: Itertools ;
89use rayon:: prelude:: * ;
9- use std:: io :: Write ;
10+ use std:: collections :: BTreeMap ;
1011
1112// The number of times each intrinsic will be called.
1213const PASSES : u32 = 20 ;
@@ -149,13 +150,14 @@ fn generate_rust_program_arm(intrinsic: &Intrinsic, target: &str) -> String {
149150}
150151
151152fn compile_c_arm (
152- intrinsics_name_list : Vec < String > ,
153+ intrinsics_name_list : & Vec < String > ,
154+ filename_mapping : BTreeMap < & String , String > ,
153155 compiler : & str ,
154156 target : & str ,
155157 cxx_toolchain_dir : Option < & str > ,
156158) -> bool {
157- let compiler_commands = intrinsics_name_list. iter ( ) . map ( |intrinsic_name|{
158- let c_filename = format ! ( r#"c_programs/{ intrinsic_name}.cpp"# ) ;
159+ let compiler_commands = intrinsics_name_list. iter ( ) . map ( |intrinsic_name| {
160+ let c_filename = filename_mapping . get ( intrinsic_name) . unwrap ( ) ;
159161 let flags = std:: env:: var ( "CPPFLAGS" ) . unwrap_or ( "" . into ( ) ) ;
160162 let arch_flags = if target. contains ( "v7" ) {
161163 "-march=armv8.6-a+crypto+crc+dotprod+fp16"
@@ -223,24 +225,29 @@ pub fn build_c(
223225 target : & str ,
224226 cxx_toolchain_dir : Option < & str > ,
225227) -> bool {
226- let _ = std:: fs:: create_dir ( "c_programs" ) ;
227228 let intrinsics_name_list = intrinsics
228229 . par_iter ( )
229230 . map ( |i| i. name . clone ( ) )
230231 . collect :: < Vec < _ > > ( ) ;
231- let file_mapping = create_c_files ( & intrinsics_name_list) ;
232+ let filename_mapping = create_c_filenames ( & intrinsics_name_list) ;
232233
233234 intrinsics. par_iter ( ) . for_each ( |i| {
234235 let c_code = generate_c_program_arm ( & [ "arm_neon.h" , "arm_acle.h" , "arm_fp16.h" ] , i, target) ;
235- match file_mapping . get ( & i. name ) {
236- Some ( mut file ) => file . write_all ( c_code. into_bytes ( ) . as_slice ( ) ) . unwrap ( ) ,
236+ match filename_mapping . get ( & i. name ) {
237+ Some ( filename ) => write_file ( filename , c_code) ,
237238 None => { }
238239 } ;
239240 } ) ;
240241
241242 match compiler {
242243 None => true ,
243- Some ( compiler) => compile_c_arm ( intrinsics_name_list, compiler, target, cxx_toolchain_dir) ,
244+ Some ( compiler) => compile_c_arm (
245+ & intrinsics_name_list,
246+ filename_mapping,
247+ compiler,
248+ target,
249+ cxx_toolchain_dir,
250+ ) ,
244251 }
245252}
246253
@@ -254,12 +261,12 @@ pub fn build_rust(
254261 . par_iter ( )
255262 . map ( |i| i. name . clone ( ) )
256263 . collect :: < Vec < _ > > ( ) ;
257- let file_mapping = create_rust_files ( & intrinsics_name_list) ;
264+ let filename_mapping = create_rust_filenames ( & intrinsics_name_list) ;
258265
259266 intrinsics. par_iter ( ) . for_each ( |i| {
260- let c_code = generate_rust_program_arm ( i, target) ;
261- match file_mapping . get ( & i. name ) {
262- Some ( mut file ) => file . write_all ( c_code . into_bytes ( ) . as_slice ( ) ) . unwrap ( ) ,
267+ let rust_code = generate_rust_program_arm ( i, target) ;
268+ match filename_mapping . get ( & i. name ) {
269+ Some ( filename ) => write_file ( filename , rust_code ) ,
263270 None => { }
264271 }
265272 } ) ;
0 commit comments