Basic block instructions


The compiler.cfg.instructions vocab contains all instruction classes used for generating CFG:s (Call Flow Graphs).

All instructions are tuples prefixed with '##' and inheriting from the base class insn. Most instructions are coupled with a generic word in cpu.architecture which emits machine code for it. For example, %copy emits code for ##copy instructions.

Instruction classes for moving values around:
##copy

##parallel-copy

##peek

##reload

##replace

##replace-imm

##spill


Control flow:
##branch

##call

##jump

##no-tco

##phi

##return


Alien calls and FFI:
##alien-assembly

##alien-indirect

##alien-invoke

##box

##box-alien

##box-displaced-alien

##box-long-long

##callback-inputs

##callback-outputs

##unbox

##unbox-alien

##unbox-any-c-ptr

##unbox-long-long

alien-call-insn


Allocation and garbage collection:
##allot

##call-gc

##check-nursery-branch

##local-allot

##save-context

allocation-insn

gc-map

gc-map-insn

<gc-map> ( -- gc-map )


Comparison instructions:
##compare

##compare-imm

##compare-imm-branch

##compare-integer

##compare-integer-branch

##compare-integer-imm-branch

##test

##test-branch

##test-imm

##test-imm-branch


Constant loading:
##load-integer

##load-reference

##load-tagged


Floating point SIMD instructions:
##add-float

##div-float

##mul-float

##sub-float


Integer arithmetic and bit operations:
##add

##add-imm

##and

##and-imm

##fixnum-add

##fixnum-sub

##mul

##mul-imm

##neg

##not

##or

##or-imm

##sar

##sar-imm

##shl

##shl-imm

##shr

##shr-imm

##sub

##sub-imm

##xor

##xor-imm


Slot access:
##slot

##slot-imm

##set-slot

##set-slot-imm

##write-barrier


SIMD instructions
##add-vector

##add-sub-vector

##bit-count

##compare-float-ordered-branch

##div-vector

##horizontal-add-vector

##horizontal-sub-vector

##load-double

##load-vector

##mul-vector

##shuffle-vector-imm

##single>double-float

##store-memory-imm

##sub-vector

##vector>scalar


Stack height manipulation:
##inc