Definitely low bits:
#define DATA(buf) ((char*)((intptr_t)((buf)->data) << BFT_TYPE_BITS))
Older programmers tend to raise an eyebrow at added computation like the "<<", but here in 2022 we need to remember that we are about to do a memory access and even if it's in L1 cache, that "<<" is basically free by comparison.