1 ;; Native x86 GNU
/Linux Forth System
, Direct Threaded Code
4 ;; Copyright
(C
) 2020 Ketmar Dark
// Invisible Vector
6 ;; This
program is free software
: you can redistribute it and
/or modify
7 ;; it under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation
, version
3 of the License ONLY
.
10 ;; This
program is distributed in the hope that it will be useful
,
11 ;; but WITHOUT ANY WARRANTY
; without even the implied warranty of
12 ;; MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE
. See the
13 ;; GNU General Public License
for more details
.
15 ;; You should have received a copy of the GNU General Public License
16 ;; along with this
program. If not
, see
<http
://www
.gnu
.org
/licenses
/>.
18 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33 ;; with overflow clamping
45 ; overflow or negative
57 ; positive
, check
for positive overflow
70 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
71 code: UM* ( u0 u1 -- ud )
80 code: UM/MOD ( ud1 u1 -- umod ures )
94 code: UM/ ( ud1 u1 -- ures )
107 code: UMMOD ( ud1 u1 -- umod )
121 code: M* ( n0 n1 -- d )
130 code: M/MOD ( d1 n1 -- nmod nres )
144 code: M/ ( d1 n1 -- nres )
157 code: MMOD ( d1 n1 -- nmod )
171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
172 code: D2* ( d -- d*2 )
183 code: D2/ ( d -- d/2 )
194 code: D2U/ ( d1 -- d/2 )
205 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
206 code: DNEGATE ( d -- -d )
219 code: DABS ( d -- |d| )
235 code: DSGN ( d -- -1/0/1 )
252 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
253 code: D0= ( d -- flag )
266 code: D0!= ( d -- flag )
279 code: D0< ( d -- flag )
291 code: D0> ( d -- flag )
307 code: D0<= ( d -- flag )
325 code: D0>= ( d -- flag )
344 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
345 code: D+ ( d1 d2 -- d )
361 code: D- ( d1 d2 -- d )
378 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
379 code: D= ( d1 d2 -- flag )
398 code: D<> ( d1 d2 -- flag )
417 code: D< ( d1 d2 -- flag )
425 ;; d1
-d2
: d1
<d2
:C
; d1
>d2
:nc
433 code: D> ( d1 d2 -- flag )
449 code: DU< ( ud1 ud2 -- flag )
465 code: DU> ( ud1 ud2 -- flag )
481 code: DU<= ( ud1 ud2 -- flag )
496 code: DU>= ( ud1 ud2 -- flag )
512 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
513 : DMAX
( d1 d2
-- max
[d1
,d2
] )
514 2over
2over d
< if 2swap
2drop
endif
517 : DMIN
( d1 d2
-- min
[d1
,d2
] )
518 2over
2over d
> if 2swap
2drop
endif
521 : M
+ ( d1|ud1 n
-- d2|ud2
)
526 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
527 code: UDS* ( ud1 u --> ud2 )