@@ -190,30 +190,18 @@ STATIC_INLINE int JL_CONST_FUNC jl_gc_alignsz(size_t sz, size_t alignment)
190
190
}
191
191
192
192
// Use jl_gc_alignsz to obtain the right sz.
193
- STATIC_INLINE int JL_CONST_FUNC jl_gc_szclass (size_t sz)
193
+ STATIC_INLINE int JL_CONST_FUNC jl_gc_szclass (size_t sz, size_t alignment )
194
194
{
195
- // Check that the object fits in the largest pool.
196
- assert (sz <= GC_MAX_SZCLASS + sizeof (jl_taggedvalue_t ));
197
- #ifdef _P64
198
- if (sz <= 8 )
199
- return 0 ;
200
- const int N = 0 ;
201
- #elif defined(_CPU_ARM_) || defined(_CPU_PPC_) || defined(_CPU_X86_)
202
- if (sz <= 8 )
203
- return (sz + 3 ) / 4 - 1 ;
204
- const int N = 1 ;
205
- #else
206
- if (sz <= 12 )
207
- return (sz + 3 ) / 4 - 1 ;
208
- const int N = 2 ;
209
- #endif
210
- if (sz <= 256 )
211
- return (sz + 15 ) / 16 + N;
212
- if (sz <= 496 )
213
- return 16 - 16376 / 4 / LLT_ALIGN (sz, 16 * 4 ) + 16 + N;
214
- if (sz <= 1008 )
215
- return 16 - 16376 / 2 / LLT_ALIGN (sz, 16 * 2 ) + 24 + N;
216
- return 16 - 16376 / 1 / LLT_ALIGN (sz, 16 * 1 ) + 32 + N;
195
+ size_t klass = 0 ;
196
+ while (klass < JL_GC_N_POOLS) {
197
+ size_t osize = jl_gc_sizeclasses[klass];
198
+ if (sz <= osize) {
199
+ if (alignment == 1 || alignment == 0 || osize % alignment == 0 )
200
+ return klass;
201
+ }
202
+ klass++;
203
+ }
204
+ return -1 ;
217
205
}
218
206
219
207
#ifdef __GNUC__
@@ -228,9 +216,10 @@ STATIC_INLINE jl_value_t *jl_gc_alloc_(jl_ptls_t ptls, size_t sz, size_t alignme
228
216
if (allocsz < sz) // overflow in adding offs, size was "negative"
229
217
jl_throw (jl_memory_exception);
230
218
const size_t alignsz = jl_gc_alignsz (allocsz, alignment);
219
+ const int klass = jl_gc_szclass (alignsz, alignment);
231
220
jl_value_t *v;
232
- if (alignsz <= GC_MAX_SZCLASS + sizeof (jl_taggedvalue_t )) {
233
- int pool_id = jl_gc_szclass (alignsz) ;
221
+ if (klass != - 1 && alignsz <= GC_MAX_SZCLASS + sizeof (jl_taggedvalue_t )) {
222
+ int pool_id = klass ;
234
223
jl_gc_pool_t *p = &ptls->heap .norm_pools [pool_id];
235
224
int osize;
236
225
if (jl_is_constexpr (alignsz)) {
0 commit comments