#include "op.h" #include static const tobi_op ops[] = { {0x00, "ZeroOp", TOBI_OP_SIMPLE, 0}, {0x01, "OneOp", TOBI_OP_SIMPLE, 0}, {0x06, "AliasOp", TOBI_OP_NAMED, 0}, {0x08, "NameOp", TOBI_OP_NAMED, 0}, {0x0a, "ByteConst", TOBI_OP_SIMPLE, 0}, {0x0b, "WordConst", TOBI_OP_SIMPLE, 0}, {0x0c, "DWordConst", TOBI_OP_SIMPLE, 0}, {0x0d, "StringConst", TOBI_OP_SIMPLE, 0}, {0x0e, "QWordConst", TOBI_OP_SIMPLE, 0}, {0x10, "ScopeOp", TOBI_OP_PKG, 1}, {0x11, "BufferOp", TOBI_OP_PKG, 1}, {0x12, "PackageOp", TOBI_OP_PKG, 1}, {0x13, "VarPackageOp", TOBI_OP_PKG, 1}, {0x14, "MethodOp", TOBI_OP_PKG, 1}, {0x15, "ExternalOp", TOBI_OP_NAMED, 0}, {0x2e, "DualNamePrefix", TOBI_OP_NAMED, 0}, {0x2f, "MultiNamePrefix", TOBI_OP_NAMED, 0}, {0x5b, "ExtOpPrefix", TOBI_OP_EXT, 0}, {0x60, "Local0", TOBI_OP_SIMPLE, 0}, {0x61, "Local1", TOBI_OP_SIMPLE, 0}, {0x62, "Local2", TOBI_OP_SIMPLE, 0}, {0x63, "Local3", TOBI_OP_SIMPLE, 0}, {0x64, "Local4", TOBI_OP_SIMPLE, 0}, {0x65, "Local5", TOBI_OP_SIMPLE, 0}, {0x66, "Local6", TOBI_OP_SIMPLE, 0}, {0x67, "Local7", TOBI_OP_SIMPLE, 0}, {0x68, "Arg0", TOBI_OP_SIMPLE, 0}, {0x69, "Arg1", TOBI_OP_SIMPLE, 0}, {0x6a, "Arg2", TOBI_OP_SIMPLE, 0}, {0x6b, "Arg3", TOBI_OP_SIMPLE, 0}, {0x6c, "Arg4", TOBI_OP_SIMPLE, 0}, {0x6d, "Arg5", TOBI_OP_SIMPLE, 0}, {0x6e, "Arg6", TOBI_OP_SIMPLE, 0}, {0x70, "StoreOp", TOBI_OP_EXPR, 0}, {0x71, "RefOfOp", TOBI_OP_EXPR, 0}, {0x72, "AddOp", TOBI_OP_EXPR, 0}, {0x73, "ConcatOp", TOBI_OP_EXPR, 0}, {0x74, "SubtractOp", TOBI_OP_EXPR, 0}, {0x75, "IncrementOp", TOBI_OP_EXPR, 0}, {0x76, "DecrementOp", TOBI_OP_EXPR, 0}, {0x77, "MultiplyOp", TOBI_OP_EXPR, 0}, {0x78, "DivideOp", TOBI_OP_EXPR, 0}, {0x79, "ShiftLeftOp", TOBI_OP_EXPR, 0}, {0x7a, "ShiftRightOp", TOBI_OP_EXPR, 0}, {0x7b, "AndOp", TOBI_OP_EXPR, 0}, {0x7c, "NAndOp", TOBI_OP_EXPR, 0}, {0x7d, "OrOp", TOBI_OP_EXPR, 0}, {0x7e, "NOrOp", TOBI_OP_EXPR, 0}, {0x7f, "XorOp", TOBI_OP_EXPR, 0}, {0x80, "NotOp", TOBI_OP_EXPR, 0}, {0x81, "FindSetLeftBitOp", TOBI_OP_EXPR, 0}, {0x82, "FindSetRightBitOp", TOBI_OP_EXPR, 0}, {0x83, "DerefOfOp", TOBI_OP_EXPR, 0}, {0x84, "ConcatResOp", TOBI_OP_EXPR, 0}, {0x85, "ModOp", TOBI_OP_EXPR, 0}, {0x86, "NotifyOp", TOBI_OP_EXPR, 0}, {0x87, "SizeOfOp", TOBI_OP_EXPR, 0}, {0x88, "IndexOp", TOBI_OP_EXPR, 0}, {0x89, "MatchOp", TOBI_OP_EXPR, 0}, {0x8a, "CreateDWordFieldOp", TOBI_OP_EXPR, 0}, {0x8b, "CreateWordFieldOp", TOBI_OP_EXPR, 0}, {0x8c, "CreateByteFieldOp", TOBI_OP_EXPR, 0}, {0x8d, "CreateBitFieldOp", TOBI_OP_EXPR, 0}, {0x8e, "ObjectTypeOp", TOBI_OP_EXPR, 0}, {0x8f, "CreateQWordFieldOp", TOBI_OP_EXPR, 0}, {0x90, "LAndOp", TOBI_OP_EXPR, 0}, {0x91, "LOrOp", TOBI_OP_EXPR, 0}, {0x92, "LNotOp", TOBI_OP_EXPR, 0}, {0x93, "LEqualOp", TOBI_OP_EXPR, 0}, {0x94, "LGreaterOp", TOBI_OP_EXPR, 0}, {0x95, "LLessOp", TOBI_OP_EXPR, 0}, {0x96, "ToBufferOp", TOBI_OP_EXPR, 0}, {0x97, "ToDecimalStringOp", TOBI_OP_EXPR, 0}, {0x98, "ToHexStringOp", TOBI_OP_EXPR, 0}, {0x99, "ToIntegerOp", TOBI_OP_EXPR, 0}, {0x9c, "ToStringOp", TOBI_OP_EXPR, 0}, {0x9d, "CopyObjectOp", TOBI_OP_EXPR, 0}, {0x9e, "MidOp", TOBI_OP_EXPR, 0}, {0x9f, "ContinueOp", TOBI_OP_CONTROL, 0}, {0xa0, "IfOp", TOBI_OP_CONTROL, 1}, {0xa1, "ElseOp", TOBI_OP_CONTROL, 1}, {0xa2, "WhileOp", TOBI_OP_CONTROL, 1}, {0xa3, "NoopOp", TOBI_OP_CONTROL, 0}, {0xa4, "ReturnOp", TOBI_OP_CONTROL, 0}, {0xa5, "BreakOp", TOBI_OP_CONTROL, 0}, {0xcc, "BreakPointOp", TOBI_OP_CONTROL, 0}, {0xff, "OnesOp", TOBI_OP_SIMPLE, 0}, }; static const tobi_op ext_ops[] = { {0x5b01, "MutexOp", TOBI_OP_EXT, 0}, {0x5b02, "EventOp", TOBI_OP_EXT, 0}, {0x5b12, "CondRefOfOp", TOBI_OP_EXT, 0}, {0x5b13, "CreateFieldOp", TOBI_OP_EXT, 0}, {0x5b1f, "LoadTableOp", TOBI_OP_EXT, 0}, {0x5b20, "LoadOp", TOBI_OP_EXT, 0}, {0x5b21, "StallOp", TOBI_OP_EXT, 0}, {0x5b22, "SleepOp", TOBI_OP_EXT, 0}, {0x5b23, "AcquireOp", TOBI_OP_EXT, 0}, {0x5b24, "SignalOp", TOBI_OP_EXT, 0}, {0x5b25, "WaitOp", TOBI_OP_EXT, 0}, {0x5b26, "ResetOp", TOBI_OP_EXT, 0}, {0x5b27, "ReleaseOp", TOBI_OP_EXT, 0}, {0x5b28, "FromBCDOp", TOBI_OP_EXT, 0}, {0x5b29, "ToBCDOp", TOBI_OP_EXT, 0}, {0x5b2a, "UnloadOp", TOBI_OP_EXT, 0}, {0x5b30, "RevisionOp", TOBI_OP_EXT, 0}, {0x5b31, "DebugOp", TOBI_OP_EXT, 0}, {0x5b32, "FatalOp", TOBI_OP_EXT, 0}, {0x5b33, "TimerOp", TOBI_OP_EXT, 0}, {0x5b80, "OpRegionOp", TOBI_OP_EXT, 0}, {0x5b81, "FieldOp", TOBI_OP_EXT, 1}, {0x5b82, "DeviceOp", TOBI_OP_EXT, 1}, {0x5b83, "ProcessorOp", TOBI_OP_EXT, 1}, {0x5b84, "PowerResOp", TOBI_OP_EXT, 1}, {0x5b85, "ThermalZoneOp", TOBI_OP_EXT, 1}, {0x5b86, "IndexFieldOp", TOBI_OP_EXT, 1}, {0x5b87, "BankFieldOp", TOBI_OP_EXT, 1}, {0x5b88, "DataRegionOp", TOBI_OP_EXT, 0}, }; static const tobi_op_desc descs[] = { {0x06, "NameString NameString"}, {0x08, "NameString DataRef"}, {0x0a, "ByteData"}, {0x0b, "WordData"}, {0x0c, "DWordData"}, {0x0d, "StringData"}, {0x0e, "QWordData"}, {0x10, "PkgLength NameString TermList"}, {0x11, "PkgLength BufferSize ByteList"}, {0x12, "PkgLength NumElements PackageElements"}, {0x13, "PkgLength VarNumElements PackageElements"}, {0x14, "PkgLength NameString MethodFlags TermList"}, {0x15, "NameString ObjectType ArgumentCount"}, {0x70, "TermArg SuperName"}, {0x71, "SuperName"}, {0x72, "TermArg TermArg Target"}, {0x73, "Data TermArg Target"}, {0x74, "TermArg TermArg Target"}, {0x75, "SuperName"}, {0x76, "SuperName"}, {0x77, "TermArg TermArg Target"}, {0x78, "TermArg TermArg Target RemainderTarget"}, {0x79, "TermArg TermArg Target"}, {0x7a, "TermArg TermArg Target"}, {0x7b, "TermArg TermArg Target"}, {0x7c, "TermArg TermArg Target"}, {0x7d, "TermArg TermArg Target"}, {0x7e, "TermArg TermArg Target"}, {0x7f, "TermArg TermArg Target"}, {0x80, "TermArg Target"}, {0x81, "TermArg Target"}, {0x82, "TermArg Target"}, {0x83, "TermArg"}, {0x84, "Data Buffer Target"}, {0x85, "TermArg TermArg Target"}, {0x86, "SuperName TermArg"}, {0x87, "SuperName"}, {0x88, "SuperName TermArg Target"}, {0x89, "SearchPkg MatchOp1 MatchObj1 MatchOp2 MatchObj2 StartIndex"}, {0x8a, "SourceBuff BitIndex NameString"}, {0x8b, "SourceBuff BitIndex NameString"}, {0x8c, "SourceBuff ByteIndex NameString"}, {0x8d, "SourceBuff BitIndex NameString"}, {0x8e, "SuperName"}, {0x8f, "SourceBuff BitIndex NameString"}, {0x90, "TermArg TermArg"}, {0x91, "TermArg TermArg"}, {0x92, "TermArg"}, {0x93, "TermArg TermArg"}, {0x94, "TermArg TermArg"}, {0x95, "TermArg TermArg"}, {0x96, "TermArg Target"}, {0x97, "TermArg Target"}, {0x98, "TermArg Target"}, {0x99, "TermArg Target"}, {0x9c, "TermArg LengthArg Target"}, {0x9d, "SimpleName Target"}, {0x9e, "TermArg TermArg TermArg Target"}, {0x9f, ""}, {0xa0, "PkgLength Predicate TermList"}, {0xa1, "PkgLength TermList"}, {0xa2, "PkgLength Predicate TermList"}, {0xa4, "TermArg"}, {0xa5, ""}, {0x5b01, "NameString SyncFlags"}, {0x5b02, "NameString"}, {0x5b12, "SuperName Target"}, {0x5b13, "SourceBuff BitIndex NumBits NameString"}, {0x5b1f, "Signature OemId OemTableId RootPath ParameterPath Target"}, {0x5b20, "NameString Target"}, {0x5b21, "TermArg"}, {0x5b22, "TermArg"}, {0x5b23, "MutexObject Timeout"}, {0x5b24, "EventObject"}, {0x5b25, "EventObject Timeout"}, {0x5b26, "EventObject"}, {0x5b27, "MutexObject"}, {0x5b28, "TermArg Target"}, {0x5b29, "TermArg Target"}, {0x5b2a, "Handle"}, {0x5b30, ""}, {0x5b31, ""}, {0x5b32, "FatalType FatalCode FatalArg"}, {0x5b33, ""}, {0x5b80, "NameString RegionSpace RegionOffset RegionLen"}, {0x5b81, "PkgLength NameString FieldFlags FieldList"}, {0x5b82, "PkgLength NameString TermList"}, {0x5b83, "PkgLength NameString ProcId PblkAddr PblkLen TermList"}, {0x5b84, "PkgLength NameString SystemLevel ResourceOrder TermList"}, {0x5b85, "PkgLength NameString TermList"}, {0x5b86, "PkgLength IndexName DataName FieldFlags FieldList"}, {0x5b87, "PkgLength RegionName BankName BankValue FieldFlags FieldList"}, {0x5b88, "NameString SignatureString OemIdString OemTableIdString"}, }; const tobi_op *tobi_op_find(uint8_t op) { for (size_t i = 0; i < sizeof(ops) / sizeof(ops[0]); i++) { if (ops[i].code == op) { return &ops[i]; } } return NULL; } const tobi_op *tobi_op_find_ext(uint8_t ext) { uint16_t code = (uint16_t)(0x5b00u | ext); return tobi_op_find_code(code); } const tobi_op *tobi_op_find_code(uint16_t code) { if ((code & 0xff00u) == 0x5b00u) { for (size_t i = 0; i < sizeof(ext_ops) / sizeof(ext_ops[0]); i++) { if (ext_ops[i].code == code) { return &ext_ops[i]; } } return NULL; } return tobi_op_find((uint8_t)code); } const char *tobi_op_operands(uint16_t code) { for (size_t i = 0; i < sizeof(descs) / sizeof(descs[0]); i++) { if (descs[i].code == code) { return descs[i].operands; } } return NULL; }