кто-нибудь знает, зачем CP2 сохраняет и восстанавливает ESI и EDI во всех экспортированых процедурах? в смысле: они же, вроде бы, внутри самого компилятора не имеют никакого особого значения.

я так понимаю, это для X86 ABI, где EBX, ESI и EDI являются call-preserved. но в самом CP2 только EBX (вроде бы) имеет особое значение, и то только для вложеных функций. не есть ли смысл слелать специальный флаг `[callback]` (который вроде бы есть, но делает не совсем то сейчас), и оставить такие сохранения только если он установлен?

идея такая, что помечать как `[callback]` надо процедуры, которые передаются во внешние библиотеки как колбэки.

кстати, для `[ccall]` такое сейчас не делается, а должно: они-то как раз могут быть использованы как колбэки без экспорта. по-моему, это баг. надо починить.