Что такое __float128, если я использую GCC 4.9 на x86_64?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Что такое __float128, если я использую GCC 4.9 на x86_64?

Сообщение Anonymous »

Я написал простую программу, думая, что могу узнать из разборки: < /p>

Код: Выделить всё

int main() {
double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c);
__float128 foo = a;
foo += b; foo += c;
printf("%f\n", (double)foo);
}
< /code>
main
Compiles (-o3) к следующему:

Код: Выделить всё

  400630:       48 83 ec 38             sub    $0x38,%rsp
400634:       bf 34 08 40 00          mov    $0x400834,%edi
400639:       31 c0                   xor    %eax,%eax
40063b:       48 8d 4c 24 28          lea    0x28(%rsp),%rcx
400640:       48 8d 54 24 20          lea    0x20(%rsp),%rdx
400645:       48 8d 74 24 18          lea    0x18(%rsp),%rsi
40064a:       e8 c1 ff ff ff          callq  400610 
40064f:       f2 0f 10 44 24 18       movsd  0x18(%rsp),%xmm0
400655:       e8 a6 ff ff ff          callq  400600 
40065a:       0f 29 04 24             movaps %xmm0,(%rsp)
40065e:       f2 0f 10 44 24 20       movsd  0x20(%rsp),%xmm0
400664:       e8 97 ff ff ff          callq  400600 
400669:       66 0f 6f 0c 24          movdqa (%rsp),%xmm1
40066e:       e8 5d ff ff ff          callq  4005d0 
400673:       0f 29 04 24             movaps %xmm0,(%rsp)
400677:       f2 0f 10 44 24 28       movsd  0x28(%rsp),%xmm0
40067d:       e8 7e ff ff ff          callq  400600 
400682:       66 0f 6f 0c 24          movdqa (%rsp),%xmm1
400687:       e8 44 ff ff ff          callq  4005d0 
40068c:       e8 8f ff ff ff          callq  400620 
400691:       bf 3a 08 40 00          mov    $0x40083a,%edi
400696:       b8 01 00 00 00          mov    $0x1,%eax
40069b:       e8 20 ff ff ff          callq  4005c0 
4006a0:       31 c0                   xor    %eax,%eax
4006a2:       48 83 c4 38             add    $0x38,%rsp
4006a6:       c3                      retq
< /code>
When I look at the disassembly of __addtf3
, установив точку останова и запустив программу в рамках GDB , я вижу болота арифметики и условий. Я не стал пытаться прочитать его, но он, безусловно, не выглядел как код для двойного двойного добавления. Если да, то какой формат?


Подробнее здесь: https://stackoverflow.com/questions/266 ... -on-x86-64
Ответить

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

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

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

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

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