Diferença entre “ou eax, eax” e “test eax, eax” [duplicado]

Esta pergunta já tem uma resposta aqui:

Teste se um registro é zero com CMP reg, 0 vs OR reg, reg? 2 respostas

Qual é a diferença entreor eax,eax etest eax,eax? Eu já vi compiladores diferentes produzirem para a mesma comparação e, no que diz respeito à documentação, eles fazem exatamente a mesma coisa, por isso estou me perguntando por que nem todos usamtest eax,eax. A pensar nissoand eax,eax definiria os sinalizadores de maneira idêntica, mas eu não o vi em freepascal, delphi ou msVC +

Eu compilei alguns blocos asm no delphi e verifiquei a fonte do assembler e todos os três formulários têm exatamente o mesmo comprimento em opcodes e também verifiquei o PDF do desempenho da intel e diz que eles têm a mesma latência e taxa de transferênci

Editar
A pergunta é especificamente sobre a diferença entre os casos específicostest eax,eax, or eax,eax eand eax,eax. Todos os três fornecem resultados completamente idênticos para registros, sinalizadores, comprimento do código de operação, latência e taxa de transferência. E ainda para testar se 0, se não for zero ou se for assinado, alguns compiladores usarãotest eax,eax enquanto alguns usamor eax,eax, e eu queria saber por que eles não estão todos usandotest eax,eax, pois torna o código um pouco mais clar

Edit2:
Para referência, estou em casa e só tenho o msvc ++ e o Delphi mais antigos aqui, mas testando uma variável se zero, o msvc ++ faztest eax,eax, enquanto Delphi fazor eax,eax.