mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-20 09:02:32 +00:00
Each ISA's hand-written ENCODING_TABLE (the single source of truth) now lives in a per-arch tablegen/ metaprogram that flattens it and serializes committed binary blobs; the library #loads those into @(rodata) at compile time rather than compiling a table body. No arch keeps encoding_table.odin or decoding_tables.odin -- only a generated tables.odin loader and tables/*.bin. * Two-stage, type-checked pipeline: tablegen Stage A emits human-readable generated Odin, which compiles and serializes the blobs in Stage B. * encode() goes through encoding_forms(m); decoders are unchanged apart from x86's flattened 2-D index. Decode tables are byte-identical to the old ones. * build.lua: a LuaJIT driver for the metaprograms, validations, and tests, with cross-platform gating and a clear report. * Docs refreshed; the obsolete forward-looking plan in cross_arch_design.md trimmed to what was actually built. * Attribution headers added to all rexcode source files; the generators emit them so generated files keep them.
58 lines
2.6 KiB
Odin
58 lines
2.6 KiB
Odin
// rexcode · Brendan Punsky (dotbmp@github), original author
|
|
|
|
package rexcode_ppc_vle
|
|
|
|
// =============================================================================
|
|
// PowerPC VLE Mnemonics
|
|
// =============================================================================
|
|
//
|
|
// 222 entries from binutils PPCVLE — 40 16-bit (se_*) + 178 32-bit (e_*).
|
|
// Used in embedded PowerPC e200 cores (automotive ECUs, STM SPC58x).
|
|
// LLVM 22 has no VLE support; all entries are documented expected_unknown.
|
|
|
|
Mnemonic :: enum u16 {
|
|
INVALID = 0,
|
|
|
|
// ---- 16-bit short (se_*) ----
|
|
SE_ILLEGAL, SE_ISYNC, SE_SC, SE_BLR, SE_BLRL, SE_BCTR,
|
|
SE_BCTRL, SE_RFI, SE_RFCI, SE_RFDI, SE_RFMCI, SE_RFGI,
|
|
SE_NOT, SE_NEG, SE_MFLR, SE_MTLR, SE_MFCTR, SE_MTCTR,
|
|
SE_EXTZB, SE_EXTSB, SE_EXTZH, SE_EXTSH, SE_MR, SE_MTAR,
|
|
SE_MFAR, SE_ADD, SE_MULLW, SE_SUB, SE_SUBF, SE_CMP,
|
|
SE_CMPL, SE_CMPH, SE_CMPHL, SE_SRW, SE_SRAW, SE_SLW,
|
|
SE_OR, SE_ANDC, SE_AND, SE_AND_DOT, SE_ADDI, SE_CMPLI,
|
|
SE_SUBI, SE_SUBI_DOT, SE_CMPI, SE_BMASKI, SE_ANDI, SE_NOP,
|
|
SE_LI, SE_BCLRI, SE_BGENI, SE_BSETI, SE_BTSTI, SE_SRWI,
|
|
SE_SRAWI, SE_SLWI, SE_LBZ, SE_STB, SE_LHZ, SE_STH,
|
|
SE_LWZ, SE_STW, SE_BGE, SE_BNL, SE_BLE, SE_BNG,
|
|
SE_BNE, SE_BNS, SE_BNU, SE_BF, SE_BLT, SE_BGT,
|
|
SE_BEQ, SE_BSO, SE_BUN, SE_BT, SE_BC, SE_B,
|
|
SE_BL,
|
|
|
|
// ---- 32-bit (e_*) ----
|
|
E_LBZU, E_LHAU, E_LHZU, E_LMW, E_LWZU, E_STBU,
|
|
E_STHU, E_STWU, E_STMW, E_LMVGPRW, E_LDMVGPRW, E_STMVGPRW,
|
|
E_LMVSPRW, E_LDMVSPRW, E_STMVSPRW, E_LMVSRRW, E_LDMVSRRW, E_STMVSRRW,
|
|
E_LMVCSRRW, E_LDMVCSRRW, E_STMVCSRRW, E_LMVDSRRW, E_LDMVDSRRW, E_STMVDSRRW,
|
|
E_LMVMCSRRW, E_STMVMCSRRW, E_ADD16I, E_LA, E_SUB16I, E_LBZ,
|
|
E_STB, E_LHA, E_LWZ, E_STW, E_LHZ, E_STH,
|
|
E_RLWIMI, E_INSLWI, E_INSRWI, E_ROTLWI, E_ROTRWI, E_CLRLWI,
|
|
E_CLRRWI, E_RLWINM, E_EXTLWI, E_EXTRWI, E_CLRLSLWI, E_CMPH,
|
|
E_SC, E_CMPHL, E_CRANDC, E_CRNAND, E_CRNOT, E_CRNOR,
|
|
E_CRCLR, E_CRXOR, E_MCRF, E_SLWI, E_SLWI_DOT, E_CRAND,
|
|
E_RLW, E_RLW_DOT, E_CRSET, E_CREQV, E_RLWI, E_RLWI_DOT,
|
|
E_CRORC, E_CRMOVE, E_CROR, E_SRWI, E_SRWI_DOT, E_BDNZ,
|
|
E_BDNZL, E_BDZ, E_BDZL, E_CMPI, E_CMPWI, E_CMPLI,
|
|
E_CMPLWI, E_ADDI, E_SUBI, E_ADDI_DOT, E_ADDIC, E_SUBIC,
|
|
E_ADDIC_DOT, E_SUBIC_DOT, E_MULLI, E_SUBFIC, E_SUBFIC_DOT, E_ANDI,
|
|
E_ANDI_DOT, E_NOP, E_ORI, E_ORI_DOT, E_XORI, E_XORI_DOT,
|
|
E_LIS, E_AND2IS_DOT, E_OR2IS, E_AND2I_DOT, E_OR2I, E_CMPHL16I,
|
|
E_CMPH16I, E_CMPL16I, E_MULL2I, E_CMP16I, E_SUB2IS, E_ADD2IS,
|
|
E_SUB2I_DOT, E_ADD2I_DOT, E_LI, E_B, E_BL, E_BGE,
|
|
E_BGEL, E_BNL, E_BNLL, E_BLT, E_BLTL, E_BGT,
|
|
E_BGTL, E_BLE, E_BLEL, E_BNG, E_BNGL, E_BNE,
|
|
E_BNEL, E_BEQ, E_BEQL, E_BSO, E_BSOL, E_BUN,
|
|
E_BUNL, E_BNS, E_BNSL, E_BNU, E_BNUL, E_BC,
|
|
E_BCL, E_BF, E_BFL, E_BT, E_BTL,
|
|
}
|