Pergunta

Eu tenho algum código SIMD em Altivec processamento de 32 valores inteiros de bits em paralelo. Em alguns casos eu quero carregar os inteiros tão pouco endian, em outros casos, como big endian (nota: esta escolha é independente do endianess CPU nativa, que é baseado no que o algoritmo está sendo executado). Fazendo a troca de bytes real é muito fácil usando operações de permuta de AltiVec, como documentada pela Apple .

A parte que eu estou preocupado é que PowerPC permite a operação endian seja grande ou pequena, e por isso eu não sei se eu preciso de swap byte em little endian cargas / lojas ou big endian cargas / lojas. (Atualmente o meu código apenas sempre faz isso por pouco endian e nunca swaps para grandes ops de memória endian, que funciona bem no 970 Atualmente estou usando desde, claro, ele está correndo big-endian).

De que eu posso encontrar, PPCs no modo little-endian são relativamente raros, mas eles existem e, idealmente, eu gostaria de ter meu trabalho código corretamente e rapidamente independentemente do modo.

Existe uma maneira de lidar com cargas endian grandes e pequenos para AltiVec registra independentemente do endianness CPU? Há outras questões relacionadas com este que eu deveria saber? Wikipedia tem o (naturalmente não citados) declaração:

"operações AltiVec, apesar de ser de 128 bits, são tratados como se fossem de 64 bits. Isto permite a compatibilidade com motherboards pequenos-endian que foram projetados antes AltiVec."

que me faz pensar que pode haver outra específica maldade para AltiVec no modo little-endian.

Foi útil?

Solução

Praticamente todo o código PowerPC lá fora, vai assumir big-endian e todo o código ARM lá fora, vai assumir little endian.

Existem alguns casos especializados, onde endian-troca é usado - aparentemente VirtualPC contavam com pouco modo endian e, portanto, inicialmente não funcionou no G5 (que não inclui-lo) - mas eu não iria se preocupar com essas .

ARM tem um problema semelhante no modo big-endian: dobros são misturados-endian. O "pseudo-ordenação" é conseguida por XORing os bits de endereço de ordem baixa (com 0x2 para acessos halfword) e 0x3 (para acessos byte) de modo que a ordem eficaz dentro de uma palavra de 32 bits é trocado, mas esta pausas para 64- bit acessos. Eu suspeito que o mesmo truque é usado em PowerPC, exceto feito 64 bits de cada vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top