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
|
; Zilog eZ80 ANSI C Compiler Release 3.4
; -optsize -nomodsect -peephole -globalopt -localcse
; -const=ROM
FILE "..\FLOOR.C"
.assume ADL=1
SEGMENT CODE
; 1 /************************************************************************/
; 2 /* */
; 3 /* Copyright (C) 2000-2008 Zilog, Inc. */
; 4 /* */
; 5 /* San Jose, California */
; 6 /* */
; 7 /************************************************************************/
; 8 #include <math.h>
; 9
; 10 double floor(double d) {
_floor:
LD HL,-4
CALL __frameset
; 11 double fraction;
; 12
; 13 if (d<0.0) {
LD HL,(IX+6)
LD E,(IX+9)
LD BC,0
XOR A,A
CALL __fcmp
JP P,L_3
; 14 d = -d;
LD BC,(IX+6)
LD A,(IX+9)
CALL __fneg
LD (IX+6),BC
LD (IX+9),A
; 15 fraction = modf(d, (double *)&d);
PEA IX+6
LD C,(IX+9)
LD B,0
PUSH BC
LD BC,(IX+6)
PUSH BC
CALL _modf
POP BC
POP BC
POP BC
LD (IX+-4),HL
LD (IX+-1),E
; 16 if (fraction != 0.0)
LD HL,(IX+-4)
LD E,(IX+-1)
LD BC,0
XOR A,A
CALL __fcmp
JR Z,L_1
; 17 d += 1;
LD HL,8388608
LD E,63
LD BC,(IX+6)
LD A,(IX+9)
CALL __fadd
LD (IX+6),BC
LD (IX+9),A
L_1:
; 18 d = -d;
LD BC,(IX+6)
LD A,(IX+9)
CALL __fneg
LD (IX+6),BC
LD (IX+9),A
; 19 } else {
JR L_4
L_3:
; 20 fraction = modf(d, (double *)&d);
PEA IX+6
LD C,(IX+9)
LD B,0
PUSH BC
LD BC,(IX+6)
PUSH BC
CALL _modf
POP BC
POP BC
POP BC
LD (IX+-4),HL
LD (IX+-1),E
; 21 }
L_4:
; 22 return(d);
LD HL,(IX+6)
LD E,(IX+9)
; 23 }
LD SP,IX
POP IX
RET
;**************************** _floor ***************************
;Name Addr/Register Size Type
;_modf IMPORT ----- function
;fraction IX-4 4 variable
;d IX+6 4 parameter
; Stack Frame Size: 16 (bytes)
; Spill Code: 0 (instruction)
XREF _modf:ROM
XREF __fadd:ROM
XREF __fneg:ROM
XREF __fcmp:ROM
XREF __frameset:ROM
XDEF _floor
END
|