{"name": "UpdateThumbVFPPredicate", "code": "__int64 __fastcall UpdateThumbVFPPredicate ( __int64 @@a1@@ , __int64 @@a2@@ ) { __int64 v2 ; __int64 v3 ; __int64 result ; unsigned __int16 @@v5@@ ; __int64 @@v6@@ ; unsigned int @@v7@@ ; unsigned int @@i@@ ; @@v7@@ = ITStatus_getITCC ( @@a1@@ + Number ) ; if ( ITStatus_instrInITBlock ( @@a1@@ + Number ) ) ITStatus_advanceITState ( @@a1@@ + Number ) ; @@v6@@ = qword_4F140 [ Number * ( unsigned int ) MCInst_getOpcode ( @@a2@@ ) ] ; @@v5@@ = * ( ( unsigned __int8 * ) & unk_4F122 + Number * ( unsigned int ) MCInst_getOpcode ( @@a2@@ ) ) ; for ( @@i@@ = Number ; ; ++ @@i@@ ) { result = @@v5@@ ; if ( @@i@@ >= @@v5@@ ) break ; if ( ( unsigned __int8 ) MCOperandInfo_isPredicate ( Number L * @@i@@ + @@v6@@ ) ) { v2 = MCInst_getOperand ( @@a2@@ , @@i@@ ) ; MCOperand_setImm ( v2 , @@v7@@ ) ; v3 = MCInst_getOperand ( @@a2@@ , @@i@@ + Number ) ; if ( @@v7@@ == Number ) result = MCOperand_setReg ( v3 , Number L ) ; else result = MCOperand_setReg ( v3 , Number L ) ; return result ; } } return result ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r64"}, {"n": "i", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s20"}, {"n": "v7", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s24"}, {"n": "v6", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s32"}, {"n": "v5", "t": {"T": 1, "n": "unsigned __int16", "s": 2}, "location": "s34"}]}
{"name": "ITStatus_instrInITBlock", "code": "bool __fastcall ITStatus_instrInITBlock ( __int64 @@a1@@ ) { return * ( _DWORD * ) ( @@a1@@ + Number ) != Number ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}]} {"name": "ITStatus_getITCC", "code": "__int64 __fastcall ITStatus_getITCC ( __int64 @@a1@@ ) { unsigned int @@v2@@ ; @@v2@@ = Number ; if ( ITStatus_instrInITBlock ( @@a1@@ ) ) @@v2@@ = * ( unsigned __int8 * ) ( @@a1@@ + ( unsigned int ) ( * ( _DWORD * ) ( @@a1@@ + Number ) - Number ) ) ; return @@v2@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "v2", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s4"}]} {"name": "ITStatus_advanceITState", "code": "__int64 __fastcall ITStatus_advanceITState ( __int64 @@a1@@ ) { __int64 @@result@@ ; @@result@@ = @@a1@@ ; -- * ( _DWORD * ) ( @@a1@@ + Number ) ; return @@result@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "result", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r8"}]} {"name": "_Thumb_getInstruction", "code": "__int64 __fastcall Thumb_getInstruction ( __int64 @@a1@@ , __int64 @@a2@@ , _WORD * @@a3@@ , unsigned __int64 @@a4@@ , _WORD * @@a5@@ , __int64 @@a6@@ ) { __int64 result ; unsigned int v7 ; unsigned int v8 ; unsigned int v9 ; __int64 v10 ; __int64 v11 ; unsigned int v12 ; unsigned int v13 ; unsigned int @@v18@@ ; unsigned int @@v19@@ ; int @@v20@@ ; int @@v21@@ ; bool @@v22@@ ; unsigned int @@v23@@ ; unsigned int @@v24@@ ; unsigned int @@v25@@ ; unsigned int @@v26@@ ; unsigned __int64 @@i@@ ; int @@v28@@ ; unsigned __int16 @@v29@@ ; if ( @@a4@@ <= Number ) return Number L ; if ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a2@@ + Number ) + Number L ) ) { memset ( ( void * ) ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a2@@ + Number ) + Number L ) + Number L ) , Number , Number ) ; for ( @@i@@ = Number L ; @@i@@ <= Number ; ++ @@i@@ ) * ( _DWORD * ) ( * ( _QWORD * ) ( * ( _QWORD * ) ( @@a2@@ + Number ) + Number L ) + Number * @@i@@ + Number ) = Number ; } LOWORD ( @@v19@@ ) = * @@a3@@ ; if ( * ( _BYTE * ) ( @@a1@@ + Number ) ) @@v29@@ = _byteswap_ushort ( @@v19@@ ) ; else @@v29@@ = @@v19@@ ; @@v18@@ = decodeInstruction_2 ( DecoderTableThumb16 , @@a2@@ , @@v29@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; v7 = AddThumbPredicate ( @@a1@@ , @@a2@@ ) ; Check ( & @@v18@@ , v7 ) ; return @@v18@@ ; } MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_2 ( DecoderTableThumbSBit16 , @@a2@@ , @@v29@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; @@v22@@ = ITStatus_instrInITBlock ( @@a1@@ + Number ) ; v8 = AddThumbPredicate ( @@a1@@ , @@a2@@ ) ; Check ( & @@v18@@ , v8 ) ; AddThumb1SBit ( @@a2@@ , @@v22@@ ) ; return @@v18@@ ; } MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_2 ( DecoderTableThumb216 , @@a2@@ , @@v29@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; if ( ( unsigned int ) MCInst_getOpcode ( @@a2@@ ) == Number && ITStatus_instrInITBlock ( @@a1@@ + Number ) ) { result = Number L ; } else { v9 = AddThumbPredicate ( @@a1@@ , @@a2@@ ) ; Check ( & @@v18@@ , v9 ) ; if ( ( unsigned int ) MCInst_getOpcode ( @@a2@@ ) == Number ) { v10 = MCInst_getOperand ( @@a2@@ , Number L ) ; @@v21@@ = MCOperand_getImm ( v10 ) ; v11 = MCInst_getOperand ( @@a2@@ , Number L ) ; @@v20@@ = MCOperand_getImm ( v11 ) ; ITStatus_setITState ( @@a1@@ + Number , @@v21@@ , @@v20@@ ) ; } result = @@v18@@ ; } } else { if ( @@a4@@ <= Number ) return Number L ; @@v19@@ = * ( _DWORD * ) @@a3@@ ; if ( * ( _BYTE * ) ( @@a1@@ + Number ) ) @@v28@@ = _byteswap_ulong ( @@v19@@ ) ; else @@v28@@ = ( BYTE1 ( @@v19@@ ) << Number ) | HIWORD ( @@v19@@ ) | ( ( unsigned __int8 ) @@v19@@ << Number ) ; MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_4 ( DecoderTableThumb32 , @@a2@@ , @@v28@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; @@v22@@ = ITStatus_instrInITBlock ( @@a1@@ + Number ) ; v12 = AddThumbPredicate ( @@a1@@ , @@a2@@ ) ; Check ( & @@v18@@ , v12 ) ; AddThumb1SBit ( @@a2@@ , @@v22@@ ) ; return @@v18@@ ; } MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_4 ( DecoderTableThumb232 , @@a2@@ , @@v28@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) goto LABEL_42 ; MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_4 ( DecoderTableVFP32 , @@a2@@ , @@v28@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ || ( unsigned int ) fieldFromInstruction_4 ( @@v28@@ , Number , Number ) == Number && ( MCInst_clear ( @@a2@@ ) , ( @@v18@@ = decodeInstruction_4 ( DecoderTableVFP32 , @@a2@@ , @@v28@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ) != Number ) ) { * @@a5@@ = Number ; UpdateThumbVFPPredicate ( @@a1@@ , @@a2@@ ) ; return @@v18@@ ; } MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_4 ( DecoderTableVFPV832 , @@a2@@ , @@v28@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; return @@v18@@ ; } if ( ( unsigned int ) fieldFromInstruction_4 ( @@v28@@ , Number , Number ) == Number ) { MCInst_clear ( @@a2@@ ) ; @@v18@@ = decodeInstruction_4 ( DecoderTableNEONDup32 , @@a2@@ , @@v28@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) goto LABEL_42 ; } if ( ( unsigned int ) fieldFromInstruction_4 ( @@v28@@ , Number , Number ) == Number && ( MCInst_clear ( @@a2@@ ) , @@v26@@ = @@v28@@ & Number | Number , ( @@v18@@ = decodeInstruction_4 ( DecoderTableNEONLoadStore32 , @@a2@@ , @@v26@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ) != Number ) || ( unsigned int ) fieldFromInstruction_4 ( @@v28@@ , Number , Number ) == Number && ( MCInst_clear ( @@a2@@ ) , @@v25@@ = ( ( @@v28@@ & Number ) >> Number ) & Number | @@v28@@ & Number | Number , ( @@v18@@ = decodeInstruction_4 ( DecoderTableNEONData32 , @@a2@@ , @@v25@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ) != Number ) ) { LABEL_42 : * @@a5@@ = Number ; v13 = AddThumbPredicate ( @@a1@@ , @@a2@@ ) ; Check ( & @@v18@@ , v13 ) ; result = @@v18@@ ; } else { MCInst_clear ( @@a2@@ ) ; @@v24@@ = ( ( @@v28@@ & Number ) >> Number ) & Number | @@v28@@ & Number | Number ; @@v18@@ = decodeInstruction_4 ( DecoderTablev8Crypto32 , @@a2@@ , @@v24@@ , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; result = @@v18@@ ; } else { MCInst_clear ( @@a2@@ ) ; @@v23@@ = @@v28@@ & Number ; @@v18@@ = decodeInstruction_4 ( DecoderTablev8NEON32 , @@a2@@ , @@v28@@ & Number , @@a6@@ , Number L , * ( _DWORD * ) ( @@a1@@ + Number ) ) ; if ( @@v18@@ ) { * @@a5@@ = Number ; result = @@v18@@ ; } else { MCInst_clear ( @@a2@@ ) ; * @@a5@@ = Number ; result = Number L ; } } } } return result ; }", "source": [{"n": "a3", "t": {"T": 3, "t": "_WORD"}, "location": "r16"}, {"n": "a4", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "r24"}, {"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r64"}, {"n": "a5", "t": {"T": 3, "t": "_WORD"}, "location": "r72"}, {"n": "a6", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r80"}, {"n": "i", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "s16"}, {"n": "v29", "t": {"T": 1, "n": "unsigned __int16", "s": 2}, "location": "s2"}, {"n": "v26", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s20"}, {"n": "v25", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s24"}, {"n": "v24", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s28"}, {"n": "v23", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s32"}, {"n": "v22", "t": {"T": 1, "n": "bool", "s": 1}, "location": "s33"}, {"n": "v21", "t": {"T": 1, "n": "int", "s": 4}, "location": "s40"}, {"n": "v20", "t": {"T": 1, "n": "int", "s": 4}, "location": "s44"}, {"n": "v19", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s48"}, {"n": "v18", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s52"}, {"n": "v28", "t": {"T": 1, "n": "int", "s": 4}, "location": "s8"}]}