castings wegoptimieren



  • Hi,

    ich bastle momentan an einer Lib die teile der WinAPI optimieren soll, funzt bisher auch prima!

    Doch jetzt bin ich an eine stelle gekommen, wo ich castings nicht richtig wegoptimieren kann ­čś×

    #ifdef GET_X_LPARAM
    #undef GET_X_LPARAM
    #endif
    
    #ifdef GET_Y_LPARAM
    #undef GET_Y_LPARAM
    #endif
    
    #ifndef GET_X_LPARAM
    __forceinline int GET_X_LPARAM (long lp)
    {
    	return ((int)(short)(unsigned short)((unsigned long)(lp) & 0xffff));
    }
    #endif
    
    #ifndef GET_Y_LPARAM
    __forceinline int GET_Y_LPARAM(long lp)
    {
    	return ((int)(short)(unsigned short)((unsigned long)(lp) >> 16));
    }
    #endif
    

    Weis einer wie ich das optimieren kann?



  • ach leutz kommt schon, wenn ich nen cast wegmache ist das ergebnis falsch ­čś× was kann ich tun damit das ergebnis richtig ist?



  • LPARAM und WPARAM sind doch vom typ unsigned long.
    wieso ist dein r├╝ckgabewert int ? somit brauchst du dann gar nicht wild in der gegend rumcasten



  • Ich glaube nicht, da├č diese casts ├╝berhaupt Laufzeit fressen. Das sind doch nur Anweisungen an den Compiler. Die Bits an sich bleiben doch unver├Ąndert.

    MfG Jester



  • Warum das ganze so sinnlos kompliziert?

    inline int GET_X_LPARAM(LPARAM lp)
    {
        return LOWORD(lp);
    }
    
    inline int GET_Y_LPARAM(LPARAM lp)
    {
        return HIWORD(lp);
    }
    

Log in to reply