1 // To apply, at the top of xnu.git:
2 // $ spatch --max-width=120 --use-gitgrep --in-place --include-headers --sp-file tools/cocci/os_atomic_normalize.cocci -dir .
4 // coccinelle insists on adding a space for (void) casts which can be fixed with:
5 // $ git grep -l '(void) os_atomic' | xargs -n1 sed -i '' -e 's/(void) os_atomic/(void)os_atomic/'
8 identifier fn =~ "^os_atomic";
18 new_fn := make_ident (Str.global_replace (Str.regexp "_orig") "" fn)
21 identifier os_atomic.fn;
22 identifier unorig.new_fn;
30 @@ expression E, F, m; @@
33 - os_atomic_add(E, 1, m)
36 - os_atomic_add_orig(E, 1, m)
37 + os_atomic_inc_orig(E, m)
39 - os_atomic_sub(E, -1, m)
42 - os_atomic_sub_orig(E, -1, m)
43 + os_atomic_inc_orig(E, m)
45 - os_atomic_add(E, -1, m)
48 - os_atomic_add_orig(E, -1, m)
49 + os_atomic_dec_orig(E, m)
51 - os_atomic_sub(E, 1, m)
54 - os_atomic_sub_orig(E, 1, m)
55 + os_atomic_dec_orig(E, m)
57 - os_atomic_add(E, -(F), m)
58 + os_atomic_sub(E, F, m)
60 - os_atomic_add_orig(E, -(F), m)
61 + os_atomic_sub_orig(E, F, m)
63 - os_atomic_add(E, -F, m)
64 + os_atomic_sub(E, F, m)
66 - os_atomic_add_orig(E, -F, m)
67 + os_atomic_sub_orig(E, F, m)
69 - os_atomic_sub(E, -(F), m)
70 + os_atomic_add(E, F, m)
72 - os_atomic_sub_orig(E, -(F), m)
73 + os_atomic_add_orig(E, F, m)
75 - os_atomic_sub(E, -F, m)
76 + os_atomic_add(E, F, m)
78 - os_atomic_sub_orig(E, -F, m)
79 + os_atomic_add_orig(E, F, m)
81 - os_atomic_and(E, ~(F), m)
82 + os_atomic_andnot(E, F, m)
84 - os_atomic_and_orig(E, ~(F), m)
85 + os_atomic_andnot_orig(E, F, m)
87 - os_atomic_and(E, ~F, m)
88 + os_atomic_andnot(E, F, m)
90 - os_atomic_and_orig(E, ~F, m)
91 + os_atomic_andnot_orig(E, F, m)