A primitive is a sequence of machine code instructions invoked via a call to subroutine, and indirect jump or a doubly indirect jump.
A primitive reached via a jump finishes by jumping back to a threaded code interpreter for the VM.
A secondary is a sequence of threaded code “opcodes,” possibly intermixed with in-line data. It is typically a subroutine defined in the emulated language. Its opcodes are pointers to primitives, including call instructions for secondaries.