summaryrefslogtreecommitdiff
path: root/leibniz.asm
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2008-01-02 03:55:22 +0000
committerMatt Turner <mattst88@gmail.com>2008-01-02 03:55:22 +0000
commitafda6f12adf869ca9b35eae215b2aa83b87de39a (patch)
tree038c98253ec35dc56aed1d5ab7abde8deb99833e /leibniz.asm
Initial import.
git-svn-id: svn://mattst88.com/svn/x86_64-assembly/trunk@1 a323887f-d61c-418c-83a5-2e06a2a01087
Diffstat (limited to 'leibniz.asm')
-rw-r--r--leibniz.asm62
1 files changed, 62 insertions, 0 deletions
diff --git a/leibniz.asm b/leibniz.asm
new file mode 100644
index 0000000..e4f5653
--- /dev/null
+++ b/leibniz.asm
@@ -0,0 +1,62 @@
+format ELF64
+
+extrn printf
+public main
+
+section '.text' executable align 64
+
+main:
+ push rbp
+ mov rbp,rsp
+ movdqa xmm6,dqword[denom]
+ movdqa xmm2,dqword[numer]
+ movdqa xmm3,dqword[add4]
+ movdqa xmm4,xmm2
+ movdqa xmm5,dqword[zero]
+ mov r12,10000000
+
+align 64
+top:
+ divpd xmm2,xmm6
+ addpd xmm5,xmm2
+ movdqa xmm2,xmm4
+ addpd xmm6,xmm3
+ divpd xmm2,xmm6
+ addpd xmm5,xmm2
+ movdqa xmm2,xmm4
+ addpd xmm6,xmm3
+ divpd xmm2,xmm6
+ addpd xmm5,xmm2
+ movdqa xmm2,xmm4
+ addpd xmm6,xmm3
+ divpd xmm2,xmm6
+ addpd xmm5,xmm2
+ movdqa xmm2,xmm4
+ addpd xmm6,xmm3
+
+ sub r12,1
+ jnz top
+
+ mov r12,10000000
+ movdqa xmm1,xmm5
+ movdqa xmm0,xmm6
+ haddpd xmm1,xmm1
+
+ mov eax,2
+ mov edi,msg
+ call printf
+
+ jmp top
+
+ leave
+
+ ret
+
+section '.data' writable align 16
+
+denom: dq 1.0,3.0
+numer: dq 4.0,-4.0
+add4: dq 4.0,4.0
+zero: dq 0.0,0.0
+
+msg db "1/%.0f - %50.48f",0xA,0