1 ;; Native x86 GNU/Linux Forth System, Direct Threaded Code
3 ;; Copyright (C) 2020 Ketmar Dark // Invisible Vector
5 ;; This program is free software: you can redistribute it and/or modify
6 ;; it under the terms of the GNU General Public License as published by
7 ;; the Free Software Foundation, version 3 of the License ONLY.
9 ;; This program is distributed in the hope that it will be useful,
10 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ;; GNU General Public License for more details.
14 ;; You should have received a copy of the GNU General Public License
15 ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
18 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
19 urword_code
"BSWAP-WORD",bswap_word
21 ;; swap bytes of the low word
22 ;; high word is untouched
28 urword_code
"BSWAP-DWORD",bswap_dword
30 ;; swap all dword bytes
36 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37 urword_code
"CELLS",cells
38 ;; ( count -- count*4 )
43 urword_code
"+CELLS",addcells
44 ;; ( addr count -- addr+count*4 )
51 urword_code
"-CELLS",subcells
52 ;; ( addr count -- addr-count*4 )
60 urword_code
"CELL+",cellinc
61 ;; ( count -- count+4 )
66 urword_code
"CELL-",celldec
67 ;; ( count -- count-4 )
73 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
104 urword_code
"4-",4dec
110 urword_code
"8+",8inc
116 urword_code
"8-",8dec
123 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
124 urword_code
"NOT",not
134 urword_code
"NOTNOT",notnot
144 urword_code
"BITNOT",bitnot
150 urword_code
"AND",and
151 ;; ( n0 n1 -- n0&n1 )
159 ;; ( n0 n1 -- n0|n1 )
166 urword_code
"XOR",xor
167 ;; ( n0 n1 -- n0^n1 )
175 urword_code
"LOGAND",land
176 ;; ( n0 n1 -- n0&&n1 )
187 urword_code
"LOGOR",lor
188 ;; ( n0 n1 -- n0||n1 )
198 urword_code
"LSHIFT",lshift
199 ;; ( n0 n1 -- n0<<n1 )
203 ; assume that TOS is in ECX
212 urword_code
"RSHIFT",rshift
213 ;; ( n0 n1 -- n0>>n1 )
217 ; assume that TOS is in ECX
226 urword_code
"ARSHIFT",arshift
227 ;; ( n0 n1 -- n0>>n1 )
231 ; assume that TOS is in ECX
243 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
244 urword_code
"LROTATE",lrotate
245 ;; ( n0 n1 -- n0 rol n1 )
253 urword_code
"RROTATE",rrotate
254 ;; ( n0 n1 -- n0 ror n1 )
262 urword_code
"LROTATE-WORD",lrotate_word
263 ;; ( n0 n1 -- n0 rol n1 )
271 urword_code
"RROTATE-WORD",rrotate_word
272 ;; ( n0 n1 -- n0 ror n1 )
280 urword_code
"LROTATE-BYTE",lrotate_byte
281 ;; ( n0 n1 -- n0 rol n1 )
289 urword_code
"RROTATE-BYTE",rrotate_byte
290 ;; ( n0 n1 -- n0 ror n1 )
299 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
301 ;; ( n0 n1 -- n0+n1 )
308 ;; ( n0 n1 -- n0-n1 )
318 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
319 urword_code
"2*",2imul
325 urword_code
"2/",2idiv
332 urword_code
"2U*",2umul
338 urword_code
"2U/",2udiv
345 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
346 urword_code
"NEGATE",negate
352 urword_code
"ABS",abs
362 urword_code
"UMIN",umin
372 urword_code
"UMAX",umax
382 urword_code
"MIN",min
392 urword_code
"MAX",max
403 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
404 urword_code
"C>S",c2s
410 urword_code
"C>U",c2u
416 urword_code
"S>C",s2c
434 urword_code
"U>C",u2c