Все дело в том, что архитектурно 51 неприспособлен для написания ПО на ЯВУ типа Си. При реализации компилятора на нем приходится выбирать между соответствием стандарту и эффективностью реализации.
Кейл позволяет писать достаточно эффективный код для 51 именно за счет возможности "заточки" программы под конкретную архитектуру, с использованием таких костылей, как bit/data/idata/code/... Кто лучше самого программиста знает, как часто используется та или иная переменная, куда ее лучше положить. А размер и скорость доступа при этом могут меняться на порядок!