mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
add operand count for expression opcodes
This commit is contained in:
@@ -386,6 +386,21 @@ dw_pick_default_lower_bound(DW_Language lang)
|
||||
return lower_bound;
|
||||
}
|
||||
|
||||
internal U64
|
||||
dw_operand_count_from_expr_op(DW_ExprOp op)
|
||||
{
|
||||
switch (op) {
|
||||
#define X(_N, _ID, _OPER_COUNT) case _ID: return _OPER_COUNT;
|
||||
DW_Expr_V3_XList(X)
|
||||
DW_Expr_V4_XList(X)
|
||||
DW_Expr_V5_XList(X)
|
||||
DW_Expr_GNU_XList(X)
|
||||
#undef X
|
||||
default: { NotImplemented; } break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String <=> Enum
|
||||
|
||||
|
||||
+180
-178
@@ -1392,193 +1392,193 @@ enum
|
||||
// Expression Opcodes
|
||||
|
||||
#define DW_Expr_V3_XList(X) \
|
||||
X(Null, 0x00) \
|
||||
X(Addr, 0x03) \
|
||||
X(Deref, 0x06) \
|
||||
X(Const1U, 0x08) \
|
||||
X(Const1S, 0x09) \
|
||||
X(Const2U, 0x0a) \
|
||||
X(Const2S, 0x0b) \
|
||||
X(Const4U, 0x0c) \
|
||||
X(Const4S, 0x0d) \
|
||||
X(Const8U, 0x0e) \
|
||||
X(Const8S, 0x0f) \
|
||||
X(ConstU, 0x10) \
|
||||
X(ConstS, 0x11) \
|
||||
X(Dup, 0x12) \
|
||||
X(Drop, 0x13) \
|
||||
X(Over, 0x14) \
|
||||
X(Pick, 0x15) \
|
||||
X(Swap, 0x16) \
|
||||
X(Rot, 0x17) \
|
||||
X(XDeref, 0x18) \
|
||||
X(Abs, 0x19) \
|
||||
X(And, 0x1a) \
|
||||
X(Div, 0x1b) \
|
||||
X(Minus, 0x1c) \
|
||||
X(Mod, 0x1d) \
|
||||
X(Mul, 0x1e) \
|
||||
X(Neg, 0x1f) \
|
||||
X(Not, 0x20) \
|
||||
X(Or, 0x21) \
|
||||
X(Plus, 0x22) \
|
||||
X(PlusUConst, 0x23) \
|
||||
X(Shl, 0x24) \
|
||||
X(Shr, 0x25) \
|
||||
X(Shra, 0x26) \
|
||||
X(Xor, 0x27) \
|
||||
X(Skip, 0x2f) \
|
||||
X(Bra, 0x28) \
|
||||
X(Eq, 0x29) \
|
||||
X(Ge, 0x2a) \
|
||||
X(Gt, 0x2b) \
|
||||
X(Le, 0x2c) \
|
||||
X(Lt, 0x2d) \
|
||||
X(Ne, 0x2e) \
|
||||
X(Lit0, 0x30) \
|
||||
X(Lit1, 0x31) \
|
||||
X(Lit2, 0x32) \
|
||||
X(Lit3, 0x33) \
|
||||
X(Lit4, 0x34) \
|
||||
X(Lit5, 0x35) \
|
||||
X(Lit6, 0x36) \
|
||||
X(Lit7, 0x37) \
|
||||
X(Lit8, 0x38) \
|
||||
X(Lit9, 0x39) \
|
||||
X(Lit10, 0x3a) \
|
||||
X(Lit11, 0x3b) \
|
||||
X(Lit12, 0x3c) \
|
||||
X(Lit13, 0x3d) \
|
||||
X(Lit14, 0x3e) \
|
||||
X(Lit15, 0x3f) \
|
||||
X(Lit16, 0x40) \
|
||||
X(Lit17, 0x41) \
|
||||
X(Lit18, 0x42) \
|
||||
X(Lit19, 0x43) \
|
||||
X(Lit20, 0x44) \
|
||||
X(Lit21, 0x45) \
|
||||
X(Lit22, 0x46) \
|
||||
X(Lit23, 0x47) \
|
||||
X(Lit24, 0x48) \
|
||||
X(Lit25, 0x49) \
|
||||
X(Lit26, 0x4a) \
|
||||
X(Lit27, 0x4b) \
|
||||
X(Lit28, 0x4c) \
|
||||
X(Lit29, 0x4d) \
|
||||
X(Lit30, 0x4e) \
|
||||
X(Lit31, 0x4f) \
|
||||
X(Reg0, 0x50) \
|
||||
X(Reg1, 0x51) \
|
||||
X(Reg2, 0x52) \
|
||||
X(Reg3, 0x53) \
|
||||
X(Reg4, 0x54) \
|
||||
X(Reg5, 0x55) \
|
||||
X(Reg6, 0x56) \
|
||||
X(Reg7, 0x57) \
|
||||
X(Reg8, 0x58) \
|
||||
X(Reg9, 0x59) \
|
||||
X(Reg10, 0x5a) \
|
||||
X(Reg11, 0x5b) \
|
||||
X(Reg12, 0x5c) \
|
||||
X(Reg13, 0x5d) \
|
||||
X(Reg14, 0x5e) \
|
||||
X(Reg15, 0x5f) \
|
||||
X(Reg16, 0x60) \
|
||||
X(Reg17, 0x61) \
|
||||
X(Reg18, 0x62) \
|
||||
X(Reg19, 0x63) \
|
||||
X(Reg20, 0x64) \
|
||||
X(Reg21, 0x65) \
|
||||
X(Reg22, 0x66) \
|
||||
X(Reg23, 0x67) \
|
||||
X(Reg24, 0x68) \
|
||||
X(Reg25, 0x69) \
|
||||
X(Reg26, 0x6a) \
|
||||
X(Reg27, 0x6b) \
|
||||
X(Reg28, 0x6c) \
|
||||
X(Reg29, 0x6d) \
|
||||
X(Reg30, 0x6e) \
|
||||
X(Reg31, 0x6f) \
|
||||
X(BReg0, 0x70) \
|
||||
X(BReg1, 0x71) \
|
||||
X(BReg2, 0x72) \
|
||||
X(BReg3, 0x73) \
|
||||
X(BReg4, 0x74) \
|
||||
X(BReg5, 0x75) \
|
||||
X(BReg6, 0x76) \
|
||||
X(BReg7, 0x77) \
|
||||
X(BReg8, 0x78) \
|
||||
X(BReg9, 0x79) \
|
||||
X(BReg10, 0x7a) \
|
||||
X(BReg11, 0x7b) \
|
||||
X(BReg12, 0x7c) \
|
||||
X(BReg13, 0x7d) \
|
||||
X(BReg14, 0x7e) \
|
||||
X(BReg15, 0x7f) \
|
||||
X(BReg16, 0x80) \
|
||||
X(BReg17, 0x81) \
|
||||
X(BReg18, 0x82) \
|
||||
X(BReg19, 0x83) \
|
||||
X(BReg20, 0x84) \
|
||||
X(BReg21, 0x85) \
|
||||
X(BReg22, 0x86) \
|
||||
X(BReg23, 0x87) \
|
||||
X(BReg24, 0x88) \
|
||||
X(BReg25, 0x89) \
|
||||
X(BReg26, 0x8a) \
|
||||
X(BReg27, 0x8b) \
|
||||
X(BReg28, 0x8c) \
|
||||
X(BReg29, 0x8d) \
|
||||
X(BReg30, 0x8e) \
|
||||
X(BReg31, 0x8f) \
|
||||
X(RegX, 0x90) \
|
||||
X(FBReg, 0x91) \
|
||||
X(BRegX, 0x92) \
|
||||
X(Piece, 0x93) \
|
||||
X(DerefSize, 0x94) \
|
||||
X(XDerefSize, 0x95) \
|
||||
X(Nop, 0x96) \
|
||||
X(PushObjectAddress, 0x97) \
|
||||
X(Call2, 0x98) \
|
||||
X(Call4, 0x99) \
|
||||
X(CallRef, 0x9a) \
|
||||
X(FormTlsAddress, 0x9b) \
|
||||
X(CallFrameCfa, 0x9c) \
|
||||
X(BitPiece, 0x9d)
|
||||
X(Null, 0x00, 0) \
|
||||
X(Addr, 0x03, 1) \
|
||||
X(Deref, 0x06, 0) \
|
||||
X(Const1U, 0x08, 1) \
|
||||
X(Const1S, 0x09, 1) \
|
||||
X(Const2U, 0x0a, 1) \
|
||||
X(Const2S, 0x0b, 1) \
|
||||
X(Const4U, 0x0c, 1) \
|
||||
X(Const4S, 0x0d, 1) \
|
||||
X(Const8U, 0x0e, 1) \
|
||||
X(Const8S, 0x0f, 1) \
|
||||
X(ConstU, 0x10, 1) \
|
||||
X(ConstS, 0x11, 1) \
|
||||
X(Dup, 0x12, 0) \
|
||||
X(Drop, 0x13, 0) \
|
||||
X(Over, 0x14, 0) \
|
||||
X(Pick, 0x15, 1) \
|
||||
X(Swap, 0x16, 0) \
|
||||
X(Rot, 0x17, 0) \
|
||||
X(XDeref, 0x18, 0) \
|
||||
X(Abs, 0x19, 0) \
|
||||
X(And, 0x1a, 0) \
|
||||
X(Div, 0x1b, 0) \
|
||||
X(Minus, 0x1c, 0) \
|
||||
X(Mod, 0x1d, 0) \
|
||||
X(Mul, 0x1e, 0) \
|
||||
X(Neg, 0x1f, 0) \
|
||||
X(Not, 0x20, 0) \
|
||||
X(Or, 0x21, 0) \
|
||||
X(Plus, 0x22, 0) \
|
||||
X(PlusUConst, 0x23, 1) \
|
||||
X(Shl, 0x24, 0) \
|
||||
X(Shr, 0x25, 0) \
|
||||
X(Shra, 0x26, 0) \
|
||||
X(Xor, 0x27, 0) \
|
||||
X(Bra, 0x28, 1) \
|
||||
X(Eq, 0x29, 0) \
|
||||
X(Ge, 0x2a, 0) \
|
||||
X(Gt, 0x2b, 0) \
|
||||
X(Le, 0x2c, 0) \
|
||||
X(Lt, 0x2d, 0) \
|
||||
X(Ne, 0x2e, 0) \
|
||||
X(Skip, 0x2f, 1) \
|
||||
X(Lit0, 0x30, 0) \
|
||||
X(Lit1, 0x31, 0) \
|
||||
X(Lit2, 0x32, 0) \
|
||||
X(Lit3, 0x33, 0) \
|
||||
X(Lit4, 0x34, 0) \
|
||||
X(Lit5, 0x35, 0) \
|
||||
X(Lit6, 0x36, 0) \
|
||||
X(Lit7, 0x37, 0) \
|
||||
X(Lit8, 0x38, 0) \
|
||||
X(Lit9, 0x39, 0) \
|
||||
X(Lit10, 0x3a, 0) \
|
||||
X(Lit11, 0x3b, 0) \
|
||||
X(Lit12, 0x3c, 0) \
|
||||
X(Lit13, 0x3d, 0) \
|
||||
X(Lit14, 0x3e, 0) \
|
||||
X(Lit15, 0x3f, 0) \
|
||||
X(Lit16, 0x40, 0) \
|
||||
X(Lit17, 0x41, 0) \
|
||||
X(Lit18, 0x42, 0) \
|
||||
X(Lit19, 0x43, 0) \
|
||||
X(Lit20, 0x44, 0) \
|
||||
X(Lit21, 0x45, 0) \
|
||||
X(Lit22, 0x46, 0) \
|
||||
X(Lit23, 0x47, 0) \
|
||||
X(Lit24, 0x48, 0) \
|
||||
X(Lit25, 0x49, 0) \
|
||||
X(Lit26, 0x4a, 0) \
|
||||
X(Lit27, 0x4b, 0) \
|
||||
X(Lit28, 0x4c, 0) \
|
||||
X(Lit29, 0x4d, 0) \
|
||||
X(Lit30, 0x4e, 0) \
|
||||
X(Lit31, 0x4f, 0) \
|
||||
X(Reg0, 0x50, 0) \
|
||||
X(Reg1, 0x51, 0) \
|
||||
X(Reg2, 0x52, 0) \
|
||||
X(Reg3, 0x53, 0) \
|
||||
X(Reg4, 0x54, 0) \
|
||||
X(Reg5, 0x55, 0) \
|
||||
X(Reg6, 0x56, 0) \
|
||||
X(Reg7, 0x57, 0) \
|
||||
X(Reg8, 0x58, 0) \
|
||||
X(Reg9, 0x59, 0) \
|
||||
X(Reg10, 0x5a, 0) \
|
||||
X(Reg11, 0x5b, 0) \
|
||||
X(Reg12, 0x5c, 0) \
|
||||
X(Reg13, 0x5d, 0) \
|
||||
X(Reg14, 0x5e, 0) \
|
||||
X(Reg15, 0x5f, 0) \
|
||||
X(Reg16, 0x60, 0) \
|
||||
X(Reg17, 0x61, 0) \
|
||||
X(Reg18, 0x62, 0) \
|
||||
X(Reg19, 0x63, 0) \
|
||||
X(Reg20, 0x64, 0) \
|
||||
X(Reg21, 0x65, 0) \
|
||||
X(Reg22, 0x66, 0) \
|
||||
X(Reg23, 0x67, 0) \
|
||||
X(Reg24, 0x68, 0) \
|
||||
X(Reg25, 0x69, 0) \
|
||||
X(Reg26, 0x6a, 0) \
|
||||
X(Reg27, 0x6b, 0) \
|
||||
X(Reg28, 0x6c, 0) \
|
||||
X(Reg29, 0x6d, 0) \
|
||||
X(Reg30, 0x6e, 0) \
|
||||
X(Reg31, 0x6f, 0) \
|
||||
X(BReg0, 0x70, 1) \
|
||||
X(BReg1, 0x71, 1) \
|
||||
X(BReg2, 0x72, 1) \
|
||||
X(BReg3, 0x73, 1) \
|
||||
X(BReg4, 0x74, 1) \
|
||||
X(BReg5, 0x75, 1) \
|
||||
X(BReg6, 0x76, 1) \
|
||||
X(BReg7, 0x77, 1) \
|
||||
X(BReg8, 0x78, 1) \
|
||||
X(BReg9, 0x79, 1) \
|
||||
X(BReg10, 0x7a, 1) \
|
||||
X(BReg11, 0x7b, 1) \
|
||||
X(BReg12, 0x7c, 1) \
|
||||
X(BReg13, 0x7d, 1) \
|
||||
X(BReg14, 0x7e, 1) \
|
||||
X(BReg15, 0x7f, 1) \
|
||||
X(BReg16, 0x80, 1) \
|
||||
X(BReg17, 0x81, 1) \
|
||||
X(BReg18, 0x82, 1) \
|
||||
X(BReg19, 0x83, 1) \
|
||||
X(BReg20, 0x84, 1) \
|
||||
X(BReg21, 0x85, 1) \
|
||||
X(BReg22, 0x86, 1) \
|
||||
X(BReg23, 0x87, 1) \
|
||||
X(BReg24, 0x88, 1) \
|
||||
X(BReg25, 0x89, 1) \
|
||||
X(BReg26, 0x8a, 1) \
|
||||
X(BReg27, 0x8b, 1) \
|
||||
X(BReg28, 0x8c, 1) \
|
||||
X(BReg29, 0x8d, 1) \
|
||||
X(BReg30, 0x8e, 1) \
|
||||
X(BReg31, 0x8f, 1) \
|
||||
X(RegX, 0x90, 1) \
|
||||
X(FBReg, 0x91, 1) \
|
||||
X(BRegX, 0x92, 2) \
|
||||
X(Piece, 0x93, 1) \
|
||||
X(DerefSize, 0x94, 1) \
|
||||
X(XDerefSize, 0x95, 1) \
|
||||
X(Nop, 0x96, 0) \
|
||||
X(PushObjectAddress, 0x97, 0) \
|
||||
X(Call2, 0x98, 1) \
|
||||
X(Call4, 0x99, 1) \
|
||||
X(CallRef, 0x9a, 1) \
|
||||
X(FormTlsAddress, 0x9b, 0) \
|
||||
X(CallFrameCfa, 0x9c, 0) \
|
||||
X(BitPiece, 0x9d, 2)
|
||||
|
||||
#define DW_Expr_V4_XList(X) \
|
||||
X(ImplicitValue, 0x9e) \
|
||||
X(StackValue, 0x9f)
|
||||
X(ImplicitValue, 0x9e, 2) \
|
||||
X(StackValue, 0x9f, 0)
|
||||
|
||||
#define DW_Expr_V5_XList(X) \
|
||||
X(ImplicitPointer, 0xa0) \
|
||||
X(Addrx, 0xa1) \
|
||||
X(Constx, 0xa2) \
|
||||
X(EntryValue, 0xa3) \
|
||||
X(ConstType, 0xa4) \
|
||||
X(RegvalType, 0xa5) \
|
||||
X(DerefType, 0xa6) \
|
||||
X(XderefType, 0xa7) \
|
||||
X(Convert, 0xa8) \
|
||||
X(ReInterpret, 0xa9)
|
||||
X(ImplicitPointer, 0xa0, 2) \
|
||||
X(Addrx, 0xa1, 1) \
|
||||
X(Constx, 0xa2, 1) \
|
||||
X(EntryValue, 0xa3, 2) \
|
||||
X(ConstType, 0xa4, 3) \
|
||||
X(RegvalType, 0xa5, 2) \
|
||||
X(DerefType, 0xa6, 2) \
|
||||
X(XDerefType, 0xa7, 2) \
|
||||
X(Convert, 0xa8, 1) \
|
||||
X(ReInterpret, 0xa9, 1)
|
||||
|
||||
#define DW_Expr_GNU_XList(X) \
|
||||
X(GNU_PushTlsAddress, 0xe0) \
|
||||
X(GNU_UnInit, 0xf0) \
|
||||
X(GNU_ImplicitPointer, 0xf2) \
|
||||
X(GNU_EntryValue, 0xf3) \
|
||||
X(GNU_ConstType, 0xf4) \
|
||||
X(GNU_RegvalType, 0xf5) \
|
||||
X(GNU_DerefType, 0xf6) \
|
||||
X(GNU_Convert, 0xf7) \
|
||||
X(GNU_ParameterRef, 0xfa) \
|
||||
X(GNU_AddrIndex, 0xfb) \
|
||||
X(GNU_ConstIndex, 0xfc)
|
||||
#define DW_Expr_GNU_XList(X) \
|
||||
X(GNU_PushTlsAddress, 0xe0, 0) \
|
||||
X(GNU_UnInit, 0xf0, 0) \
|
||||
X(GNU_ImplicitPointer, 0xf2, 2) \
|
||||
X(GNU_EntryValue, 0xf3, 2) \
|
||||
X(GNU_ConstType, 0xf4, 3) \
|
||||
X(GNU_RegvalType, 0xf5, 2) \
|
||||
X(GNU_DerefType, 0xf6, 2) \
|
||||
X(GNU_Convert, 0xf7, 1) \
|
||||
X(GNU_ParameterRef, 0xfa, 1) \
|
||||
X(GNU_AddrIndex, 0xfb, 0) \
|
||||
X(GNU_ConstIndex, 0xfc, 1)
|
||||
|
||||
typedef U64 DW_ExprOp;
|
||||
typedef enum DW_ExprOpEnum
|
||||
{
|
||||
#define X(_N, _ID) DW_ExprOp_##_N = _ID,
|
||||
#define X(_N, _ID, _OPER_COUNT) DW_ExprOp_##_N = _ID,
|
||||
DW_Expr_V3_XList(X)
|
||||
DW_Expr_V4_XList(X)
|
||||
DW_Expr_V5_XList(X)
|
||||
@@ -1779,6 +1779,8 @@ internal DW_AttribClass dw_pick_attrib_value_class(DW_Version ver, DW_Ext ext, B
|
||||
|
||||
internal U64 dw_pick_default_lower_bound(DW_Language lang);
|
||||
|
||||
internal U64 dw_operand_count_from_expr_op(DW_ExprOp op);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String <=> Enum
|
||||
|
||||
|
||||
Reference in New Issue
Block a user