Change ExactValue layout for complex/quaternion types to minimize its size

This commit is contained in:
gingerBill
2020-12-03 14:21:33 +00:00
parent 5acdcfb57c
commit 047586afc6
4 changed files with 82 additions and 76 deletions
+12 -12
View File
@@ -5316,12 +5316,12 @@ lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, bool allow_loc
LLVMValueRef values[2] = {};
switch (8*type_size_of(type)) {
case 64:
values[0] = lb_const_f32(m, cast(f32)value.value_complex.real);
values[1] = lb_const_f32(m, cast(f32)value.value_complex.imag);
values[0] = lb_const_f32(m, cast(f32)value.value_complex->real);
values[1] = lb_const_f32(m, cast(f32)value.value_complex->imag);
break;
case 128:
values[0] = LLVMConstReal(lb_type(m, t_f64), value.value_complex.real);
values[1] = LLVMConstReal(lb_type(m, t_f64), value.value_complex.imag);
values[0] = LLVMConstReal(lb_type(m, t_f64), value.value_complex->real);
values[1] = LLVMConstReal(lb_type(m, t_f64), value.value_complex->imag);
break;
}
@@ -5335,17 +5335,17 @@ lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, bool allow_loc
switch (8*type_size_of(type)) {
case 128:
// @QuaternionLayout
values[3] = lb_const_f32(m, cast(f32)value.value_quaternion.real);
values[0] = lb_const_f32(m, cast(f32)value.value_quaternion.imag);
values[1] = lb_const_f32(m, cast(f32)value.value_quaternion.jmag);
values[2] = lb_const_f32(m, cast(f32)value.value_quaternion.kmag);
values[3] = lb_const_f32(m, cast(f32)value.value_quaternion->real);
values[0] = lb_const_f32(m, cast(f32)value.value_quaternion->imag);
values[1] = lb_const_f32(m, cast(f32)value.value_quaternion->jmag);
values[2] = lb_const_f32(m, cast(f32)value.value_quaternion->kmag);
break;
case 256:
// @QuaternionLayout
values[3] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion.real);
values[0] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion.imag);
values[1] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion.jmag);
values[2] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion.kmag);
values[3] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->real);
values[0] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->imag);
values[1] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->jmag);
values[2] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->kmag);
break;
}