31209Fermer31211
bearbecueLe 22/05/2017 à 11:06
bah justement, c'est un compilo grin
mais on a une version template aussi, pour implem des fast IntDiv SIMD smile
quand t'ecris "x / 6" le compilo C++ va effectivement convertir ca en truc comme:

movsxd rax, eax
imul rax, rax, 0x2AAAAAAB
mov rcx, rax
shr rcx, 63
shr rax, 32
add eax, ecx

mais il y a pas d'intrinsics int div en SSE ou Neon du coup la version template est utile quand meme, pour pouvoir ecrire genre:

SIMD::Int4 x = ...;
SIMD::Int4 y = x.IntDiv<6>();

le 'IntDiv' va appeler la template avec '6', qui lui donnera acces au multiplicateur et shifter constants, quel l'implem de la fonction 'IntDiv' pourra ensuite utiliser dans un mulHi, etc.. (comme la version scalaire d'avant)
bref