mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-28 07:18:30 +00:00
Make emacs not croak when editing dlmalloc
This commit is contained in:
parent
3c7ae0fc72
commit
fa1e8a3e65
21 changed files with 3019 additions and 2985 deletions
67
third_party/dlmalloc/binmaps.inc
vendored
Normal file
67
third_party/dlmalloc/binmaps.inc
vendored
Normal file
|
@ -0,0 +1,67 @@
|
|||
// clang-format off
|
||||
|
||||
/* ------------------------ Operations on bin maps ----------------------- */
|
||||
|
||||
/* bit corresponding to given index */
|
||||
#define idx2bit(i) ((binmap_t)(1) << (i))
|
||||
|
||||
/* Mark/Clear bits with given index */
|
||||
#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i))
|
||||
#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i))
|
||||
#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i))
|
||||
|
||||
#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i))
|
||||
#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i))
|
||||
#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i))
|
||||
|
||||
/* isolate the least set bit of a bitmap */
|
||||
#define least_bit(x) ((x) & -(x))
|
||||
|
||||
/* mask with all bits to left of least bit of x on */
|
||||
#define left_bits(x) ((x<<1) | -(x<<1))
|
||||
|
||||
/* mask with all bits to left of or equal to least bit of x on */
|
||||
#define same_or_left_bits(x) ((x) | -(x))
|
||||
|
||||
/* index corresponding to given bit. Use x86 asm if possible */
|
||||
|
||||
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
||||
#define compute_bit2idx(X, I)\
|
||||
{\
|
||||
unsigned int J;\
|
||||
J = __builtin_ctz(X); \
|
||||
I = (bindex_t)J;\
|
||||
}
|
||||
|
||||
#elif defined (__INTEL_COMPILER)
|
||||
#define compute_bit2idx(X, I)\
|
||||
{\
|
||||
unsigned int J;\
|
||||
J = _bit_scan_forward (X); \
|
||||
I = (bindex_t)J;\
|
||||
}
|
||||
|
||||
#elif defined(_MSC_VER) && _MSC_VER>=1300
|
||||
#define compute_bit2idx(X, I)\
|
||||
{\
|
||||
unsigned int J;\
|
||||
_BitScanForward((DWORD *) &J, X);\
|
||||
I = (bindex_t)J;\
|
||||
}
|
||||
|
||||
#elif USE_BUILTIN_FFS
|
||||
#define compute_bit2idx(X, I) I = ffs(X)-1
|
||||
|
||||
#else
|
||||
#define compute_bit2idx(X, I)\
|
||||
{\
|
||||
unsigned int Y = X - 1;\
|
||||
unsigned int K = Y >> (16-4) & 16;\
|
||||
unsigned int N = K; Y >>= K;\
|
||||
N += K = Y >> (8-3) & 8; Y >>= K;\
|
||||
N += K = Y >> (4-2) & 4; Y >>= K;\
|
||||
N += K = Y >> (2-1) & 2; Y >>= K;\
|
||||
N += K = Y >> (1-0) & 1; Y >>= K;\
|
||||
I = (bindex_t)(N + Y);\
|
||||
}
|
||||
#endif /* GNUC */
|
Loading…
Add table
Add a link
Reference in a new issue