SOD64 - a 64bit Stack Oriented Design Processor

I have ported L.C. Benschop's Stack Oriented Design processor (1994) to iForth, and extended it so that it can generate 64-bit Forths.
SOD is a very elegant design. Its opcodes are 5 bit long, so 12 of them fit in a single 64 bit CELL. Three bits in the CELL are used to signify RETURN, CALL, LITERAL or packed instructions.
SOD64 needs a virtual machine to run. I have written one in 32bit iForth. This means SOD64 executes on 32bit Linux and Windows. The image files on both platforms are bit-for-bit the same (like 4th). You could write an LSE64 in it :-)
As you can see, doubles in SOD64 are 128 bits wide:
-1 -1 1 RSHIFT D. 170141183460469231731687303715884105727 OK
SOD64 can metacompile and extend itself. However, because it needs a virtual machine, you need a 32bit Forth to host it.
I may feel inspired to port Lennart's C engine over to Linux. In that case SOD64 would become a standalone 64bit Forth that can can generate efficient and small (20 K) 64-bit executables. Windows64 may be a problem though (I don't have that platform).
SOD64 is a quite complete ANS Forth with some good utilities, as you can see below. There is no floating-point (yet), though.
-marcel
--- ------------------ FORTH> sod64 forth.img 20160 bytes image read Welcome to Forth
SEE CR $00000440 $CFE8EF7F 13 1 1 + 32 SPECIAL 10 1 1 + 32 SPECIAL ; OK
SEE WORDS $000042E8 $A09D3FFF 7192 7256 @ 1 NEGATE + 1 1 + 1 + LSHIFT $00004300 $000039D1 + @ @ $00004308 $00000031 DUP $00004310 $0000433A JZ $00004338 $00004318 $00000031 DUP $00004320 $000042B0 CALL $000042B0 $00004328 $0387413D 8 NEGATE + @ 0 $00004330 $0000430A JZ $00004308 $00004338 $00000029 DROP ; OK
0 100 DUMP 00000000: 00 00 00 00 00 00 3A 88 00 00 00 00 00 00 39 B0 ......:.......9 00000010: 00 00 00 00 00 00 00 00 A4 4E 4F 4F 50 00 00 00 ........NOOP... 00000020: 80 00 00 00 00 00 00 01 00 00 00 00 00 00 00 18 ................ 00000030: A4 53 57 41 50 00 00 00 80 00 00 00 00 00 00 03 SWAP........... 00000040: 00 00 00 00 00 00 00 30 A3 52 4F 54 00 00 00 00 .......0ROT.... 00000050: 80 00 00 00 00 00 00 05 00 00 00 00 00 00 00 48 ...............H 00000060: A2 30 3D 00 00 00 00 00 80 00 00 00 00 00 00 07 0=............. OK
-1 -1 1 RSHIFT D. 170141183460469231731687303715884105727 OK
CR WORDS SAVE-SYSTEM SEE IDIS DO_SEE seers SDO_SPECIAL SDO_LIT SDO_8 SDO_1 SDO_0 SDO_R> SDO_R@ SDO_OVER SDO_DUP SDO_!A SDO_C!A SDO_>R SDO_DROP SDO_SCAN1 SDO_+CY SDO_UM/MOD SDO_RSHIFT SDO_LSHIFT SDO_< SDO_U< SDO_XOR SDO_OR SDO_AND SDO_+ SDO_@ SDO_C@ SD O_UM* SDO_NEGATE SDO_0= SDO_ROT SDO_SWAP SDO_NOOP H. ir ip cellmask WORDS ID. .S DUMP DL VOCABULARY ONLY ROOT-WORDLIST FORTH DEFINITIONS WORDLIST PREVIOUS ALSO SET-ORDER GET-ORDER PAGE CLS .ELAPSED TIMER-RESET NIP -TRAILING WITHIN BOUNDS 0<<= THROW M: COMPARE \G COLD WARM QUIT INCLUDED INCLUDE-FILE INCLUDE-POINTER INCLUDE-BUFFER EVALUATE INTERPRET ?STACK DOES> (;CODE) >BODY \ ( IMMEDIATE POSTPONE ABORT ABORT" S" ." RECURSE +LOOP LOOP RESOLVE-LEAVE LEAVE ?DO DO [CHAR] CHAR ['] ' POCKET REPEAT WHILE ELSE THEN IF UNTIL BEGIN : (POSTPONE) ; ?CSP !CSP 'LEAVE CSP COMPILE, EXPAND-MACRO LITERAL INSERT-OPCODE CODEFLUSH OPSHIFT OPLOC [ ] STATE CONSTANT VARIABLE CREATE REVEAL HEADER NAME> >NAME ALIGN C, , ALLOT (ABORT") NUMBER? CONVERT >NUMBER DIGIT? FIND SEARCH-WORDLIST NAME>BUF CURRENT #ORDER CONTEXT LAST FORTH-WORDLIST NAMEBUF WORD PLACE PARSE SKIP SCAN REFILL SOURCE-ID SOURCE QUERY EXPECT #SRC SRC SID >IN #TIB SPAN TIB ACCEPT FILE-SIZE SYSTEM FILE-POSITION REPOSITION-FILE DELETE-FILE READ-FILE WRITE-FILE READ-LINE WRITE-LINE CLOSE-FILE CREATE-FILE OPEN-FILE OSCALL BIN R/W W/O R/O 2SWAP 2OVER FILL MOVE ROLL CMOVE> CMOVE . U. D. #> <# SIGN #S # HOLD MU/MOD PAD HERE SPACES SPACE HEX DECIMAL DPL HLD DP BASE EXECUTE EXIT MOD / /MOD S>D */ */MOD * M* FM/MOD SM/REM DABS ABS DNEGATE MAX MIN ?DUP 2DROP 2DUP 2! D+ 2@ +! CELL- CELLS CELL+ CHAR- CHARS CHAR+ 2/ 2* INVERT 1- 1+ ON OFF ! C! PICK BL TRUE FALSE (S") (.") ALIGNED TYPE COUNT -1 (+LOOP) (LOOP) UNLOOP (LEAVE) J I (?DO) (DO) DEPTH RP! RP@ SP! SP@ R0 S0 CR BYE KEY EMIT U> 0> >
RSHIFT LSHIFT < U< XOR OR AND + @ C@ UM* NEGATE 0= ROT SWAP NOOP OK
22 33 44 .S 22 33 44 OK . . . 44 33 22 OK
1 CONSTANT #times OK #8192 CONSTANT size OK OK CREATE flags size ALLOT OK OK : DO-PRIME flags size 1 FILL 0 size 0 DO I flags + C@ IF I 2* 3 + DUP I + BEGIN DUP size U< WHILE 0 OVER flags + C! OVER + REPEAT 2DROP 1+ THEN LOOP ; OK OK : PRIMES CR #times . ." iterations." TIMER-RESET 0 #times 0 DO DROP DO-PRIME LOOP CR . ." primes found, " .ELAPSED ; OK PRIMES 1 iterations. 1899 primes found, 0.035 seconds elapsed. OK
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Marcel Hendrix wrote:

In other words, thanks to Marcel Hendrix et al., expect 64-bit Forth supercomputers for use in AI and robotics.
Meanwhile the AI User Manual is filling up with links catalogued at http://mentifex.virtualentity.com/aiumprep.html and embedded in the http://mentifex.virtualentity.com/m4thuser.html User Manual (q.v.).
Cheers,
Arthur
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Polytechforum.com is a website by engineers for engineers. It is not affiliated with any of manufacturers or vendors discussed here. All logos and trade names are the property of their respective owners.