Резервный стек FPU для блокировки во встроенной сборке

# #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 были бы моим чтением, но я не уверен.