#ifndef HAKMEM_TINY_LEGACY_FALLBACK_BOX_H #define HAKMEM_TINY_LEGACY_FALLBACK_BOX_H #include #include #include "../front/tiny_unified_cache.h" #include "../hakmem.h" #include "tiny_front_v3_env_box.h" #include "free_path_stats_box.h" #include "tiny_front_hot_box.h" // Purpose: Encapsulate legacy free logic (shared by multiple paths) // Called by: malloc_tiny_fast.h (free path) + tiny_c6_ultra_free_box.c (C6 fallback) // // Contract: // - base: BASE pointer (already extracted via ptr - 1) // - class_idx: size class (0-7) // - Returns: void (always succeeds or falls back to tiny_hot_free_fast) // __attribute__((always_inline)) static inline void tiny_legacy_fallback_free_base(void* base, uint32_t class_idx) { const TinyFrontV3Snapshot* front_snap = __builtin_expect(tiny_front_v3_enabled(), 0) ? tiny_front_v3_snapshot_get() : NULL; // Legacy fallback - Unified Cache push if (!front_snap || front_snap->unified_cache_on) { if (unified_cache_push(class_idx, HAK_BASE_FROM_RAW(base))) { FREE_PATH_STAT_INC(legacy_fallback); // Per-class breakdown (Phase 4-1) if (__builtin_expect(free_path_stats_enabled(), 0)) { if (class_idx < 8) { g_free_path_stats.legacy_by_class[class_idx]++; } } return; } } // Final fallback tiny_hot_free_fast(class_idx, base); } #endif // HAKMEM_TINY_LEGACY_FALLBACK_BOX_H