Skip to content

Source: moonlive_emit.h

moonlive_emit

A neutral declaration here, and the implementation per instruction set behind the platform boundary.

Classes

Name Description
SpillDetail
RegBudget

SpillDetail

struct SpillDetail
src/core/moonlive/moonlive_emit.h:47

Public Attributes

uint8_t guard = 0

uint8_t avail = 0

uint8_t temps = 0

uint8_t vregs = 0

uint8_t slots = 0

uint8_t spilled = 0

RegBudget

struct RegBudget
src/core/moonlive/moonlive_emit.h:51

Public Attributes

uint8_t regs = 0

uint8_t reserved = 0 : Registers the backend keeps for the inline ops this program contains.

uint8_t slots = 0

Public Methods

inline uint8_t allocatable() const : Registers left for the allocator once the backend's inline scratch is taken out.

More info

The host-JIT macro

It is defined per platform, so the architecture check stays behind the boundary and this header stays neutral. It exists for the test harness alone, and no shipping code branches on it: a build with no backend degrades at run time, reporting the failure and rendering dark. A test that calls render cannot be compiled there at all, which is why it is a macro rather than a constant. One answers the program, the other answers the build.