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