Use of __builtin_ffs and __builtin_clz for __l_alloc and __l_free when __GNUC__ is defined
Increased L_SFC_MAX_ELEM_SIZE from 512 to 2048
pull/95/head
René Cannaò 11 years ago
parent de7803370f
commit 3ce36e4eff

@ -1,8 +1,8 @@
#define L_SFC_MIN_ELEM_SIZE 8
#define L_SFC_MID_ELEM_SIZE 64
#define L_SFC_MAX_ELEM_SIZE 512
#define L_SFP_ARRAY_MID 4
#define L_SFP_ARRAY_LEN 7
#define L_SFC_MID_ELEM_SIZE 128
#define L_SFC_MAX_ELEM_SIZE 2048
#define L_SFP_ARRAY_MID 5
#define L_SFP_ARRAY_LEN 9
#define L_SFC_MEM_BLOCK_SIZE 262144
typedef struct _l_stack_t l_stack;
typedef struct _l_super_free_chunk_t l_sfc;

@ -72,9 +72,17 @@ void * __l_alloc(l_sfp *sfp, size_t size) {
}
void *p;
int i;
#ifdef __GNUC__
unsigned int x=size;
int j=__builtin_clz(x);
int k=__builtin_ffs(x);
i=(k+j==(sizeof(unsigned int)*8) ? j : sizeof(unsigned int)*8+1-k);
i=(i >= 4 ? i-4 : 0);
#else
i= ( size<=L_SFC_MID_ELEM_SIZE ? L_SFP_ARRAY_MID-1 : L_SFP_ARRAY_LEN-1 );
for ( ; i>=0 ; i-- ) {
if ((size<<1)>sfp->sfc[i].elem_size || i==0) {
#endif /* __GNUC__ */
p=l_stack_pop(&sfp->sfc[i].stack);
if (p) {
//assert((uintptr_t)p%(sfp->sfc[i].elem_size)==0);
@ -88,8 +96,11 @@ void * __l_alloc(l_sfp *sfp, size_t size) {
p=l_stack_pop(&sfp->sfc[i].stack);
//assert((uintptr_t)p%(sfp->sfc[i].elem_size)==0);
return p;
#ifdef __GNUC__
#else
}
}
#endif /* __GNUC__ */
return NULL;
}
@ -113,9 +124,17 @@ void __l_free(l_sfp *sfp, size_t size, void *p) {
return;
}
int i;
#ifdef __GNUC__
unsigned int x=size;
int j=__builtin_clz(x);
int k=__builtin_ffs(x);
i=(k+j==(sizeof(unsigned int)*8) ? j : sizeof(unsigned int)*8+1-k);
i=(i >= 4 ? i-4 : 0);
#else
i= ( size<=L_SFC_MID_ELEM_SIZE ? L_SFP_ARRAY_MID-1 : L_SFP_ARRAY_LEN-1 );
for ( ; i>=0 ; i-- ) {
if ((size<<1)>sfp->sfc[i].elem_size || i==0) {
#endif /* __GNUC__ */
//assert((uintptr_t)p%(sfp->sfc[i].elem_size)==0);
l_stack_push(&sfp->sfc[i].stack,p);
// sfp->sfc[i].free_cnt++;
@ -128,8 +147,11 @@ void __l_free(l_sfp *sfp, size_t size, void *p) {
// }
return;
#ifdef __GNUC__
#else
}
}
#endif /* __GNUC__ */
}
/*

Loading…
Cancel
Save