Merge separate g_tls_sll_head[] and g_tls_sll_count[] arrays into unified TinyTLSSLL struct to improve L1D cache locality. Expected performance gain: +12-18% from reducing cache line splits (2 loads → 1 load per operation). Changes: - core/hakmem_tiny.h: Add TinyTLSSLL type (16B aligned, head+count+pad) - core/hakmem_tiny.c: Replace separate arrays with g_tls_sll[8] - core/box/tls_sll_box.h: Update Box API (13 sites) for unified access - Updated 32+ files: All g_tls_sll_head[i] → g_tls_sll[i].head - Updated 32+ files: All g_tls_sll_count[i] → g_tls_sll[i].count - core/hakmem_tiny_integrity.h: Unified canary guards - core/box/integrity_box.c: Simplified canary validation - Makefile: Added core/box/tiny_sizeclass_hist_box.o to link Build: ✅ PASS (10K ops sanity test) Warnings: Only pre-existing LTO type mismatches (unrelated) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
// Box: Slab Management (Bitmap Operations)
|
|
// Purpose: Slab bitmap manipulation within SuperSlab
|
|
|
|
#include "ss_slab_management_box.h"
|
|
|
|
// ============================================================================
|
|
// Slab Bitmap Management
|
|
// ============================================================================
|
|
|
|
void superslab_activate_slab(SuperSlab* ss, int slab_idx) {
|
|
if (!ss || slab_idx < 0 || slab_idx >= ss_slabs_capacity(ss)) {
|
|
return;
|
|
}
|
|
uint32_t mask = 1u << slab_idx;
|
|
if ((ss->slab_bitmap & mask) == 0) {
|
|
ss->slab_bitmap |= mask;
|
|
ss->active_slabs++;
|
|
}
|
|
}
|
|
|
|
void superslab_deactivate_slab(SuperSlab* ss, int slab_idx) {
|
|
if (!ss || slab_idx < 0 || slab_idx >= ss_slabs_capacity(ss)) {
|
|
return;
|
|
}
|
|
uint32_t mask = 1u << slab_idx;
|
|
if (ss->slab_bitmap & mask) {
|
|
ss->slab_bitmap &= ~mask;
|
|
ss->active_slabs--;
|
|
}
|
|
}
|
|
|
|
int superslab_find_free_slab(SuperSlab* ss) {
|
|
if (!ss) return -1;
|
|
if ((int)ss->active_slabs >= ss_slabs_capacity(ss)) {
|
|
return -1; // No free slabs
|
|
}
|
|
// Find first 0 bit in bitmap
|
|
int cap = ss_slabs_capacity(ss);
|
|
for (int i = 0; i < cap; i++) {
|
|
if ((ss->slab_bitmap & (1u << i)) == 0) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|