• [^] # Re: meuh

    Posté par . En réponse au message un peu d'assembleur SPARC. Évalué à 2.

    Ton code était déjà faux à la base. Le fait que tu fasses de l'assembleur inline ne change pas le rounding mode courant. Tu dis "contrairement a celui du C qui est la troncature", tu obtiendras aussi la troncature via ta fonction ftoi(). AFAIK, fist[p] utilise le rounding mode courant. Donc, si c'est la troncature, tu obtiens la troncature. IIRC sur SPARC, fdtoi utilises le mode courant aussi, ce qui est logique.

    Autre chose, la syntaxe que tu donnes ne correspond pas à celle supportée par GCC sur x86. Maintenant, tu demandes pour du SPARC. On va supposer que tu utilises GCC car avec le compilo de Sun, ça se passe différemment.

    Par ailleurs, le code que tu proposes, outre le fait qu'il soit faux était sous-optimal vu que tu semblais vouloir passer les paramètres et retour par mémoire.

    Pour faire ce que tu veux, je te suggère.

    static inline long ftoi_nearest(double x) {
    int i, old_mode = fegetround();
    fesetround(FE_TONEAREST);
    i = lrint(x);
    fesetround(old_mode);
    return i;
    }

    après, tu optimises comme tu veux, si c'est possible.

    Par exemple, si tu as un noyau de code où tu veux absolument ce mode là, tu n'as cas faire les changements de mode autour et utiliser lrint, ou bien les instructions assembleur dédiées vu que maintenant tu seras certain de ton mode d'arrondi.