左/右旋转用GCC组件的移动数(Rotate left/right with number of m

2019-10-19 00:16发布

我有以下的代码来计算左/右旋转在Visual Studio中装配。

template<class T>
inline T rotr(T x, unsigned char moves){
    unsigned char temp;
    __asm{
        mov temp, CL
            mov CL, moves
            ror x, CL
            mov CL, temp
    };
    return x;
}
template<class T>
inline T rotl(T x, unsigned char moves){
    unsigned char temp;
    __asm{
        mov temp, CL
            mov CL, moves
            rol x, CL
            mov CL, temp
    };
    return x;
}

1,我们怎样才能写出GCC相当于汇编代码。

2 - 有没有更好的办法把它写在Visual Studio中组装?

Answer 1:

我已经在这里找到了答案:

MinGW的在不良_rotl性能

和重写我的代码是:

template<class T> 
inline  T rotr(T x, uint8_t r) {
      asm("rorl %1,%0" : "+r" (x) : "c" (r));
      return x;
    }

template<class T> 
inline  T rotl(T x, uint8_t r) {
      asm("roll %1,%0" : "+r" (x) : "c" (r));
      return x;
    }

感谢您从杰里棺材和gnometorule约_rotl / _rotr _rotl64 / _rotr64有用的评论



文章来源: Rotate left/right with number of moves using GCC assembly