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
57275727 nocode_wanted--;
57285728 }
57295729
5730−static void parse_memory_model(int mtok)
5731−{
5732− next();
5733−
5734− switch (mtok) {
5735− case TOK___ATOMIC_RELAXED: vpushs(0); break;
5736− case TOK___ATOMIC_CONSUME: vpushs(1); break;
5737− case TOK___ATOMIC_ACQUIRE: vpushs(2); break;
5738− case TOK___ATOMIC_RELEASE: vpushs(3); break;
5739− case TOK___ATOMIC_ACQ_REL: vpushs(4); break;
5740− case TOK___ATOMIC_SEQ_CST: vpushs(5); break;
5741− }
5742−
5743− vtop->type.t |= (VT_UNSIGNED | VT_MEMMODEL);
5730+static inline int is_memory_model(const SValue *sv)
5731+{
5732+ /*
5733+ * FIXME
5734+ * The memory models should better be backed by an enumeration.
5735+ *
5736+ * const int t = sv->type.t;
5737+ *
5738+ * if (!IS_ENUM_VAL(t))
5739+ * return 0;
5740+ *
5741+ * if (!(t & VT_STATIC))
5742+ * return 0;
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));
57445748 }
57455749
57465750 static void parse_atomic(int atok)
@@ -5762,17 +5766,17 @@ static void parse_atomic(int atok) · 15 unmodified lines
57625766 * v -- value
57635767 * m -- memory model
57645768 */
5765− {TOK___atomic_init, "-a"},
5766− {TOK___atomic_store, "-avm"},
5767− {TOK___atomic_load, "am"},
5768− {TOK___atomic_exchange, "avm"},
5769− {TOK___atomic_compare_exchange_strong, "apvmm"},
5770− {TOK___atomic_compare_exchange_weak, "apvmm"},
5771− {TOK___atomic_fetch_add, "avm"},
5772− {TOK___atomic_fetch_sub, "avm"},
5773− {TOK___atomic_fetch_or, "avm"},
5774− {TOK___atomic_fetch_xor, "avm"},
5775− {TOK___atomic_fetch_and, "avm"},
5769+ {TOK___c11_atomic_init, "-a"},
5770+ {TOK___c11_atomic_store, "-avm"},
5771+ {TOK___c11_atomic_load, "am"},
5772+ {TOK___c11_atomic_exchange, "avm"},
5773+ {TOK___c11_atomic_compare_exchange_strong, "apvmm"},
5774+ {TOK___c11_atomic_compare_exchange_weak, "apvmm"},
5775+ {TOK___c11_atomic_fetch_add, "avm"},
5776+ {TOK___c11_atomic_fetch_sub, "avm"},
5777+ {TOK___c11_atomic_fetch_or, "avm"},
5778+ {TOK___c11_atomic_fetch_xor, "avm"},
5779+ {TOK___c11_atomic_fetch_and, "avm"},
57765780 };
57775781
57785782 next();
@@ -5837,8 +5841,8 @@ static void parse_atomic(int atok) · 58 unmodified lines
58375841 break;
58385842
58395843 case 'm':
5840− if ((vtop->type.t & VT_MEMMODEL) != VT_MEMMODEL)
5841− expect_arg("memory model constant", arg);
5844+ if (!is_memory_model(vtop))
5845+ expect_arg("memory model", arg);
58425846 vtop->type.t &= ~VT_MEMMODEL;
58435847 break;
58445848
@@ -6234,28 +6238,18 @@ ST_FUNC void unary(void) · 389 unmodified lines
62346238 }
62356239 #endif
62366240
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−
62476241 /* atomic operations */
6248− case TOK___atomic_init:
6249− case TOK___atomic_store:
6250− case TOK___atomic_load:
6251− case TOK___atomic_exchange:
6252− case TOK___atomic_compare_exchange_strong:
6253− case TOK___atomic_compare_exchange_weak:
6254− case TOK___atomic_fetch_add:
6255− case TOK___atomic_fetch_sub:
6256− case TOK___atomic_fetch_or:
6257− case TOK___atomic_fetch_xor:
6258− case TOK___atomic_fetch_and:
6242+ case TOK___c11_atomic_init:
6243+ case TOK___c11_atomic_store:
6244+ case TOK___c11_atomic_load:
6245+ case TOK___c11_atomic_exchange:
6246+ case TOK___c11_atomic_compare_exchange_strong:
6247+ case TOK___c11_atomic_compare_exchange_weak:
6248+ case TOK___c11_atomic_fetch_add:
6249+ case TOK___c11_atomic_fetch_sub:
6250+ case TOK___c11_atomic_fetch_or:
6251+ case TOK___c11_atomic_fetch_xor:
6252+ case TOK___c11_atomic_fetch_and:
62596253 parse_atomic(tok);
62606254 break;
62616255
tcctok.h+11−19
@@ -174,14 +174,6 @@ · 173 unmodified lines
174174 DEF(TOK_builtin_va_start, "__builtin_va_start")
175175 #endif
176176
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−
185177 #define DEF_ATOMIC(id, str) \
186178 DEF(id, str) \
187179 DEF(id##_8, str "_8") \
@@ -190,17 +182,17 @@ · 2 unmodified lines
190182 DEF(id##_64, str "_64")
191183
192184 /* atomic operations */
193− DEF_ATOMIC(TOK___atomic_init, "__atomic_init")
194− DEF_ATOMIC(TOK___atomic_store, "__atomic_store")
195− DEF_ATOMIC(TOK___atomic_load, "__atomic_load")
196− DEF_ATOMIC(TOK___atomic_exchange, "__atomic_exchange")
197− DEF_ATOMIC(TOK___atomic_compare_exchange_strong, "__atomic_compare_exchange_strong")
198− DEF_ATOMIC(TOK___atomic_compare_exchange_weak, "__atomic_compare_exchange_weak")
199− DEF_ATOMIC(TOK___atomic_fetch_add, "__atomic_fetch_add")
200− DEF_ATOMIC(TOK___atomic_fetch_sub, "__atomic_fetch_sub")
201− DEF_ATOMIC(TOK___atomic_fetch_or, "__atomic_fetch_or")
202− DEF_ATOMIC(TOK___atomic_fetch_xor, "__atomic_fetch_xor")
203− DEF_ATOMIC(TOK___atomic_fetch_and, "__atomic_fetch_and")
185+ DEF_ATOMIC(TOK___c11_atomic_init, "__c11_atomic_init")
186+ DEF_ATOMIC(TOK___c11_atomic_store, "__c11_atomic_store")
187+ DEF_ATOMIC(TOK___c11_atomic_load, "__c11_atomic_load")
188+ DEF_ATOMIC(TOK___c11_atomic_exchange, "__c11_atomic_exchange")
189+ DEF_ATOMIC(TOK___c11_atomic_compare_exchange_strong, "__c11_atomic_compare_exchange_strong")
190+ DEF_ATOMIC(TOK___c11_atomic_compare_exchange_weak, "__c11_atomic_compare_exchange_weak")
191+ DEF_ATOMIC(TOK___c11_atomic_fetch_add, "__c11_atomic_fetch_add")
192+ DEF_ATOMIC(TOK___c11_atomic_fetch_sub, "__c11_atomic_fetch_sub")
193+ DEF_ATOMIC(TOK___c11_atomic_fetch_or, "__c11_atomic_fetch_or")
194+ DEF_ATOMIC(TOK___c11_atomic_fetch_xor, "__c11_atomic_fetch_xor")
195+ DEF_ATOMIC(TOK___c11_atomic_fetch_and, "__c11_atomic_fetch_and")
204196
205197 #undef DEF_ATOMIC
206198

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