+#define BIT(x) (1ULL << (x))
+
+/* Flags for all opcodes */
+#define LIGHTREC_NO_DS BIT(0)
+#define LIGHTREC_SYNC BIT(1)
+
+/* Flags for LUI, ORI, ADDIU */
+#define LIGHTREC_MOVI BIT(2)
+
+/* Flags for load/store opcodes */
+#define LIGHTREC_SMC BIT(2)
+#define LIGHTREC_NO_INVALIDATE BIT(3)
+#define LIGHTREC_NO_MASK BIT(4)
+#define LIGHTREC_LOAD_DELAY BIT(5)
+
+/* I/O mode for load/store opcodes */
+#define LIGHTREC_IO_MODE_LSB 6
+#define LIGHTREC_IO_MODE(x) ((x) << LIGHTREC_IO_MODE_LSB)
+#define LIGHTREC_IO_UNKNOWN 0x0
+#define LIGHTREC_IO_DIRECT 0x1
+#define LIGHTREC_IO_HW 0x2
+#define LIGHTREC_IO_RAM 0x3
+#define LIGHTREC_IO_BIOS 0x4
+#define LIGHTREC_IO_SCRATCH 0x5
+#define LIGHTREC_IO_DIRECT_HW 0x6
+#define LIGHTREC_IO_MASK LIGHTREC_IO_MODE(0x7)
+#define LIGHTREC_FLAGS_GET_IO_MODE(x) \
+ (((x) & LIGHTREC_IO_MASK) >> LIGHTREC_IO_MODE_LSB)
+
+/* Flags for branches */
+#define LIGHTREC_EMULATE_BRANCH BIT(2)
+#define LIGHTREC_LOCAL_BRANCH BIT(3)
+
+/* Flags for div/mult opcodes */
+#define LIGHTREC_NO_LO BIT(2)
+#define LIGHTREC_NO_HI BIT(3)
+#define LIGHTREC_NO_DIV_CHECK BIT(4)
+
+#define LIGHTREC_REG_RS_LSB 26
+#define LIGHTREC_REG_RS(x) ((x) << LIGHTREC_REG_RS_LSB)
+#define LIGHTREC_REG_RS_MASK LIGHTREC_REG_RS(0x3)
+#define LIGHTREC_FLAGS_GET_RS(x) \
+ (((x) & LIGHTREC_REG_RS_MASK) >> LIGHTREC_REG_RS_LSB)
+
+#define LIGHTREC_REG_RT_LSB 28
+#define LIGHTREC_REG_RT(x) ((x) << LIGHTREC_REG_RT_LSB)
+#define LIGHTREC_REG_RT_MASK LIGHTREC_REG_RT(0x3)
+#define LIGHTREC_FLAGS_GET_RT(x) \
+ (((x) & LIGHTREC_REG_RT_MASK) >> LIGHTREC_REG_RT_LSB)
+
+#define LIGHTREC_REG_RD_LSB 30
+#define LIGHTREC_REG_RD(x) ((x) << LIGHTREC_REG_RD_LSB)
+#define LIGHTREC_REG_RD_MASK LIGHTREC_REG_RD(0x3)
+#define LIGHTREC_FLAGS_GET_RD(x) \
+ (((x) & LIGHTREC_REG_RD_MASK) >> LIGHTREC_REG_RD_LSB)
+
+#define LIGHTREC_REG_NOOP 0x0
+#define LIGHTREC_REG_UNLOAD 0x1
+#define LIGHTREC_REG_DISCARD 0x2
+#define LIGHTREC_REG_CLEAN 0x3