Just changing to Freelist__Get!/Freelist__Put! works and the bytes just disappear.
(Discussed at the top of the page.)
Oh, yes, that's another option. This way you make the Freelist__Get/Freelist__Put macros unrolled
before the inline macros processing happens.
BTW, in this specific case I would probably prefer a simpler approach without need for inline macros:
iterate reg, ax,cx,dx,bx,sp,bp,si,di
define reg32.r#reg? e#reg
end iterate
repeat 8, i:8
define reg32.r#i? r#i#d
end repeat
macro Freelist__Get item,list
mov reg32.item,reg32.list
mov reg32.list,[list]
end macro
macro Freelist__Put list,item
mov [list],reg32.item
mov reg32.list,reg32.item
end macro