summaryrefslogtreecommitdiff
path: root/leibniz.asm
blob: e4f5653708cf95c7695ec853b803299331dcec6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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