Visão geral do x64 convenções de chamada
Duas modificações importantes do x86 x64 são a capacidade de endereçamento de 64 bit e registra um conjunto simples de 16 a 64 bit para uso geral. Dado o conjunto de Registro expandida, x64 usa apenas o __fastcall chamando convenção e um modelo de manipulação de exceção com base em RISC. The __fastcall modelo usa registros para os quatro primeiros argumentos e o registro de ativação para passar os outros parâmetros.
opção do compilador a seguir ajudará a otimizar seu aplicativo para x64:
Convenção de chamada
The x64 Aplicativo binário Interface (ABI) é que um 4 registrar convenção de telefonar telefonar rápida, com apoio de pilha para esses registros. Há uma correspondência um-para-um estrita entre os argumentos em uma função e os registradores para esses argumentos.Qualquer argumento que não couberem em 8 bytes, ou não é 1, 2, 4 ou 8 bytes deve ser passado por referência.Não há nenhuma tentativa para distribuir um único argumento entre vários registros.A pilha de registro 87 x não é utilizado.Ele pode ser usado, mas deve ser considerado voláteis em chamadas de função.Ponto flutuante de todas as operações são realizadas utilizando o 16 XMM registra.Os argumentos são passados nos registradores RCX, RDX, R8 e R9.Se os argumentos forem float/dupla, eles são passados em XMM0L, XMM1L, XMM2L e XMM3L.16 byte argumentos são passados por referência.Parâmetro passagem é descrito detalhadamente em Parâmetro de passagem. Juntamente com esses registradores RAX, R10, R11, XMM4 e XMM5 são voláteis.Todos os outros registros são não-volátil.Uso do registro está documentado em detalhes em Registrar o uso e Chamador/computador chamado Saved registros.
O chamador é responsável por alocar espaço para os parâmetros para o chamador e deve sempre alocar espaço suficiente para os parâmetros de registro de 4, mesmo que o computador chamado não tenha que muitos parâmetros.Isso ajuda a simplicidade de funções de suporte unprototyped C e funções de C/C ++ vararg.Funções vararg ou unprototyped, quaisquer valores de float devem ser duplicadas no registrador de uso geral correspondente.Todos os parâmetros acima 4 primeiro devem ser armazenados na pilha, acima do armazenamento de apoio para 4 primeiro, antes para a telefonar.Vararg função detalhes podem ser encontrados em Varargs. Informações de função Unprototyped são detalhadas na Funções Unprototyped.
Alinhamento
A maioria das estruturas são alinhadas com seu alinhamento natural.As principais exceções são o ponteiro da pilha e a memória malloc ou alloca, que são alinhados com 16 byte para auxiliar o desempenho.Alinhamento acima de 16 bytes deve ser concluído manualmente, mas como 16 bytes é um dimensionar comum de alinhamento para operações XMM, isso deve ser suficiente para a maior parte do código.Para obter mais informações sobre alinhamento e layout da estrutura consulte Tipos e armazenamento. Para obter informações sobre o layout empilhado, consulte Uso de pilha.
Unwindability
Todas sistema autônomo funções não-folha [funções que não chamam uma função nem alocar qualquer espaço na pilha próprios] devem ser anotadas com dados [conhecidos sistema autônomo xdata ou ehdata, que é apontada do pdata] que descreve o sistema operacional sistema autônomo corretamente desenrolá-los, para recuperar registros não-volátil.Prologs e epilogs são altamente restritos, de forma que eles podem ser adequadamente descritos em xdata.O ponteiro da pilha precisa ser alinhado com 16 bytes, exceto para funções de folha, em qualquer região de código que não faça parte de um epilog ou de um prólogo.Para obter detalhes sobre a estrutura apropriada de prólogo da função e epilogs, consulte Prolog e Epilog. Para obter mais informações sobre a manipulação de exceção e a exceção pdata desenrolar/tratamento e xdata consulte Exceção Handling (x64).