Browse Source

apply abs fix to constant system too

Laytan Laats 6 months ago
parent
commit
de83ad2a25
2 changed files with 8 additions and 5 deletions
  1. 5 2
      src/check_builtin.cpp
  2. 3 3
      src/llvm_backend_proc.cpp

+ 5 - 2
src/check_builtin.cpp

@@ -3488,9 +3488,12 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As
 			case ExactValue_Integer:
 			case ExactValue_Integer:
 				mp_abs(&operand->value.value_integer, &operand->value.value_integer);
 				mp_abs(&operand->value.value_integer, &operand->value.value_integer);
 				break;
 				break;
-			case ExactValue_Float:
-				operand->value.value_float = gb_abs(operand->value.value_float);
+			case ExactValue_Float: {
+				u64 abs = bit_cast<u64>(operand->value.value_float);
+				abs &= 0x7FFFFFFFFFFFFFFF;
+				operand->value.value_float = bit_cast<f64>(abs);
 				break;
 				break;
+			}
 			case ExactValue_Complex: {
 			case ExactValue_Complex: {
 				f64 r = operand->value.value_complex->real;
 				f64 r = operand->value.value_complex->real;
 				f64 i = operand->value.value_complex->imag;
 				f64 i = operand->value.value_complex->imag;

+ 3 - 3
src/llvm_backend_proc.cpp

@@ -2175,9 +2175,9 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
 			}
 			}
 			GB_PANIC("Unknown complex type");
 			GB_PANIC("Unknown complex type");
 		} else if (is_type_float(t)) {
 		} else if (is_type_float(t)) {
-			Type *t_float;
-			Type *t_unsigned;
-			lbValue mask;
+			Type *t_float = nullptr;
+			Type *t_unsigned = nullptr;
+			lbValue mask = {0};
 			switch (type_size_of(t)) {
 			switch (type_size_of(t)) {
 			case 2:
 			case 2:
 				t_float = t_f16;
 				t_float = t_f16;