summaryrefslogtreecommitdiff
path: root/components/external/espruino/libs/math/polevl.asm
blob: 47aa7ff70afdb79840b1a418c203c6b94a6ff73f (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
;	Static Name Aliases
;
	TITLE   polevl

_TEXT	SEGMENT  BYTE PUBLIC 'CODE'
_TEXT	ENDS
CONST	SEGMENT  WORD PUBLIC 'CONST'
CONST	ENDS
_BSS	SEGMENT  WORD PUBLIC 'BSS'
_BSS	ENDS
_DATA	SEGMENT  WORD PUBLIC 'DATA'
_DATA	ENDS
DGROUP	GROUP	CONST,	_BSS,	_DATA
	ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
PUBLIC  _polevl
PUBLIC  _p1evl
_DATA	SEGMENT
EXTRN	__chkstk:NEAR
EXTRN	__fac:NEAR
EXTRN	__fltused:NEAR
$T20001		DQ	0000000000H    ;	.0000000000000000
ans	DQ	0
ctrlw	DW	0
_DATA ENDS
_TEXT      SEGMENT
	PUBLIC	_polevl
_polevl	PROC NEAR
	push	bp
	mov	bp,sp
	mov	ax,12
	call	__chkstk
	push	si
	mov	si,[bp+12]
;	fstcw	ctrlw
;	fwait
;	mov	ax,ctrlw
;	or	ax,00100h
;	mov	ctrlw,ax
;	fldcw	ctrlw

	fldz
	fwait	
	mov	ax,[bp+14]
	inc	ax
	mov	[bp-12],ax
$D15:
	fmul	QWORD PTR [bp+4]
	add	si,8
	fwait
	fadd	QWORD PTR [si-8]
	fwait	
	dec	WORD PTR [bp-12]
	jne	$D15
	fstp	ans
;	fstcw	ctrlw
;	fwait
;	mov	ax,ctrlw
;	and	ax,0feffh
;	mov	ctrlw,ax
;	fldcw	ctrlw

	lea	ax, ans
	fwait	
	pop	si
	mov	sp,bp
	pop	bp
	ret	
_polevl	ENDP

	PUBLIC	_p1evl
_p1evl	PROC NEAR
	push	bp
	mov	bp,sp
	mov	ax,12
	call	__chkstk
	push	si

;	fstcw	ctrlw
;	fwait
;	mov	ax,ctrlw
;	or	ax,00100h
;	mov	ctrlw,ax
;	fldcw	ctrlw

	mov	si,[bp+12]
	fld	QWORD PTR [bp+4]
	add	si,8
	fadd	QWORD PTR [si-8]
	fwait	
	mov	ax,[bp+14]
	dec	ax
	mov	[bp-12],ax
$D26:
	fmul	QWORD PTR [bp+4]
	add	si,8
	fadd	QWORD PTR [si-8]
	fwait	
	dec	WORD PTR [bp-12]
	jne	$D26
	fstp	ans
	lea	ax, ans
;	fstcw	ctrlw
;	fwait
;	mov	ax,ctrlw
;	and	ax,0feffh
;	mov	ctrlw,ax
;	fldcw	ctrlw
	fwait	
	pop	si
	mov	sp,bp
	pop	bp
	ret	
_p1evl	ENDP

_TEXT	ENDS
END