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(