Home
https://galaxy.agh.edu.pl/~amrozek/AK/x87.pdf
x86 fpu ma stack st(0), st(1), st(2) itd. (0 to najnowsze)
instrukcje pod
kefr.it/x86_64
Strona 7
CW:
pr
vv puozdi
0b1111001111111111
pr - precyzja:
00 - 24bity float
10 - 53 bity double
11 - 80 bity long double
Exception flagi
p - precision
u - underflow
o - overflow
z - zero divide
d - denormalized operand
i - invalid operation
Printowanie
print_tfloat:
sub $24 , %rsp # rezerwacja miejsca na stacku
fstpt (%rsp) # pobranie z st(0) do poczatku stacka (%rsp)
mov $str_tf , %rdi # klasyk
xor %eax , %eax # nie uzywamy xmm to zerowanie
call printf # klasyk
add $24 , %rsp # wracamy do stanu poprzedniego
ret # klasyk
print_double:
sub $8 , %rsp
fstl f_d # "store long"
movsd f_d , %xmm0 # juz mi sie nie chce, kiedy koniec sema ??
mov $str_d , %rdi
mov $1 , %eax
call printf
add $8 , %rsp
ret
print_float:
sub $8 , %rsp
fsts f_f # "store short(float)"
movss f_f , %xmm0
cvtss2sd %xmm0 , %xmm0
mov $str_f , %rdi
mov $1 , %eax
call printf
add $8 , %rsp
ret