History

stdatomic: c11 prefix; migrate to models macros

Dmitry Selyutin committed 5 years ago

Commit 65773a51 parent 5053fd02 files · +53 −67Browse files

Unified · Split

2 files
  1. tccgen.c +42 −48
  2. tcctok.h +11 −19
tccgen.c+42−48
@@ -5727,20 +5727,24 @@ static void parse_builtin_params(int nc, const char *args) · 5726 unmodified lines
5727 nocode_wanted--;5727 nocode_wanted--;
5728}5728}
5729 5729
5730static void parse_memory_model(int mtok)5730static inline int is_memory_model(const SValue *sv)
5731{5731{
5732 next();5732 /*
5733 5733 * FIXME
5734 switch (mtok) {5734 * The memory models should better be backed by an enumeration.
5735 case TOK___ATOMIC_RELAXED: vpushs(0); break;5735 *
5736 case TOK___ATOMIC_CONSUME: vpushs(1); break;5736 * const int t = sv->type.t;
5737 case TOK___ATOMIC_ACQUIRE: vpushs(2); break;5737 *
5738 case TOK___ATOMIC_RELEASE: vpushs(3); break;5738 * if (!IS_ENUM_VAL(t))
5739 case TOK___ATOMIC_ACQ_REL: vpushs(4); break;5739 * return 0;
5740 case TOK___ATOMIC_SEQ_CST: vpushs(5); break;5740 *
5741 }5741 * if (!(t & VT_STATIC))
5742 5742 * return 0;
5743 vtop->type.t |= (VT_UNSIGNED | VT_MEMMODEL);5743 *
5744 * Ideally we should check whether the model matches 1:1.
5745 * If it is possible, we should check by the name of the value.
5746 */
5747 return (((t & VT_BTYPE) == VT_INT) && (sv->c.i < 6));
5744}5748}
5745 5749
5746static void parse_atomic(int atok)5750static void parse_atomic(int atok)
@@ -5762,17 +5766,17 @@ static void parse_atomic(int atok) · 15 unmodified lines
5762 * v -- value5766 * v -- value
5763 * m -- memory model5767 * m -- memory model
5764 */5768 */
5765 {TOK___atomic_init, "-a"},5769 {TOK___c11_atomic_init, "-a"},
5766 {TOK___atomic_store, "-avm"},5770 {TOK___c11_atomic_store, "-avm"},
5767 {TOK___atomic_load, "am"},5771 {TOK___c11_atomic_load, "am"},
5768 {TOK___atomic_exchange, "avm"},5772 {TOK___c11_atomic_exchange, "avm"},
5769 {TOK___atomic_compare_exchange_strong, "apvmm"},5773 {TOK___c11_atomic_compare_exchange_strong, "apvmm"},
5770 {TOK___atomic_compare_exchange_weak, "apvmm"},5774 {TOK___c11_atomic_compare_exchange_weak, "apvmm"},
5771 {TOK___atomic_fetch_add, "avm"},5775 {TOK___c11_atomic_fetch_add, "avm"},
5772 {TOK___atomic_fetch_sub, "avm"},5776 {TOK___c11_atomic_fetch_sub, "avm"},
5773 {TOK___atomic_fetch_or, "avm"},5777 {TOK___c11_atomic_fetch_or, "avm"},
5774 {TOK___atomic_fetch_xor, "avm"},5778 {TOK___c11_atomic_fetch_xor, "avm"},
5775 {TOK___atomic_fetch_and, "avm"},5779 {TOK___c11_atomic_fetch_and, "avm"},
5776 };5780 };
5777 5781
5778 next();5782 next();
@@ -5837,8 +5841,8 @@ static void parse_atomic(int atok) · 58 unmodified lines
5837 break;5841 break;
5838 5842
5839 case 'm':5843 case 'm':
5840 if ((vtop->type.t & VT_MEMMODEL) != VT_MEMMODEL)5844 if (!is_memory_model(vtop))
5841 expect_arg("memory model constant", arg);5845 expect_arg("memory model", arg);
5842 vtop->type.t &= ~VT_MEMMODEL;5846 vtop->type.t &= ~VT_MEMMODEL;
5843 break;5847 break;
5844 5848
@@ -6234,28 +6238,18 @@ ST_FUNC void unary(void) · 389 unmodified lines
6234 }6238 }
6235#endif6239#endif
6236 6240
6237 /* memory models */
6238 case TOK___ATOMIC_RELAXED:
6239 case TOK___ATOMIC_CONSUME:
6240 case TOK___ATOMIC_ACQUIRE:
6241 case TOK___ATOMIC_RELEASE:
6242 case TOK___ATOMIC_ACQ_REL:
6243 case TOK___ATOMIC_SEQ_CST:
6244 parse_memory_model(tok);
6245 break;
6246
6247 /* atomic operations */6241 /* atomic operations */
6248 case TOK___atomic_init:6242 case TOK___c11_atomic_init:
6249 case TOK___atomic_store:6243 case TOK___c11_atomic_store:
6250 case TOK___atomic_load:6244 case TOK___c11_atomic_load:
6251 case TOK___atomic_exchange:6245 case TOK___c11_atomic_exchange:
6252 case TOK___atomic_compare_exchange_strong:6246 case TOK___c11_atomic_compare_exchange_strong:
6253 case TOK___atomic_compare_exchange_weak:6247 case TOK___c11_atomic_compare_exchange_weak:
6254 case TOK___atomic_fetch_add:6248 case TOK___c11_atomic_fetch_add:
6255 case TOK___atomic_fetch_sub:6249 case TOK___c11_atomic_fetch_sub:
6256 case TOK___atomic_fetch_or:6250 case TOK___c11_atomic_fetch_or:
6257 case TOK___atomic_fetch_xor:6251 case TOK___c11_atomic_fetch_xor:
6258 case TOK___atomic_fetch_and:6252 case TOK___c11_atomic_fetch_and:
6259 parse_atomic(tok);6253 parse_atomic(tok);
6260 break;6254 break;
6261 6255
tcctok.h+11−19
@@ -174,14 +174,6 @@ · 173 unmodified lines
174 DEF(TOK_builtin_va_start, "__builtin_va_start")174 DEF(TOK_builtin_va_start, "__builtin_va_start")
175#endif175#endif
176 176
177/* memory models */
178 DEF(TOK___ATOMIC_RELAXED, "__ATOMIC_RELAXED")
179 DEF(TOK___ATOMIC_CONSUME, "__ATOMIC_CONSUME")
180 DEF(TOK___ATOMIC_ACQUIRE, "__ATOMIC_ACQUIRE")
181 DEF(TOK___ATOMIC_RELEASE, "__ATOMIC_RELEASE")
182 DEF(TOK___ATOMIC_ACQ_REL, "__ATOMIC_ACQ_REL")
183 DEF(TOK___ATOMIC_SEQ_CST, "__ATOMIC_SEQ_CST")
184
185#define DEF_ATOMIC(id, str) \177#define DEF_ATOMIC(id, str) \
186 DEF(id, str) \178 DEF(id, str) \
187 DEF(id##_8, str "_8") \179 DEF(id##_8, str "_8") \
@@ -190,17 +182,17 @@ · 2 unmodified lines
190 DEF(id##_64, str "_64")182 DEF(id##_64, str "_64")
191 183
192/* atomic operations */184/* atomic operations */
193 DEF_ATOMIC(TOK___atomic_init, "__atomic_init")185 DEF_ATOMIC(TOK___c11_atomic_init, "__c11_atomic_init")
194 DEF_ATOMIC(TOK___atomic_store, "__atomic_store")186 DEF_ATOMIC(TOK___c11_atomic_store, "__c11_atomic_store")
195 DEF_ATOMIC(TOK___atomic_load, "__atomic_load")187 DEF_ATOMIC(TOK___c11_atomic_load, "__c11_atomic_load")
196 DEF_ATOMIC(TOK___atomic_exchange, "__atomic_exchange")188 DEF_ATOMIC(TOK___c11_atomic_exchange, "__c11_atomic_exchange")
197 DEF_ATOMIC(TOK___atomic_compare_exchange_strong, "__atomic_compare_exchange_strong")189 DEF_ATOMIC(TOK___c11_atomic_compare_exchange_strong, "__c11_atomic_compare_exchange_strong")
198 DEF_ATOMIC(TOK___atomic_compare_exchange_weak, "__atomic_compare_exchange_weak")190 DEF_ATOMIC(TOK___c11_atomic_compare_exchange_weak, "__c11_atomic_compare_exchange_weak")
199 DEF_ATOMIC(TOK___atomic_fetch_add, "__atomic_fetch_add")191 DEF_ATOMIC(TOK___c11_atomic_fetch_add, "__c11_atomic_fetch_add")
200 DEF_ATOMIC(TOK___atomic_fetch_sub, "__atomic_fetch_sub")192 DEF_ATOMIC(TOK___c11_atomic_fetch_sub, "__c11_atomic_fetch_sub")
201 DEF_ATOMIC(TOK___atomic_fetch_or, "__atomic_fetch_or")193 DEF_ATOMIC(TOK___c11_atomic_fetch_or, "__c11_atomic_fetch_or")
202 DEF_ATOMIC(TOK___atomic_fetch_xor, "__atomic_fetch_xor")194 DEF_ATOMIC(TOK___c11_atomic_fetch_xor, "__c11_atomic_fetch_xor")
203 DEF_ATOMIC(TOK___atomic_fetch_and, "__atomic_fetch_and")195 DEF_ATOMIC(TOK___c11_atomic_fetch_and, "__c11_atomic_fetch_and")
204 196
205#undef DEF_ATOMIC197#undef DEF_ATOMIC
206 198

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t