1 /* yForth? - Written by Luca Padovani (C) 1996/97
2 * ------------------------------------------------------------------------
3 * This software is FreeWare as long as it comes with this header in each
4 * source file, anyway you can use it or any part of it whatever
5 * you want. It comes without any warranty, so use it at your own risk.
6 * ------------------------------------------------------------------------
7 * Module name: double.c
8 * Abstract: double-number word set
16 /**************************************************************************/
17 /* WORDS ******************************************************************/
18 /**************************************************************************/
20 void _two_constant() {
21 register DCell d = GET_DCELL(sp);
23 create_definition(A_2CONSTANT);
24 compile_cell((Cell) d);
25 compile_cell((Cell) (d >> CellBits));
30 compile_cell((Cell) _do_literal);
31 compile_cell((Cell) sp[1]);
32 compile_cell((Cell) _do_literal);
33 compile_cell((Cell) sp[0]);
37 void _two_variable() {
38 create_definition(A_2VARIABLE);
45 register DCell d1 = GET_DCELL(sp + 2);
46 register DCell d2 = GET_DCELL(sp);
53 register DCell d1 = GET_DCELL(sp + 2);
54 register DCell d2 = GET_DCELL(sp);
61 register DCell u = GET_DCELL(sp);
62 register int usign = u < 0;
71 _number_sign_greater();
77 register Cell r = *sp++;
78 register DCell u = GET_DCELL(sp);
79 register int usign = u < 0;
80 if (usign && _base == 10) u = -u;
88 _number_sign_greater();
99 register DCell d = GET_DCELL(sp);
101 sp[0] = FFLAG(d < 0);
104 void _d_zero_equals() {
105 register DCell d = GET_DCELL(sp);
107 sp[0] = FFLAG(d == 0);
111 register DCell d = GET_DCELL(sp);
116 void _d_two_slash() {
117 register DCell d = GET_DCELL(sp);
122 void _d_less_than() {
123 register DCell d1 = GET_DCELL(sp + 2);
124 register DCell d2 = GET_DCELL(sp);
126 sp[0] = FFLAG(d1 < d2);
130 register DCell d1 = GET_DCELL(sp + 2);
131 register DCell d2 = GET_DCELL(sp);
133 sp[0] = FFLAG(d1 == d2);
137 register DCell d = GET_DCELL(sp);
143 register DCell d1 = GET_DCELL(sp + 2);
144 register DCell d2 = GET_DCELL(sp);
146 if (d2 > d1) PUT_DCELL(sp, d2);
150 register DCell d1 = GET_DCELL(sp + 2);
151 register DCell d2 = GET_DCELL(sp);
153 if (d2 < d1) PUT_DCELL(sp, d2);
157 register DCell d = -GET_DCELL(sp);
161 void _m_star_slash() {
162 register Cell n2 = *sp++;
163 register Cell n1 = *sp++;
164 register DCell d = GET_DCELL(sp);