AMD имеет спецификацию ABI, которая описывает соглашение о вызове для использования на x86-64. Все ОС следуют за ним, за исключением Windows, у которой есть собственное соглашение о вызове x86-64. Почему?
Кто-нибудь знает технические, исторические или политические причины этой разницы, или это просто вопрос NIHsyndrome?
Я понимаю, что разные ОС могут иметь разные потребности для вещей более высокого уровня, но это не объясняет, почему, например, порядок передачи параметров регистра в Windows равен rcx - rdx - r8 - r9 - rest on stack
, а все остальные используют rdi - rsi - rdx - rcx - r8 - r9 - rest on stack
.
P.S. Я знаю, как эти соглашения о вызовах отличаются в целом, и я знаю, где найти детали, если нужно. Я хочу знать, почему.
Изменить: для того, как, например, см. запись в википедии и ссылки оттуда.