aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2015-04-11 00:59:04 +0200
committerDrahflow <drahflow@gmx.de>2015-04-11 00:59:04 +0200
commit3e22eb797f02cdb54a5eccc8c6ebce33e1e1d7d5 (patch)
treea3683561e3ca0edc0e431a8aa142b86842db27a8 /elymas/lib
parentf0a883a15138991e09d4657b7d2aab491dafbc7b (diff)
Sane handling of integer division
Diffstat (limited to 'elymas/lib')
-rw-r--r--elymas/lib/math.ey22
-rw-r--r--elymas/lib/sys/opt.ey4
2 files changed, 24 insertions, 2 deletions
diff --git a/elymas/lib/math.ey b/elymas/lib/math.ey
index db04c7b..cc9b288 100644
--- a/elymas/lib/math.ey
+++ b/elymas/lib/math.ey
@@ -24,4 +24,26 @@
} /base deff
> /math defv
+# FIXME: INTEGRATE
+# # 0 -> float
+# # 0 <- the int portion of the float, rounded towards zero
+# [[
+# /rbx :popqReg
+#
+# # allocate result int
+# ::internalAllocateInteger /rax :movqImmReg
+# /rax :callqReg
+#
+# # actual conversion
+# /rcx :popqReg
+# 8 /rcx :fld64MemDisp8
+# 8 /rax :fistp64MemDisp8
+#
+# # push int on program stack
+# /rax :pushqReg
+#
+# /rbx :pushqReg
+# :retn
+# ]] /eytrunc defv
+
# vim: syn=elymas
diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey
index 4229748..df3d210 100644
--- a/elymas/lib/sys/opt.ey
+++ b/elymas/lib/sys/opt.ey
@@ -891,7 +891,7 @@
/rsi /ecx :movlMemReg
3 /rcx :shrqImm8Reg
/rcx :decqReg
- /rdx /rdx :xorqRegReg
+ /rdx /rdx :xorqRegReg # FIXME: Is this correct?
/rcx :divqReg
8 8 /rdx /rsi :pushqMemIndexScaleDisp8
] emitOpcodes
@@ -906,7 +906,7 @@
8 /rax /rax :movqMemDisp8Reg
16 /rsi /rcx :movqMemDisp8Reg
/rdx /rdx :xorqRegReg
- /rcx :divqReg
+ /rcx :divqReg # FIXME: Is this correct?
24 1 /rdx /rsi /rbx :movzxMem8IndexScaleDisp8Reg64
63 /rbx :btsqImm8Reg
/rbx :pushqReg