static entity_t *create_builtin_function(builtin_kind_t kind, const char *name,
type_t *function_type)
{
- symbol_t *symbol = symbol_table_insert(name);
- entity_t *entity = allocate_entity_zero(ENTITY_FUNCTION);
+ symbol_t *const symbol = symbol_table_insert(name);
+ entity_t *const entity = allocate_entity_zero(ENTITY_FUNCTION, NAMESPACE_NORMAL, symbol);
entity->declaration.storage_class = STORAGE_CLASS_EXTERN;
entity->declaration.declared_storage_class = STORAGE_CLASS_EXTERN;
entity->declaration.type = function_type;
entity->declaration.implicit = true;
- entity->base.namespc = NAMESPACE_NORMAL;
- entity->base.symbol = symbol;
entity->base.source_position = builtin_source_position;
entity->function.btk = kind;
GNU_BUILTIN(return_address, make_function_1_type(type_void_ptr, type_unsigned_int));
GNU_BUILTIN(frame_address, make_function_1_type(type_void_ptr, type_unsigned_int));
GNU_BUILTIN(ffs, make_function_1_type(type_int, type_unsigned_int));
+ GNU_BUILTIN(ffsl, make_function_1_type(type_int, type_unsigned_long));
+ GNU_BUILTIN(ffsll, make_function_1_type(type_int, type_unsigned_long_long));
GNU_BUILTIN(clz, make_function_1_type(type_int, type_unsigned_int));
+ GNU_BUILTIN(clzl, make_function_1_type(type_int, type_unsigned_long));
+ GNU_BUILTIN(clzll, make_function_1_type(type_int, type_unsigned_long_long));
GNU_BUILTIN(ctz, make_function_1_type(type_int, type_unsigned_int));
+ GNU_BUILTIN(ctzl, make_function_1_type(type_int, type_unsigned_long));
+ GNU_BUILTIN(ctzll, make_function_1_type(type_int, type_unsigned_long_long));
GNU_BUILTIN(popcount, make_function_1_type(type_int, type_unsigned_int));
+ GNU_BUILTIN(popcountl, make_function_1_type(type_int, type_unsigned_long));
+ GNU_BUILTIN(popcountll, make_function_1_type(type_int, type_unsigned_long_long));
GNU_BUILTIN(parity, make_function_1_type(type_int, type_unsigned_int));
GNU_BUILTIN(prefetch, make_function_1_type_variadic(type_float, type_void_ptr));
GNU_BUILTIN(trap, make_function_type(type_void, 0, NULL, DM_NORETURN));
if (replacement == NULL)
return NULL;
- entity_t *entity = allocate_entity_zero(ENTITY_FUNCTION);
- entity->base.symbol = symbol_table_insert(replacement);
- entity->base.namespc = NAMESPACE_NORMAL;
+ symbol_t *const symbol = symbol_table_insert(replacement);
+ entity_t *const entity = allocate_entity_zero(ENTITY_FUNCTION, NAMESPACE_NORMAL, symbol);
entity->base.source_position = builtin_source_position;
entity->declaration.storage_class = STORAGE_CLASS_EXTERN;
entity->declaration.declared_storage_class = STORAGE_CLASS_EXTERN;
MS_BUILTIN(_BitScanReverse, make_function_2_type(type_unsigned_char, type_unsigned_long_ptr, type_unsigned_long));
MS_BUILTIN(_InterlockedExchange, make_function_2_type(type_long, type_long_ptr, type_long));
MS_BUILTIN(_InterlockedExchange64, make_function_2_type(type_int64, type_int64_ptr, type_int64));
-
- if (machine_size <= 32) {
- MS_BUILTIN(__readeflags, make_function_0_type(type_unsigned_int));
- MS_BUILTIN(__writeeflags, make_function_1_type(type_void, type_unsigned_int));
- } else {
- MS_BUILTIN(__readeflags, make_function_0_type(type_unsigned_int64));
- MS_BUILTIN(__writeeflags, make_function_1_type(type_void, type_unsigned_int64));
- }
-
#undef MS_BUILTIN
}