Articles of x86 64

Cálculo de ponto flutuante vs número inteiro em hardware moderno

Eu estou fazendo algum trabalho crítico de desempenho em C ++, e atualmente estamos usando cálculos de inteiros para problemas que são inerentemente ponto flutuante porque “é mais rápido”. Isso causa muitos problemas irritantes e adiciona muito código chato. Agora, lembro-me de ler sobre como os cálculos de ponto flutuante eram tão lentos aproximadamente nos […]

É necessário um sinal ou extensão zero ao adicionar um deslocamento de 32 bits a um ponteiro para o ABI x86-64?

Resumo: Eu estava olhando o código assembly para orientar minhas otimizações e ver muitas extensões de sinal ou zero ao adicionar int32 a um ponteiro. void Test(int *out, int offset) { out[offset] = 1; } ————————————- movslq %esi, %rsi movl $1, (%rdi,%rsi,4) ret No começo, achei que meu compilador foi desafiado a adicionar inteiros de […]

Construir o OpenSSL Multiarch no OS X

Eu preciso construir o OpenSSL no OS X para arquiteturas de 32 e 64 bits. Quais são as opções que eu preciso dar a ./Configure para que eu construa as duas arquiteturas no mesmo arquivo .a?

O formato Mach-O 64-bit não suporta endereços absolutos de 32 bits. Matriz de Acesso NASM

Executando este código fora do meu computador Mac, usando o comando: nasm -f macho64 -o max.a maximum.asm Este é o código que estou tentando executar no meu computador que encontra o maior número dentro de uma matriz. section .data data_items: dd 3,67,34,222,45,75,54,34,44,33,22,11,66,0 section .text global _start _start: mov edi, 0 mov eax, [data_items + edi*4] […]

Onde está documentado o ABI System V x86-64?

A ABI x86-64 System V (usada em tudo, exceto no Windows) costumava ser usada em http://x86-64.org/documentation/abi.pdf , mas esse site agora caiu da Internet. Existe um novo lar autoritativo para o documento?

Por que o GCC não usa registros parciais?

Desmontando write(1,”hi”,3) no linux, construído com gcc -s -nostdlib -nostartfiles -O3 resultados em: ba03000000 mov edx, 3 ; thanks for the correction jester! bf01000000 mov edi, 1 31c0 xor eax, eax e9d8ffffff jmp loc.imp.write Eu não estou no desenvolvimento do compilador, mas desde que todos os valores movidos para esses registradores são constantes e conhecidos […]

Por que o Windows64 usa uma convenção de chamada diferente de todos os outros sistemas operacionais no x86-64?

A AMD possui uma especificação ABI que descreve a convenção de chamada a ser usada no x86-64. Todos os sistemas operacionais o seguem, exceto para o Windows que possui sua própria convenção de chamada x86-64. Por quê? Alguém conhece as razões técnicas, históricas ou políticas para essa diferença, ou é puramente uma questão de síndrome […]

Como determinar se um assembly .NET foi criado para x86 ou x64?

Eu tenho uma lista arbitrária de assemblies .net. Eu preciso verificar programaticamente se cada DLL foi criada para x86 (em oposição a x64 ou qualquer CPU). Isso é possível?

Por que o GCC usa a multiplicação por um número estranho na implementação da divisão de inteiros?

Eu tenho lido sobre operações de assembly div e mul , e eu decidi vê-las em ação escrevendo um programa simples em C: Arquivo division.c #include #include int main() { size_t i = 9; size_t j = i / 5; printf(“%zu\n”,j); return 0; } E, em seguida, gerar o código da linguagem assembly com: gcc […]

Endereços absolutos de 32 bits não são mais permitidos no Linux x86-64?

O Linux de 64 bits usa o modelo de memory pequena por padrão, o que coloca todos os códigos e dados estáticos abaixo do limite de endereços de 2 GB. Isso garante que você pode usar endereços absolutos de 32 bits. Versões mais antigas do gcc usam endereços absolutos de 32 bits para matrizes estáticas […]