inline-assembly

    0熱度

    2回答

    檢測到我正在使用基於PIN的模擬器來測試一些新的架構修改。我需要用我的模擬器測試帶有兩個操作數(寄存器和內存位置)的「新」指令。 由於使用GCC機器描述僅添加一條指令非常繁瑣,因此使用NOP或未定義指令似乎很合理。 密碼很容易能夠使用INS_IsNop來檢測NOP指令,但它會干擾NOP自然添加到代碼中,它也沒有操作數或單個內存操作數。 剩下的唯一選擇是使用和未定義的指令。未定義的指令永遠不會干擾代

    1熱度

    1回答

    不能完全確定偏移如何標題這一點,但 想模仿這個代碼: asm("movl %%fs:0x30, %0" : "=r" (peb) : :); ,但我想指定用C 可變偏移嘗試: int mee = 48; asm("movl %%fs:%1, %0" : "=r" (peb) : "r" (mee) : ); 錯誤是bad memory opera

    1熱度

    1回答

    指針可以用作內存引用的偏移量和基地嗎?inline assembly? 例如: int main(){ char a[16],b[16]; asm volatile("\ movq $123,16(%%rsp,%%rbx,1)" :"=m"(*a)::"rbx"); } 可能是這樣的: int main(){ char a[16],b[16]; asm volatile("\

    5熱度

    2回答

    我在編譯過程中收到以下錯誤: error: ‘asm’ undeclared (first use in this function) EXCHANGE(s, *(a)); ^ 在宏調用的頭文件如下: EXCHANGE(s, *(a)); 和宏的實際確定指標如下: #define EXCHANGE(R,M) asm volatile ("xchg %1, %0" : "+m" (M),

    3熱度

    1回答

    我一直在試圖通過寄存器阻塞,SSE2矢量化和L1緩存阻塞來加速矩陣矩陣乘法C < - C + alpha * A * B(注意我特別選擇了轉置設置op(A)= A和op(B)= B)。經過一番努力,我的書寫代碼仍然是,比單線程模式下的GotoBLAS慢了約50%。 以下是我在L1緩存上進行「內核」方陣矩陣乘法的代碼,在Goto的工作中稱爲「DGEBB」(一般塊塊操作),它將兩個NB * NB方陣(

    -2熱度

    1回答

    我在我的ASM彙編代碼下面部分 "LOOP%=:\n\t" "movapd (%%eax), %%xmm4\n\t" "addl $32, %%eax\n\t" "movsd (%%edx), %%xmm5\n\t" "addl $16, %%edx\n\t" "movapd %%xmm4, %%xmm6\n\t" "subl

    2熱度

    1回答

    是否可以重寫或改進此函數,以便在其內聯彙編中不需要volatile或通用內存clobber? // do stuff with the input Foo structure and write the result to the // output Bar structure. static inline void MemFrob(const struct Foo* input, struc

    2熱度

    1回答

    我是X86的新手,我堅持使用另一個double數組的值更新雙數組。下面的代碼是我的函數,我想用內聯彙編代替循環內的代碼段。我附上了下面的錯誤消息。任何人都可以幫我指出我的錯誤嗎?我對錯誤信息感到困惑,不知道如何修改它。 static inline void update(double * x,double * y,double * z,double * vx, double * vy,

    -3熱度

    1回答

    inline void addition(double * x, const double * vx,uint32_t size){ /*for (uint32_t i=0;i<size;++i){ x[i] = x[i] + vx[i]; }*/ __asm__ __volatile__ ( "1: \n\t" "vmovupd -3

    0熱度

    1回答

    到現在爲止,我用內聯asm來破解它不是獲得良好性能的最佳選擇。我從彙編開始,但是我正在編寫我的機器(GCC),但結果代碼是在64位(Sandy Bridge & Haswell)中的其他(ICC)上運行的。 要調用一個沒有參數的函數,我們可以用CALL來做,但我不太明白如何用參數調用一個函數,並且因爲我試圖在所有函數中使用內聯__asm__。這是一個不錯的選擇? 我的功能: void add_N(