diff options
author | Aleksey Veresov <aleksey@veresov.pro> | 2020-10-18 18:22:31 +0300 |
---|---|---|
committer | Aleksey Veresov <aleksey@veresov.pro> | 2020-10-18 18:22:31 +0300 |
commit | df0d6a4503a26508553510b4050eaa79f52e4e4e (patch) | |
tree | 2517b6070319270a4cb0df9dcf3814b16ecaece9 /sts/ia32/float | |
parent | 9eadc7bac8863b7fd3a39edc9ba31cf4d3b5ab95 (diff) | |
download | cryptrobber-df0d6a4503a26508553510b4050eaa79f52e4e4e.tar cryptrobber-df0d6a4503a26508553510b4050eaa79f52e4e4e.tar.xz cryptrobber-df0d6a4503a26508553510b4050eaa79f52e4e4e.zip |
Another step to release.
Diffstat (limited to 'sts/ia32/float')
-rw-r--r-- | sts/ia32/float/control.sts | 19 | ||||
-rw-r--r-- | sts/ia32/float/float.sts | 3 | ||||
-rw-r--r-- | sts/ia32/float/math.sts | 32 | ||||
-rw-r--r-- | sts/ia32/float/stack.sts | 25 |
4 files changed, 79 insertions, 0 deletions
diff --git a/sts/ia32/float/control.sts b/sts/ia32/float/control.sts new file mode 100644 index 0000000..3863f5f --- /dev/null +++ b/sts/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/sts/ia32/float/float.sts b/sts/ia32/float/float.sts new file mode 100644 index 0000000..acaf3a0 --- /dev/null +++ b/sts/ia32/float/float.sts @@ -0,0 +1,3 @@ +module sts/ia32/float/control.sts +module sts/ia32/float/stack.sts +module sts/ia32/float/math.sts diff --git a/sts/ia32/float/math.sts b/sts/ia32/float/math.sts new file mode 100644 index 0000000..d02b491 --- /dev/null +++ b/sts/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, 8 + # 50 ?' ; push eax +next + +defword float_less + float_more + 0 = +exit diff --git a/sts/ia32/float/stack.sts b/sts/ia32/float/stack.sts new file mode 100644 index 0000000..8c16fef --- /dev/null +++ b/sts/ia32/float/stack.sts @@ -0,0 +1,25 @@ +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_dload + # df ?' # 2c ?' # 24 ?' ; fild qword [esp] + # 58 ?' ; pop eax + # 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 |