# #c #gcc #x86 #inline-assembly #x87
Вопрос:
При написании математических функций во встроенной сборке есть ли способ сообщить компилятору «Я использую 2 дополнительных слота FPU-стека»?
Например, реализация exp может выглядеть следующим образом:
asm("fldl2en"
"fmulpn"
"fld1n"
"fld %%st(1)n"
"fpremn"
"f2xm1n"
"faddpn"
"fscalen"
"fstp %%st(1)"
: "=t"(res)
: "0"(exponent));
но компилятор не знает, что максимальный стек, используемый этой функцией, составляет 3 слота, и, возможно, он уже заполнил его 6 другими значениями, прежде чем загрузить в него показатель, оставив недостаточно для вычислений.
Является ли просто «удар st(2),st(1),st(0)» правильным способом сделать это,
или есть другой/лучший способ это сделать
Комментарии:
1. Вы уже читали 6.47.2.9 «Операнды asm с плавающей запятой x86» руководства gcc ?
2. Если бы я правильно прочитал, я бы просто ударил st2 и st3 в описанном случае?
3. st1 и st2 были бы моим чтением, но я не уверен.