- if(t->type_class==LTT_STRUCT || t->type_class==LTT_ARRAY ||
- t->type_class==LTT_STRING) return 0;
-
- if(t->type_class == LTT_FLOAT){
- return floatSizes[t->size];
- }else{
- if(t->size < sizeof(intSizes)/sizeof(unsigned))
- return intSizes[t->size];
- else{
- LttArchSize size = trace->system_description->size;
- if(size == LTT_LP32){
- if(t->size == 5)return sizeof(int16_t);
- else return sizeof(int32_t);
- }
- else if(size == LTT_ILP32 || size == LTT_LP64){
- if(t->size == 5)return sizeof(int32_t);
- else{
- if(size == LTT_ILP32) return sizeof(int32_t);
- else return sizeof(int64_t);
- }
+ unsigned size;
+ if(unlikely(t->type_class==LTT_STRUCT || t->type_class==LTT_ARRAY ||
+ t->type_class==LTT_STRING || t->type_class==LTT_UNION)) {
+ size = 0;
+ } else {
+ if(t->type_class == LTT_FLOAT){
+ size = floatSizes[t->size];
+ }else{
+ if(likely(t->size < INT_SIZES_NUMBER))
+ size = intSizes[t->size];
+ else{
+ LttArchSize archsize = trace->system_description->size;
+ if(archsize == LTT_LP32){
+ if(t->size == 5) size = intSizes[SIZE_INT16];
+ else size = intSizes[SIZE_INT32];
+ }
+ else if(archsize == LTT_ILP32 || archsize == LTT_LP64){
+ if(t->size == 5) size = intSizes[SIZE_INT32];
+ else{
+ if(archsize == LTT_ILP32) size = intSizes[SIZE_INT32];
+ else size = intSizes[SIZE_INT64];
+ }
+ }
+ else if(archsize == LTT_ILP64) size = intSizes[SIZE_INT64];