Ожидается ";" вместо "::" во встроенном ассемблере [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ожидается ";" вместо "::" во встроенном ассемблере [закрыто]

Сообщение Anonymous »


I try to run a code which has a random number generation algorythm as a part of it. However, it doesn't work and compiler warns: "expected a ";"" where :: for input and output operands in inline assembler shall be. For similar function dealing not with AVX but with SSE there is no mistake, the only difference I see is naming for instructions, not the function syntax. I will be very grateful for any hint why it goes wrong. Function code below, error in last line:

void mt19937_avx_do16all(int i,mt19937_state* state){ __asm __volatile__( "vmovups 2500(%0),%%ymm0\n" \ "vmovups 2532(%0),%%ymm4\n" \ "vmovups 4(%0),%%ymm1\n" \ "vmovups 36(%0),%%ymm5\n" \ "vandps 64(%2),%%ymm0,%%ymm0\n" \ "vandps 64(%2),%%ymm4,%%ymm4\n" \ "vandps 96(%2),%%ymm1,%%ymm1\n" \ "vandps 96(%2),%%ymm5,%%ymm5\n" \ "vorps %%ymm0,%%ymm1,%%ymm1\n" \ "vorps %%ymm4,%%ymm5,%%ymm5\n" \ "vmovaps %%ymm1,%%ymm0\n" \ "vmovaps %%ymm5,%%ymm4\n" \ "vpsrld $1,%%ymm1,%%ymm1\n" \ "vpsrld $1,%%ymm5,%%ymm5\n" \ "vandps 32(%2),%%ymm0,%%ymm0\n" \ "vandps 32(%2),%%ymm4,%%ymm4\n" \ "vpcmpgtd (%2),%%ymm0,%%ymm0\n" \ "vpcmpgtd (%2),%%ymm4,%%ymm4\n" \ "vandps 128(%2),%%ymm0,%%ymm0\n" \ "vandps 128(%2),%%ymm4,%%ymm4\n" \ "vxorps %%ymm1,%%ymm0,%%ymm0\n" \ "vxorps %%ymm5,%%ymm4,%%ymm4\n" \ "vmovups 1588(%0),%%ymm1\n" \ "vmovups 1620(%0),%%ymm5\n" \ "cmpl $223,%3\n" \ "jl MyL1%=\n" \ "cmpl $227,%3\n" \ "jl MyL2%=\n" \ "vmovups -908(%0),%%ymm1\n" \ "MyL2%=: \n" \ "vmovups -892(%0),%%ymm3\n" \ "vinserti128 $1,-892(%0),%%ymm1,%%ymm1\n"\ "vmovups -876(%0),%%ymm5\n" \ "MyL1%=: \n" \ "vxorps %%ymm1,%%ymm0,%%ymm0\n" \ "vxorps %%ymm5,%%ymm4,%%ymm4\n" \ "vmovups %%ymm0,(%0)\n" \ "vmovups %%ymm4,32(%0)\n" \ "vmovups %%ymm0,2500(%0)\n" \ "vmovups %%ymm4,2532(%0)\n" \ "vpsrld $11,%%ymm0,%%ymm2\n" \ "vpsrld $11,%%ymm4,%%ymm3\n" \ "vxorps %%ymm0,%%ymm2,%%ymm0\n" \ "vxorps %%ymm4,%%ymm3,%%ymm4\n" \ "vpslld $7,%%ymm0,%%ymm2\n" \ "vpslld $7,%%ymm4,%%ymm3\n" \ "vandps 160(%2),%%ymm2,%%ymm2\n" \ "vandps 160(%2),%%ymm3,%%ymm3\n" \ "vxorps %%ymm0,%%ymm2,%%ymm0\n" \ "vxorps %%ymm4,%%ymm3,%%ymm4\n" \ "vpslld $15,%%ymm0,%%ymm2\n" \ "vpslld $15,%%ymm4,%%ymm3\n" \ "vandps 192(%2),%%ymm2,%%ymm2\n" \ "vandps 192(%2),%%ymm3,%%ymm3\n" \ "vxorps %%ymm0,%%ymm2,%%ymm0\n" \ "vxorps %%ymm4,%%ymm3,%%ymm4\n" \ "vpsrld $18,%%ymm0,%%ymm2\n" \ "vpsrld $18,%%ymm4,%%ymm3\n" \ "vxorps %%ymm0,%%ymm2,%%ymm0\n" \ "vxorps %%ymm4,%%ymm3,%%ymm4\n" \ "vmovaps %%ymm0,(%1)\n" \ "vmovaps %%ymm4,32(%1)\n" \ ""::"r"(state->mt+i),"r"(state->out+i),"r"(mt19937_avx_consts),"r"(i)); } I've tried to run this through windows terminal using g++ command, however resulting file contains anything but numbers and I guess it is due to syntax mistakes in this part of code. There vere multiple errors from compiler as it did not understand original "asm volatile", there was also an issue with attribute((aligned())) which it did not understand so I found that adding this define makes error leave
#define __attribute__(x)

Источник: https://stackoverflow.com/questions/780 ... -assembler
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»