Да. Это поддерживается. Язык D использует эту функцию. Когда вы используете типы float
или double
, он компилирует код SSE, когда вы используете real
, который говорит компилятору использовать наиболее точный тип реализации. В случае x86 это x87 с его 80-битным типом.
https://godbolt.org/z/50kr-H
real square(real num) {
return num * num;
}
float square(float num) {
return num * num;
}
компилируется в
real example.square(real):
push rbp
mov rbp, rsp
fld tbyte ptr [rbp + 16]
fstp tbyte ptr [rbp - 16]
fld tbyte ptr [rbp - 16]
fmul st(0), st
pop rbp
ret
float example.square(float):
push rbp
mov rbp, rsp
movss dword ptr [rbp - 4], xmm0
movss xmm0, dword ptr [rbp - 4]
mulss xmm0, dword ptr [rbp - 4]
pop rbp
ret