Есть отрывок кода с использованием asm-вставок:
asm(
"mov %1,%%esi\n\t"
"mov %2,%%eax\n\t"
"mov $3,%%ebx\n\t"
"mul %%ebx\n\t"
"mov %3,%%ebx\n\t"
"mul %%ebx\n\t"
"add %1,%%eax\n\t"
"mov %%eax,%%edi\n\t"
"mov $0,%%eax\n\t"
"mov %3,%%eax\n\t"
"mov $2,%%ebx\n\t"
"div %%ebx\n\t"
"mov %%eax,%%ecx\n\t"
"Cycle1:\n\t"
"mov %2,%%eax\n\t"
"mov $3,%%ebx\n\t"
"mul %%ebx\n\t"
"mov %%eax,%%edx\n\t"
"sub %%eax,%%edi\n\t"
"Cycle2:\n\t"
"sub $4,%%edx\n\t"
"mov (%%edi,%%edx),%%eax\n\t"
"mov (%%esi,%%edx),%%ebx\n\t"
"mov %%eax,(%%esi,%%edx)\n\t"
"mov %%ebx,(%%edi,%%edx)\n\t"
"mov %%edx,%%eax\n\t"
"jnz Cycle2\n\t"
"mov %2,%%eax\n\t"
"mov $3,%%ebx\n\t"
"mul %%ebx\n\t"
"add %%eax,%%esi\n\t"
"loop Cycle1"
:
:"g"(image), "g"(width), "g"(height)
:"memory"
);
При компиляции с помощью gcc 4.4.3 выдает ошибку error: invalid 'asm': operand number out of range Вопрос: как это исправить? Весь интернет перерыл, но ответа пока так и не нашел. Заметил, что ошибка выводится только для последней объявленной переменной («g»(height) в данном случае), если та используется во вставке. И что если добавить пустую переменную к объявлению, которая нигде не используется, то ошибка исчезает. Однако, при запуске скомпилированной программы выдает ошибку сегментации. Буду благодарен за помощь.