__asm__ (
"loop:\n\t"
"movl $1,%3\n\t"
"movl $0, %6\n"
"start:\n\t"
"movl (%1,%3,4),%4\n\t"
"movl -4(%1, %3, 4), %5\n\t"
"cmpl %4, %5\n\t"
"jle next\n\t"
"xchgl %4, %5\n\t"
"movl %4, (%1, %3, 4)\n\t"
"movl %5, -4(%1, %3, 4)\n\t"
"movl $1, %6\n"
"next:\n\t"
"incl %3\n\t"
"cmpl %3, %2\n\t"
"jge start\n\t"
"cmpl $0, %6\n\t"
"je end\n\t"
"jmp loop\n"
"end: \n\t"
:"=r"(input_array)
:"r"(input_array), "r"(size-1), "r"(1), "r"(0), "r"(0), "r"(0)
);
我明白了:
错误:在重新加载'asm'错误时找不到类'GENERAL_REGS'中的寄存器:'asm'操作数有不可能的约束
答案 0 :(得分:3)
您必须记住,这些机器的寄存器数量有限。它实际上可能耗尽 - 这就是你所得到的错误告诉你的。
在x86上,只有8个通用寄存器。 esp
保留给堆栈指针。 ebp
可能被用作基指针。所以只剩下6个。
但是,您的内联汇编代码段似乎需要7个寄存器?你没有足够的。
因此解决方案是您需要使用更少的寄存器。将一些参数放入内存或更改算法......