Quelqu'un peut-il suggérer un moyen rapide de calculer float
sol/plafond en utilisant pre-SSE4.1 SIMD? J'ai besoin de gérer correctement tous les cas de coin, par ex. quand j'ai une valeur float
, ce n'est pas représentable par int 32 bits.ceil/sol dans sse simd
Actuellement, je suis en utilisant similaire au code suivant (j'utilise intrinsics C, converti en Asm pour plus de clarté):
;make many copies of the data
movaps xmm0, [float_value]
movaps xmm1, xmm0
movaps xmm2, xmm0
;check if the value is not too large in magnitude
andps xmm1, [exp_mask]
pcmpgtd xmm1, [max_exp]
;calculate the floor()
cvttps2dq xmm3, xmm2
psrld xmm2, 31
psubd xmm3, xmm2
cvtsq2ps xmm2, xmm3
;combine the results
andps xmm0, xmm1
andnps xmm1, xmm2
orps xmm0, xmm1
est-il un moyen plus efficace de vérifier si la valeur flottante est pas trop grand pour 32bit int?