Instruction Set Reference
=========================

  NOP /* No operation */

Privileged Instructions
-----------------------

  EI  /* Enable interrupts (privileged)  */
  DI  /* Disable interrupts (privileged) */
  SKEP %reg /* Set kernel entry point. */
  TLBADD %virt, %phys, %flags /* Add entry to TLB */
  TLBRM %virt /* Remove entry corresponding to a given virtual address. */
  TLBFLUSH /* Flush all TLB entries */
  JMPRU %reg /* Jump to location in a register and switch to user mode. */
  RETI /* Return from interrupt (Restore shadow regs/PC, threads) */
  HALT /* Stop CPU until next interrupt. */

Memory Loads/Stores
-------------------

  ST %reg, %reg, #imm /* Store reg to reg+imm */
  LD %reg, %reg, #imm /* Load reg from reg+imm */

Predicate Manipulation
----------------------

  ANDP @preg, @preg, @preg
  ORP @preg, @preg, @preg
  XORP @preg, @preg, @preg
  NOTP @preg, @preg

Value Tests
-----------

  RTOP @preg, %reg  /* Register to predicate. Same as ISZERO => NOTP */
  ISNEG @preg, %reg
  ISZERO @preg, %reg

Immediate Integer Arithmetic/Logic
----------------------------------

  LDI %reg, #IMM /* Load immediate. */
  ADDI %reg, %reg, #IMM /* Add immediate */
  SUBI %reg, %reg, #IMM /* Subtract immediate */
  MULI %reg, %reg, #IMM /* Multiply immediate */
  DIVI %reg, %reg, #IMM /* Divide immediate */
  MODI %reg, %reg, #IMM /* Modulus immediate */
  SHLI %reg, %reg, #IMM /* Shift left immediate */
  SHRI %reg, %reg, #IMM /* Shift right immediate */
  ANDI %reg, %reg, #IMM /* And immediate */
  ORI %reg, %reg, #IMM /* Or immediate */
  XORI %reg, %reg, #IMM /* Xor immediate */

Register Integer Arithmetic/Logic
---------------------------------

  ADD %reg, %reg, %reg /* Add */
  SUB %reg, %reg, %reg /* Subtract */
  MUL %reg, %reg, %reg /* Multiply */
  DIV %reg, %reg, %reg /* Divide */
  MOD %reg, %reg, %reg /* Modulus */
  SHL %reg, %reg, %reg /* Shift left */
  SHR %reg, %reg, %reg /* Shift right */
  AND %reg, %reg, %reg /* Bitwise and */
  OR %reg, %reg, %reg /* Bitwise or */
  XOR %reg, %reg, %reg /* Bitwise xor */
  NEG %reg, %reg /* Negate */
  NOT %reg, %reg /* Bitwise invert */

Floating Point Arithmetic
-------------------------

  ITOF %reg, %reg       /* Integer to floating point. */
  FTOI %reg, %reg       /* Floating point to integer, truncate. */
  FNEG %reg, %reg       /* Negate floating point number. */
  FADD %reg, %reg, %reg /* Add, full precision. */
  FSUB %reg, %reg, %reg /* Subtract, full precision. */
  FMUL %reg, %reg, %reg /* Multiply, full precision. */ 
  FDIV %reg, %reg, %reg /* Divide, full precision. */

Control Flow
------------

  JMPI #IMM       /* Jump to immediate */
  JMPR %reg       /* Jump indirect (to register) */
  JALI %reg, #IMM /* Jump and link immediate */
  JALR %reg, %reg /* Jump and link indirect */

SIMD Control
------------

  CLONE %reg /* Clone register state in to thread %reg */
  JALIS %reg, %rN, #IMM /* Jump and link immediate, spawning cloned threads. */
  JALRS %rL, %rL, %rN /* Jump and link indirect, spawning clowned threads. */
  JMPRT %reg  /* Jump to register, terminating cloned threads. */

Other
-----

  TRAP /* Program-generated interrupt. */
