From be953c23a9ee9c328d186e0afd7fbc0855eefd3a Mon Sep 17 00:00:00 2001 From: exegete Date: Sat, 17 Oct 2020 20:59:23 +0300 Subject: float lib finished --- ia32/float/control.sts | 19 +++++++++++++++++++ ia32/float/float.sts | 50 +++----------------------------------------------- ia32/float/math.sts | 32 ++++++++++++++++++++++++++++++++ ia32/float/stack.sts | 19 +++++++++++++++++++ 4 files changed, 73 insertions(+), 47 deletions(-) create mode 100644 ia32/float/control.sts create mode 100644 ia32/float/math.sts create mode 100644 ia32/float/stack.sts (limited to 'ia32') diff --git a/ia32/float/control.sts b/ia32/float/control.sts new file mode 100644 index 0000000..3863f5f --- /dev/null +++ b/ia32/float/control.sts @@ -0,0 +1,19 @@ +defasm float_init + # 9b ?' ; wait + # db ?' # e3 ?' ; fninit +next + +defasm float_cload + # d9 ?' # 2c ?' # 24 ?' ; fldcw [esp] + # 58 ?' ; pop eax +next + +defasm float_sstore + # 9b ?' # df ?' # e0 ?' ; fstsw ax + # 50 ?' ; push eax +next + +defasm float_cstore + # 50 ?' ; push eax + # d9 ?' # 3c ?' # 24 ?' ; fstcw [esp] +next diff --git a/ia32/float/float.sts b/ia32/float/float.sts index 9f3ba52..d6907ca 100644 --- a/ia32/float/float.sts +++ b/ia32/float/float.sts @@ -1,47 +1,3 @@ -defasm float_init - # 9b ?' ; wait - # db ?' # e3 ?' ; fninit -next - -defasm float_cload - # d9 ?' # 2c ?' # 24 ?' ; fldcw [esp] - # 58 ?' ; pop eax -next - -defasm float_sstore - # 9b ?' # df ?' # e0 ?' ; fstsw ax - # 50 ?' ; push eax -next - -defasm float_cstore - # 50 ?' ; push eax - # d9 ?' # 3c ?' # 24 ?' ; fstcw [esp] -next - -defasm float_fload - # d9 ?' # 04 ?' # 24 ?' ; fld dword [esp] - # 58 ?' ; pop eax -next - -defasm float_iload - # db ?' # 04 ?' # 24 ?' ; fild dword [esp] - # 58 ?' ; pop eax -next - -defasm float_fstore - # 50 ?' ; push eax - # d9 ?' # 1c ?' # 24 ?' ; fstp dword [esp] -next - -defasm float_istore - # 50 ?' ; push eax - # db ?' # 1c ?' # 24 ?' ; fistp dword [esp] -next - -defasm float_add - # de ?' # c1 ?' ; faddp st1, st0 -next - -defasm float_div - # de ?' # f9 ?' ; fdivp st1, st0 -next +module ia32/float/control.sts +module ia32/float/stack.sts +module ia32/float/math.sts diff --git a/ia32/float/math.sts b/ia32/float/math.sts new file mode 100644 index 0000000..9be8712 --- /dev/null +++ b/ia32/float/math.sts @@ -0,0 +1,32 @@ +defasm float_add + # de ?' # c1 ?' ; faddp st1, st0 +next + +defasm float_sub + # de ?' # e9 ?' ; fsubp st1, st0 +next + +defasm float_mul + # de ?' # c9 ?' ; fmullp st1, st0 +next + +defasm float_div + # de ?' # f9 ?' ; fdivp st1, st0 +next + +defasm float_sqrt + # d9 ?' # fa ?' ; fsqrt +next + +defasm float_more + # de ?' # d9 ?' ; fcompp + # 9b ?' # df ?' # e0 ?' ; fstsw ax + # 25 ?' # 100 ?. ; and eax, 0x100 + # c1 ?' # e8 ?' # 8 ?' ; shr eax, 14 + # 50 ?' ; push eax +next + +defword float_less + float_more + 0 = +exit diff --git a/ia32/float/stack.sts b/ia32/float/stack.sts new file mode 100644 index 0000000..ca95196 --- /dev/null +++ b/ia32/float/stack.sts @@ -0,0 +1,19 @@ +defasm float_fload + # d9 ?' # 04 ?' # 24 ?' ; fld dword [esp] + # 58 ?' ; pop eax +next + +defasm float_iload + # db ?' # 04 ?' # 24 ?' ; fild dword [esp] + # 58 ?' ; pop eax +next + +defasm float_fstore + # 50 ?' ; push eax + # d9 ?' # 1c ?' # 24 ?' ; fstp dword [esp] +next + +defasm float_istore + # 50 ?' ; push eax + # db ?' # 1c ?' # 24 ?' ; fistp dword [esp] +next -- cgit v1.2.3 From 44d2daf8f659a843cf7d39cbaec18c146bf59f28 Mon Sep 17 00:00:00 2001 From: exegete Date: Sat, 17 Oct 2020 21:08:39 +0300 Subject: small comment fix --- ia32/float/math.sts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ia32') diff --git a/ia32/float/math.sts b/ia32/float/math.sts index 9be8712..d02b491 100644 --- a/ia32/float/math.sts +++ b/ia32/float/math.sts @@ -22,7 +22,7 @@ defasm float_more # de ?' # d9 ?' ; fcompp # 9b ?' # df ?' # e0 ?' ; fstsw ax # 25 ?' # 100 ?. ; and eax, 0x100 - # c1 ?' # e8 ?' # 8 ?' ; shr eax, 14 + # c1 ?' # e8 ?' # 8 ?' ; shr eax, 8 # 50 ?' ; push eax next -- cgit v1.2.3