Browse Source

Count extra stuff

gingerBill 2 years ago
parent
commit
47b924990f
1 changed files with 26 additions and 7 deletions
  1. 26 7
      src/tilde_const.cpp

+ 26 - 7
src/tilde_const.cpp

@@ -243,6 +243,14 @@ gb_internal isize cg_global_const_calculate_region_count(ExactValue const &value
 
 
 		i64 base_count = cg_global_const_calculate_region_count(value, elem);
 		i64 base_count = cg_global_const_calculate_region_count(value, elem);
 		return base_count * type->Array.count;
 		return base_count * type->Array.count;
+	} else if (is_type_matrix(type) &&
+		value.kind != ExactValue_Invalid &&
+		value.kind != ExactValue_Compound) {
+		return 1;
+	} else if (is_type_simd_vector(type) &&
+		value.kind != ExactValue_Invalid &&
+		value.kind != ExactValue_Compound) {
+		return 1;
 	}
 	}
 
 
 	isize count = 0;
 	isize count = 0;
@@ -430,6 +438,8 @@ gb_internal bool cg_global_const_add_region(cgModule *m, ExactValue const &value
 	} else if (is_type_matrix(type) &&
 	} else if (is_type_matrix(type) &&
 		value.kind != ExactValue_Invalid &&
 		value.kind != ExactValue_Invalid &&
 		value.kind != ExactValue_Compound) {
 		value.kind != ExactValue_Compound) {
+		GB_PANIC("TODO(bill): matrices");
+
 		i64 row = bt->Matrix.row_count;
 		i64 row = bt->Matrix.row_count;
 		i64 column = bt->Matrix.column_count;
 		i64 column = bt->Matrix.column_count;
 		GB_ASSERT(row == column);
 		GB_ASSERT(row == column);
@@ -437,23 +447,23 @@ gb_internal bool cg_global_const_add_region(cgModule *m, ExactValue const &value
 		Type *elem = bt->Matrix.elem;
 		Type *elem = bt->Matrix.elem;
 
 
 		i64 elem_size = type_size_of(elem);
 		i64 elem_size = type_size_of(elem);
+		gb_unused(elem_size);
 
 
-		for (i64 i = 0; i < row; i++) {
-			i64 index = matrix_indices_to_offset(type, i, i);
-			cg_global_const_add_region(m, value, elem, global, offset+(index * elem_size));
-		}
+		// 1 region in memory, not many
 
 
 		return true;
 		return true;
 	} else if (is_type_simd_vector(type) &&
 	} else if (is_type_simd_vector(type) &&
 		value.kind != ExactValue_Invalid &&
 		value.kind != ExactValue_Invalid &&
 		value.kind != ExactValue_Compound) {
 		value.kind != ExactValue_Compound) {
 
 
+		GB_PANIC("TODO(bill): #simd vectors");
+
 		Type *et = type->SimdVector.elem;
 		Type *et = type->SimdVector.elem;
 		i64 elem_size = type_size_of(et);
 		i64 elem_size = type_size_of(et);
+		gb_unused(elem_size);
+
+		// 1 region in memory, not many
 
 
-		for (i64 i = 0; i < bt->SimdVector.count; i++) {
-			cg_global_const_add_region(m, value, et, global, offset+(i * elem_size));
-		}
 		return true;
 		return true;
 	}
 	}
 
 
@@ -775,9 +785,11 @@ gb_internal cgValue cg_const_value(cgModule *m, cgProcedure *p, Type *type, Exac
 
 
 	switch (value.kind) {
 	switch (value.kind) {
 	case ExactValue_Invalid:
 	case ExactValue_Invalid:
+		GB_ASSERT(p != nullptr);
 		return cg_const_nil(p, type);
 		return cg_const_nil(p, type);
 
 
 	case ExactValue_Typeid:
 	case ExactValue_Typeid:
+		GB_ASSERT(p != nullptr);
 		return cg_typeid(p, value.value_typeid);
 		return cg_typeid(p, value.value_typeid);
 
 
 	case ExactValue_Procedure:
 	case ExactValue_Procedure:
@@ -787,6 +799,10 @@ gb_internal cgValue cg_const_value(cgModule *m, cgProcedure *p, Type *type, Exac
 			if (e != nullptr) {
 			if (e != nullptr) {
 				cgValue found = cg_find_procedure_value_from_entity(m, e);
 				cgValue found = cg_find_procedure_value_from_entity(m, e);
 				GB_ASSERT(are_types_identical(type, found.type));
 				GB_ASSERT(are_types_identical(type, found.type));
+				GB_ASSERT(found.kind == cgValue_Symbol);
+				if (p) {
+					return cg_flatten_value(p, found);
+				}
 				return found;
 				return found;
 			}
 			}
 			GB_PANIC("TODO(bill): cg_const_value ExactValue_Procedure");
 			GB_PANIC("TODO(bill): cg_const_value ExactValue_Procedure");
@@ -796,10 +812,12 @@ gb_internal cgValue cg_const_value(cgModule *m, cgProcedure *p, Type *type, Exac
 
 
 	switch (value.kind) {
 	switch (value.kind) {
 	case ExactValue_Bool:
 	case ExactValue_Bool:
+		GB_ASSERT(p != nullptr);
 		GB_ASSERT(!TB_IS_VOID_TYPE(dt));
 		GB_ASSERT(!TB_IS_VOID_TYPE(dt));
 		return cg_value(tb_inst_uint(p->func, dt, value.value_bool), type);
 		return cg_value(tb_inst_uint(p->func, dt, value.value_bool), type);
 
 
 	case ExactValue_Integer:
 	case ExactValue_Integer:
+		GB_ASSERT(p != nullptr);
 		GB_ASSERT(!TB_IS_VOID_TYPE(dt));
 		GB_ASSERT(!TB_IS_VOID_TYPE(dt));
 		// GB_ASSERT(dt.raw != TB_TYPE_I128.raw);
 		// GB_ASSERT(dt.raw != TB_TYPE_I128.raw);
 		if (is_type_unsigned(type)) {
 		if (is_type_unsigned(type)) {
@@ -812,6 +830,7 @@ gb_internal cgValue cg_const_value(cgModule *m, cgProcedure *p, Type *type, Exac
 		break;
 		break;
 
 
 	case ExactValue_Float:
 	case ExactValue_Float:
+		GB_ASSERT(p != nullptr);
 		GB_ASSERT(!TB_IS_VOID_TYPE(dt));
 		GB_ASSERT(!TB_IS_VOID_TYPE(dt));
 		GB_ASSERT(dt.raw != TB_TYPE_F16.raw);
 		GB_ASSERT(dt.raw != TB_TYPE_F16.raw);
 		GB_ASSERT(!is_type_different_to_arch_endianness(type));
 		GB_ASSERT(!is_type_different_to_arch_endianness(type));