|
@@ -86,77 +86,30 @@ enum BuiltinProcId {
|
|
|
BuiltinProc_prefetch_write_instruction,
|
|
|
BuiltinProc_prefetch_write_data,
|
|
|
|
|
|
- BuiltinProc_atomic_fence,
|
|
|
- BuiltinProc_atomic_fence_acq,
|
|
|
- BuiltinProc_atomic_fence_rel,
|
|
|
- BuiltinProc_atomic_fence_acqrel,
|
|
|
-
|
|
|
+ BuiltinProc_atomic_thread_fence,
|
|
|
+ BuiltinProc_atomic_signal_fence,
|
|
|
BuiltinProc_atomic_store,
|
|
|
- BuiltinProc_atomic_store_rel,
|
|
|
- BuiltinProc_atomic_store_relaxed,
|
|
|
- BuiltinProc_atomic_store_unordered,
|
|
|
-
|
|
|
+ BuiltinProc_atomic_store_explicit,
|
|
|
BuiltinProc_atomic_load,
|
|
|
- BuiltinProc_atomic_load_acq,
|
|
|
- BuiltinProc_atomic_load_relaxed,
|
|
|
- BuiltinProc_atomic_load_unordered,
|
|
|
-
|
|
|
+ BuiltinProc_atomic_load_explicit,
|
|
|
BuiltinProc_atomic_add,
|
|
|
- BuiltinProc_atomic_add_acq,
|
|
|
- BuiltinProc_atomic_add_rel,
|
|
|
- BuiltinProc_atomic_add_acqrel,
|
|
|
- BuiltinProc_atomic_add_relaxed,
|
|
|
+ BuiltinProc_atomic_add_explicit,
|
|
|
BuiltinProc_atomic_sub,
|
|
|
- BuiltinProc_atomic_sub_acq,
|
|
|
- BuiltinProc_atomic_sub_rel,
|
|
|
- BuiltinProc_atomic_sub_acqrel,
|
|
|
- BuiltinProc_atomic_sub_relaxed,
|
|
|
+ BuiltinProc_atomic_sub_explicit,
|
|
|
BuiltinProc_atomic_and,
|
|
|
- BuiltinProc_atomic_and_acq,
|
|
|
- BuiltinProc_atomic_and_rel,
|
|
|
- BuiltinProc_atomic_and_acqrel,
|
|
|
- BuiltinProc_atomic_and_relaxed,
|
|
|
+ BuiltinProc_atomic_and_explicit,
|
|
|
BuiltinProc_atomic_nand,
|
|
|
- BuiltinProc_atomic_nand_acq,
|
|
|
- BuiltinProc_atomic_nand_rel,
|
|
|
- BuiltinProc_atomic_nand_acqrel,
|
|
|
- BuiltinProc_atomic_nand_relaxed,
|
|
|
+ BuiltinProc_atomic_nand_explicit,
|
|
|
BuiltinProc_atomic_or,
|
|
|
- BuiltinProc_atomic_or_acq,
|
|
|
- BuiltinProc_atomic_or_rel,
|
|
|
- BuiltinProc_atomic_or_acqrel,
|
|
|
- BuiltinProc_atomic_or_relaxed,
|
|
|
+ BuiltinProc_atomic_or_explicit,
|
|
|
BuiltinProc_atomic_xor,
|
|
|
- BuiltinProc_atomic_xor_acq,
|
|
|
- BuiltinProc_atomic_xor_rel,
|
|
|
- BuiltinProc_atomic_xor_acqrel,
|
|
|
- BuiltinProc_atomic_xor_relaxed,
|
|
|
-
|
|
|
- BuiltinProc_atomic_xchg,
|
|
|
- BuiltinProc_atomic_xchg_acq,
|
|
|
- BuiltinProc_atomic_xchg_rel,
|
|
|
- BuiltinProc_atomic_xchg_acqrel,
|
|
|
- BuiltinProc_atomic_xchg_relaxed,
|
|
|
-
|
|
|
- BuiltinProc_atomic_cxchg,
|
|
|
- BuiltinProc_atomic_cxchg_acq,
|
|
|
- BuiltinProc_atomic_cxchg_rel,
|
|
|
- BuiltinProc_atomic_cxchg_acqrel,
|
|
|
- BuiltinProc_atomic_cxchg_relaxed,
|
|
|
- BuiltinProc_atomic_cxchg_failrelaxed,
|
|
|
- BuiltinProc_atomic_cxchg_failacq,
|
|
|
- BuiltinProc_atomic_cxchg_acq_failrelaxed,
|
|
|
- BuiltinProc_atomic_cxchg_acqrel_failrelaxed,
|
|
|
-
|
|
|
- BuiltinProc_atomic_cxchgweak,
|
|
|
- BuiltinProc_atomic_cxchgweak_acq,
|
|
|
- BuiltinProc_atomic_cxchgweak_rel,
|
|
|
- BuiltinProc_atomic_cxchgweak_acqrel,
|
|
|
- BuiltinProc_atomic_cxchgweak_relaxed,
|
|
|
- BuiltinProc_atomic_cxchgweak_failrelaxed,
|
|
|
- BuiltinProc_atomic_cxchgweak_failacq,
|
|
|
- BuiltinProc_atomic_cxchgweak_acq_failrelaxed,
|
|
|
- BuiltinProc_atomic_cxchgweak_acqrel_failrelaxed,
|
|
|
+ BuiltinProc_atomic_xor_explicit,
|
|
|
+ BuiltinProc_atomic_exchange,
|
|
|
+ BuiltinProc_atomic_exchange_explicit,
|
|
|
+ BuiltinProc_atomic_compare_exchange_strong,
|
|
|
+ BuiltinProc_atomic_compare_exchange_strong_explicit,
|
|
|
+ BuiltinProc_atomic_compare_exchange_weak,
|
|
|
+ BuiltinProc_atomic_compare_exchange_weak_explicit,
|
|
|
|
|
|
BuiltinProc_fixed_point_mul,
|
|
|
BuiltinProc_fixed_point_div,
|
|
@@ -352,78 +305,30 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
|
|
|
{STR_LIT("prefetch_write_instruction"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
{STR_LIT("prefetch_write_data"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
|
|
|
- {STR_LIT("atomic_fence"), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_fence_acq"), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_fence_rel"), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_fence_acqrel"), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
- {STR_LIT("atomic_store"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_store_rel"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_store_relaxed"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_store_unordered"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
- {STR_LIT("atomic_load"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_load_acq"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_load_relaxed"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_load_unordered"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
- {STR_LIT("atomic_add"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_add_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_add_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_add_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_add_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_sub"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_sub_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_sub_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_sub_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_sub_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_and"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_and_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_and_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_and_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_and_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_nand"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_nand_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_nand_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_nand_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_nand_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_or"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_or_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_or_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_or_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_or_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xor"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xor_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xor_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xor_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xor_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
- {STR_LIT("atomic_xchg"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xchg_acq"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xchg_rel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xchg_acqrel"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_xchg_relaxed"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
- {STR_LIT("atomic_cxchg"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_acq"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_rel"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_acqrel"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_relaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_failrelaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_failacq"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_acq_failrelaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchg_acqrel_failrelaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
- {STR_LIT("atomic_cxchgweak"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_acq"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_rel"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_acqrel"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_relaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_failrelaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_failacq"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_acq_failrelaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
- {STR_LIT("atomic_cxchgweak_acqrel_failrelaxed"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
-
|
|
|
+ {STR_LIT("atomic_thread_fence"), 1, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_signal_fence"), 1, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_store"), 2, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_store_explicit"), 3, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_load"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_load_explicit"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_add"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_add_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_sub"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_sub_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_and"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_and_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_nand"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_nand_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_or"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_or_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_xor"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_xor_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_exchange"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_exchange_explicit"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_compare_exchange_strong"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_compare_exchange_strong_explicit"), 5, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_compare_exchange_weak"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
+ {STR_LIT("atomic_compare_exchange_weak_explicit"), 5, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
|
|
|
{STR_LIT("fixed_point_mul"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
|
|
{STR_LIT("fixed_point_div"), 3, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|