Skip to content

Commit 8026c7f

Browse files
committed
Fix alignment calculation for default storage type
1 parent 5a6b682 commit 8026c7f

File tree

2 files changed

+39
-31
lines changed

2 files changed

+39
-31
lines changed

include/kernel_float/storage.h

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -191,35 +191,39 @@ enum struct Alignment {
191191
};
192192

193193
constexpr size_t calculate_alignment(Alignment required, size_t min_alignment, size_t total_size) {
194-
if (required == Alignment::Packed) {
194+
size_t alignment = 1;
195+
196+
if (required == Alignment::Maximum) {
195197
if (total_size <= 1) {
196-
return 1;
198+
alignment = 1;
197199
} else if (total_size <= 2) {
198-
return 2;
200+
alignment = 2;
199201
} else if (total_size <= 4) {
200-
return 4;
202+
alignment = 4;
201203
} else if (total_size <= 8) {
202-
return 8;
204+
alignment = 8;
203205
} else {
204-
return 16;
206+
alignment = 16;
205207
}
206-
} else if (required == Alignment::Maximum) {
208+
} else if (required == Alignment::Packed) {
207209
if (total_size % 16 == 0) {
208-
return 16;
210+
alignment = 16;
209211
} else if (total_size % 8 == 0) {
210-
return 8;
212+
alignment = 8;
211213
} else if (total_size % 4 == 0) {
212-
return 4;
214+
alignment = 4;
213215
} else if (total_size % 2 == 0) {
214-
return 2;
216+
alignment = 2;
215217
} else {
216-
return 1;
218+
alignment = 1;
217219
}
218220
}
219221

220-
else {
221-
return min_alignment;
222+
if (min_alignment > alignment) {
223+
alignment = min_alignment;
222224
}
225+
226+
return alignment;
223227
}
224228

225229
template<typename T, size_t N, Alignment A, typename = void>

single_include/kernel_float.h

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//================================================================================
22
// this file has been auto-generated, do not modify its contents!
3-
// date: 2023-03-31 15:49:21.313654
4-
// git hash: 15a7d65de3867323ab1b14f1d624c45ed733d904
3+
// date: 2023-03-31 16:04:17.777000
4+
// git hash: 5a6b682ac483b61ec8a1697bf6adf4e929021574
55
//================================================================================
66

77

@@ -487,35 +487,39 @@ enum struct Alignment {
487487
};
488488

489489
constexpr size_t calculate_alignment(Alignment required, size_t min_alignment, size_t total_size) {
490-
if (required == Alignment::Packed) {
490+
size_t alignment = 1;
491+
492+
if (required == Alignment::Maximum) {
491493
if (total_size <= 1) {
492-
return 1;
494+
alignment = 1;
493495
} else if (total_size <= 2) {
494-
return 2;
496+
alignment = 2;
495497
} else if (total_size <= 4) {
496-
return 4;
498+
alignment = 4;
497499
} else if (total_size <= 8) {
498-
return 8;
500+
alignment = 8;
499501
} else {
500-
return 16;
502+
alignment = 16;
501503
}
502-
} else if (required == Alignment::Maximum) {
504+
} else if (required == Alignment::Packed) {
503505
if (total_size % 16 == 0) {
504-
return 16;
506+
alignment = 16;
505507
} else if (total_size % 8 == 0) {
506-
return 8;
508+
alignment = 8;
507509
} else if (total_size % 4 == 0) {
508-
return 4;
510+
alignment = 4;
509511
} else if (total_size % 2 == 0) {
510-
return 2;
512+
alignment = 2;
511513
} else {
512-
return 1;
514+
alignment = 1;
513515
}
514516
}
515517

516-
else {
517-
return min_alignment;
518+
if (min_alignment > alignment) {
519+
alignment = min_alignment;
518520
}
521+
522+
return alignment;
519523
}
520524

521525
template<typename T, size_t N, Alignment A, typename = void>
@@ -725,7 +729,7 @@ KERNEL_FLOAT_DEFINE_VECTOR_TYPE(double, double1, double2, double3, double4)
725729
template<typename V, size_t N>
726730
struct nested_array {
727731
static constexpr size_t num_packets = (N + vector_size<V> - 1) / vector_size<V>;
728-
static_assert(num_packets * vector_size<V> <= N, "internal error");
732+
static_assert(num_packets * vector_size<V> >= N, "internal error");
729733

730734
V packets[num_packets];
731735

0 commit comments

Comments
 (0)