simd_helpers/
lib.rs

1extern crate proc_macro;
2
3use std::iter::FromIterator;
4
5use proc_macro::TokenStream;
6use quote::quote;
7
8#[proc_macro_attribute]
9pub fn cold_for_target_arch(attr: TokenStream, item: TokenStream) -> TokenStream {
10    let arch_list = attr.to_string();
11    let mut out: Vec<TokenStream> = arch_list.split(",").map(|a| {
12        let a = a.trim().split("\"").nth(1).expect("A ','-separated list of \"arguments\" expected");
13        (quote! {
14            #[cfg_attr(target_arch = #a, cold)]
15        }).into()
16    }).collect();
17
18    out.push(item);
19
20    TokenStream::from_iter(out.into_iter())
21}
22
23