1// To apply, at the top of xnu.git: 2// $ spatch --max-width=120 --use-gitgrep --in-place --include-headers --sp-file tools/cocci/c11_atomic_builtin_rewrite.cocci 3 4@memory_order@ 5identifier m =~ "(memory_order_(relaxed|consume|acquire|release|acq_rel|seq_cst)(|_smp)|__ATOMIC_(RELAXED|CONSUME|ACQUIRE|RELEASE|ACQ_REL|SEQ_CST))"; 6@@ 7 8m 9 10@script:ocaml os_memory_order@ 11m << memory_order.m; 12new_m; 13@@ 14 15new_m := make_ident (String.lowercase_ascii (Str.global_replace (Str.regexp "memory_order_\\|__ATOMIC_\\|_smp") "" m)) 16 17@fence@ 18identifier memory_order.m; 19identifier os_memory_order.new_m; 20@@ 21 22- __c11_atomic_thread_fence(m) 23+ os_atomic_thread_fence(new_m) 24 25@load@ 26expression E; 27type T; 28identifier memory_order.m; 29identifier os_memory_order.new_m; 30@@ 31 32- __c11_atomic_load 33+ os_atomic_load 34 ( 35( 36-((T)E) 37+E 38| 39-(T)E 40+E 41| 42E 43) 44 , 45-m 46+new_m 47 ) 48 49@inc@ 50expression E; 51type T; 52identifier memory_order.m; 53identifier os_memory_order.new_m; 54@@ 55 56- __c11_atomic_fetch_add 57+ os_atomic_inc_orig 58 ( 59( 60-((T)E) 61+E 62| 63-(T)E 64+E 65| 66E 67) 68 , 69-1, m 70+new_m 71 ) 72 73@dec@ 74expression E; 75type T; 76identifier memory_order.m; 77identifier os_memory_order.new_m; 78@@ 79 80- __c11_atomic_fetch_sub 81+ os_atomic_dec_orig 82 ( 83( 84-((T)E) 85+E 86| 87-(T)E 88+E 89| 90E 91) 92 , 93-1, m 94+new_m 95 ) 96 97@single_arg@ 98expression E, F; 99type T; 100identifier memory_order.m; 101identifier os_memory_order.new_m; 102@@ 103 104( 105- __c11_atomic_store 106+ os_atomic_store 107| 108- __c11_atomic_fetch_add 109+ os_atomic_add_orig 110| 111- __c11_atomic_fetch_sub 112+ os_atomic_sub_orig 113| 114- __c11_atomic_fetch_and 115+ os_atomic_and_orig 116| 117- __c11_atomic_fetch_or 118+ os_atomic_or_orig 119| 120- __c11_atomic_fetch_xor 121+ os_atomic_xor_orig 122) 123 ( 124( 125-((T)E) 126+E 127| 128-(T)E 129+E 130| 131E 132) 133 , F, 134-m 135+new_m 136 ) 137 138@cmpxcgh@ 139expression E, F, G; 140type T; 141identifier memory_order.m; 142identifier os_memory_order.new_m; 143@@ 144 145- __c11_atomic_compare_exchange_strong 146+ os_atomic_cmpxchgv 147 ( 148( 149-((T)E) 150+E 151| 152-(T)E 153+E 154| 155E 156) 157 , 158- &F, G, m, memory_order_relaxed 159+ F, G, &F, new_m 160 ) 161 162// vim:ft=diff: 163