1/* This file contains the definitions and documentation for the 2 synchronization builtins used in the GNU compiler. 3 Copyright (C) 2005 Free Software Foundation, Inc. 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License 18along with GCC; see the file COPYING. If not, write to the Free 19Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 2002110-1301, USA. */ 21 22/* Before including this file, you should define a macro: 23 24 DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS) 25 26 See builtins.def for details. */ 27 28/* Synchronization Primitives. The "_N" version is the one that the user 29 is supposed to be using. It's overloaded, and is resolved to one of the 30 "_1" through "_16" versions, plus some extra casts. */ 31 32DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_N, "__sync_fetch_and_add", 33 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 34DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_1, "__sync_fetch_and_add_1", 35 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 36DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_2, "__sync_fetch_and_add_2", 37 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 38DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_4, "__sync_fetch_and_add_4", 39 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 40DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_8, "__sync_fetch_and_add_8", 41 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 42DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_16, "__sync_fetch_and_add_16", 43 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 44 45DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_N, "__sync_fetch_and_sub", 46 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 47DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1", 48 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 49DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2", 50 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 51DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4", 52 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 53DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8", 54 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 55DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16", 56 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 57 58DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_N, "__sync_fetch_and_or", 59 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 60DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_1, "__sync_fetch_and_or_1", 61 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 62DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_2, "__sync_fetch_and_or_2", 63 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 64DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_4, "__sync_fetch_and_or_4", 65 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 66DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_8, "__sync_fetch_and_or_8", 67 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 68DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_16, "__sync_fetch_and_or_16", 69 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 70 71DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_N, "__sync_fetch_and_and", 72 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 73DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_1, "__sync_fetch_and_and_1", 74 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 75DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_2, "__sync_fetch_and_and_2", 76 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 77DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_4, "__sync_fetch_and_and_4", 78 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 79DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_8, "__sync_fetch_and_and_8", 80 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 81DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_16, "__sync_fetch_and_and_16", 82 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 83 84DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_N, "__sync_fetch_and_xor", 85 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 86DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1", 87 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 88DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2", 89 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 90DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4", 91 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 92DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8", 93 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 94DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16", 95 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 96 97DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_N, "__sync_fetch_and_nand", 98 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 99DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1", 100 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 101DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2", 102 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 103DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4", 104 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 105DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8", 106 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 107DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16", 108 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 109 110DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_N, "__sync_add_and_fetch", 111 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 112DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_1, "__sync_add_and_fetch_1", 113 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 114DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_2, "__sync_add_and_fetch_2", 115 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 116DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_4, "__sync_add_and_fetch_4", 117 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 118DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_8, "__sync_add_and_fetch_8", 119 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 120DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_16, "__sync_add_and_fetch_16", 121 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 122 123DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_N, "__sync_sub_and_fetch", 124 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 125DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1", 126 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 127DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2", 128 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 129DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4", 130 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 131DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8", 132 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 133DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16", 134 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 135 136DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_N, "__sync_or_and_fetch", 137 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 138DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_1, "__sync_or_and_fetch_1", 139 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 140DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_2, "__sync_or_and_fetch_2", 141 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 142DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_4, "__sync_or_and_fetch_4", 143 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 144DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_8, "__sync_or_and_fetch_8", 145 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 146DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_16, "__sync_or_and_fetch_16", 147 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 148 149DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_N, "__sync_and_and_fetch", 150 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 151DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_1, "__sync_and_and_fetch_1", 152 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 153DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_2, "__sync_and_and_fetch_2", 154 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 155DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_4, "__sync_and_and_fetch_4", 156 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 157DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_8, "__sync_and_and_fetch_8", 158 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 159DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_16, "__sync_and_and_fetch_16", 160 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 161 162DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_N, "__sync_xor_and_fetch", 163 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 164DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1", 165 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 166DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2", 167 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 168DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4", 169 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 170DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8", 171 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 172DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16", 173 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 174 175DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_N, "__sync_nand_and_fetch", 176 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 177DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1", 178 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 179DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2", 180 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 181DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4", 182 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 183DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8", 184 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 185DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16", 186 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 187 188DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_N, 189 "__sync_bool_compare_and_swap", 190 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 191DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_1, 192 "__sync_bool_compare_and_swap_1", 193 BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROW_LIST) 194DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_2, 195 "__sync_bool_compare_and_swap_2", 196 BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROW_LIST) 197DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_4, 198 "__sync_bool_compare_and_swap_4", 199 BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROW_LIST) 200DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_8, 201 "__sync_bool_compare_and_swap_8", 202 BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROW_LIST) 203DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_16, 204 "__sync_bool_compare_and_swap_16", 205 BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROW_LIST) 206 207DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_N, 208 "__sync_val_compare_and_swap", 209 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 210DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_1, 211 "__sync_val_compare_and_swap_1", 212 BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROW_LIST) 213DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_2, 214 "__sync_val_compare_and_swap_2", 215 BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROW_LIST) 216DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_4, 217 "__sync_val_compare_and_swap_4", 218 BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROW_LIST) 219DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_8, 220 "__sync_val_compare_and_swap_8", 221 BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROW_LIST) 222DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_16, 223 "__sync_val_compare_and_swap_16", 224 BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROW_LIST) 225 226DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_N, "__sync_lock_test_and_set", 227 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 228DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1", 229 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST) 230DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2", 231 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST) 232DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4", 233 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST) 234DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8", 235 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST) 236DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_16, "__sync_lock_test_and_set_16", 237 BT_FN_I16_VPTR_I16, ATTR_NOTHROW_LIST) 238 239DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_N, "__sync_lock_release", 240 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST) 241DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_1, "__sync_lock_release_1", 242 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST) 243DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_2, "__sync_lock_release_2", 244 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST) 245DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_4, "__sync_lock_release_4", 246 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST) 247DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_8, "__sync_lock_release_8", 248 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST) 249DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_16, "__sync_lock_release_16", 250 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST) 251 252DEF_SYNC_BUILTIN (BUILT_IN_SYNCHRONIZE, "__sync_synchronize", 253 BT_FN_VOID, ATTR_NOTHROW_LIST) 254