basewords.fs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. ( Base words implemented in assembler JCB 13:10 08/24/10)
  2. meta
  3. : noop T alu ;
  4. : + T+N d-1 alu ;
  5. : xor T^N d-1 alu ;
  6. : and T&N d-1 alu ;
  7. : or T|N d-1 alu ;
  8. : invert ~T alu ;
  9. : = N==T d-1 alu ;
  10. : < N<T d-1 alu ;
  11. : u< Nu<T d-1 alu ;
  12. : swap N T->N alu ;
  13. : dup T T->N d+1 alu ;
  14. : drop N d-1 alu ;
  15. : over N T->N d+1 alu ;
  16. : nip T d-1 alu ;
  17. : >r N T->R r+1 d-1 alu ;
  18. : r> rT T->N r-1 d+1 alu ;
  19. : r@ rT T->N d+1 alu ;
  20. : c@ T alu
  21. [T] alu ;
  22. : c! T N->[T] d-1 alu
  23. N d-1 alu ;
  24. : rshift N>>T d-1 alu ;
  25. : * N*T d-1 alu ;
  26. : swab swabT alu ;
  27. : 1- T-1 alu ;
  28. : exit return ;
  29. \ Elided words
  30. \ These words are supported by the hardware but are not
  31. \ part of ANS Forth. They are named after the word-pair
  32. \ that matches their effect The first word is one of
  33. \ 2dup, dup or over. Using these elided words instead of
  34. \ the pair saves one cycle and one instruction.
  35. : 2dupand T&N T->N d+1 alu ;
  36. : 2dup< N<T T->N d+1 alu ;
  37. : 2dup= N==T T->N d+1 alu ;
  38. : 2dup* N*T T->N d+1 alu ;
  39. : 2dupor T|N T->N d+1 alu ;
  40. : 2duprshift N>>T T->N d+1 alu ;
  41. : 2dup+ T+N T->N d+1 alu ;
  42. : 2dupu< Nu<T T->N d+1 alu ;
  43. : 2dupxor T^N T->N d+1 alu ;
  44. : dup>r T T->R r+1 alu ;
  45. : dupc@ T T->N d+1 alu
  46. [T] alu ;
  47. : dupswab swabT T->N d+1 alu ;
  48. : overand T&N alu ;
  49. : over> N<T alu ;
  50. : over= N==T alu ;
  51. : over* N*T alu ;
  52. : overor T|N alu ;
  53. : over+ T+N alu ;
  54. : overu> Nu<T alu ;
  55. : overxor T^N alu ;
  56. : module[ there [char] " parse preserve ;
  57. : ]module s" Compiled " type count type space there swap - . cr ;