Ядро тоже программа и компилируется компилятором.

Ядро может запустить либо старую 32-разрядную прикладную программу в 32-разрядном legacy mode, или новую 64-разрядную в 64-разрядном long mode. Старую 32-разрядную невозможно запустить как 64-разрядную. Для компиляции в 64-разрядную нужен специально обученный для этого компилятор. Там много чего по-другому. Например, первые четыре аргумента в процедуру передаются через регистры (уже одно только это делает невозможным смешивание 32-разрядного и 64-разрядного кода).