diff --git a/tools/qfcc/include/def.h b/tools/qfcc/include/def.h index 09033fa03..290510fa0 100644 --- a/tools/qfcc/include/def.h +++ b/tools/qfcc/include/def.h @@ -93,16 +93,23 @@ typedef struct def_s { struct daglabel_s *daglabel;///< daglabel for this def struct flowvar_s *flowvar; ///< flowvar for this def - unsigned offset_reloc:1; ///< use *_def_ofs relocs - unsigned initialized:1; ///< the def has been initialized - unsigned constant:1; ///< stores constant value - unsigned global:1; ///< globally declared def - unsigned external:1; ///< externally declared def - unsigned local:1; ///< function local def - unsigned param:1; ///< function param def - unsigned argument:1; ///< function argument def - unsigned system:1; ///< system def - unsigned nosave:1; ///< don't set DEF_SAVEGLOBAL + union { + struct { + bool offset_reloc:1; ///< use *_def_ofs relocs + bool initialized:1; ///< the def has been initialized + bool constant:1; ///< stores constant value + bool readonly:1; + bool writeonly:1; + bool global:1; ///< globally declared def + bool external:1; ///< externally declared def + bool local:1; ///< function local def + bool param:1; ///< function param def + bool argument:1; ///< function argument def + bool system:1; ///< system def + bool nosave:1; ///< don't set DEF_SAVEGLOBAL + }; + unsigned storage_bits; + }; rua_loc_t loc; ///< declaring/defining source location diff --git a/tools/qfcc/source/def.c b/tools/qfcc/source/def.c index 48b621a06..27fb6d9a2 100644 --- a/tools/qfcc/source/def.c +++ b/tools/qfcc/source/def.c @@ -68,72 +68,42 @@ ALLOC_STATE (def_t, defs); static void set_storage_bits (def_t *def, storage_class_t storage) { + def->storage_bits = 0; switch (storage) { case sc_out: case sc_buffer: case sc_shared: - def->global = 1; - def->external = 0; - def->local = 0; - def->param = 0; - def->argument = 0; + def->global = true; break; case sc_system: - def->system = 1; + def->system = true; // fall through case sc_global: - def->global = 1; - def->external = 0; - def->local = 0; - def->param = 0; - def->argument = 0; + def->global = true; break; case sc_in: case sc_uniform: - def->global = 1; - def->constant = 1; - def->external = 0; - def->local = 0; - def->param = 0; - def->argument = 0; + def->global = true; + def->readonly = true; break; case sc_extern: - def->global = 1; - def->external = 1; - def->local = 0; - def->param = 0; - def->argument = 0; + def->global = true; + def->external = true; break; case sc_static: - def->external = 0; - def->global = 0; - def->local = 0; - def->param = 0; - def->argument = 0; break; case sc_local: - def->external = 0; - def->global = 0; - def->local = 1; - def->param = 0; - def->argument = 0; + def->local = true; break; case sc_param: - def->external = 0; - def->global = 0; - def->local = 1; - def->param = 1; - def->argument = 0; + def->local = true; + def->param = true; break; case sc_argument: - def->external = 0; - def->global = 0; - def->local = 1; - def->param = 0; - def->argument = 1; + def->local = true; + def->argument = true; break; } - def->initialized = 0; } def_t * @@ -144,12 +114,12 @@ new_def (const char *name, const type_t *type, defspace_t *space, ALLOC (16384, def_t, defs, def); - def->return_addr = __builtin_return_address (0); - - def->name = name ? save_string (name) : 0; - def->type = type; - - def->loc = pr.loc; + *def = (def_t) { + .type = type, + .name = name ? save_string (name) : 0, + .loc = pr.loc, + .return_addr = __builtin_return_address (0), + }; set_storage_bits (def, storage);