{"name": "tb_find_fast", "code": "__int64 __fastcall tb_find_fast ( ) { _DWORD * @@v0@@ ; _BOOL4 v1 ; _BOOL4 v2 ; int @@v4@@ ; unsigned int @@v5@@ ; unsigned int @@v6@@ ; __int64 @@v7@@ ; cpu_get_tb_cpu_state ( @@v0@@ , & @@v5@@ , & @@v6@@ , & @@v4@@ ) ; @@v7@@ = * ( _QWORD * ) & @@v0@@ [ Number * ( unsigned int ) tb_jmp_cache_hash_func ( @@v5@@ ) + Number ] ; v1 = ! @@v7@@ || * ( _DWORD * ) @@v7@@ != @@v5@@ ; v2 = v1 || * ( _DWORD * ) ( @@v7@@ + Number ) != @@v6@@ ; if ( v2 || * ( _QWORD * ) ( @@v7@@ + Number ) != @@v4@@ ) @@v7@@ = tb_find_slow ( @@v5@@ , @@v6@@ , @@v4@@ ) ; return @@v7@@ ; }", "source": [{"n": "v0", "t": {"T": 3, "t": "_DWORD"}, "location": "r120"}, {"n": "v7", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s24"}, {"n": "v6", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s28"}, {"n": "v5", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s32"}, {"n": "v4", "t": {"T": 1, "n": "int", "s": 4}, "location": "s36"}]}
{"name": "tb_jmp_cache_hash_func", "code": "__int64 __fastcall tb_jmp_cache_hash_func ( unsigned int @@a1@@ ) { return ( ( @@a1@@ ^ ( @@a1@@ >> Number ) ) >> Number ) & Number | ( ( unsigned __int8 ) @@a1@@ ^ ( unsigned __int8 ) ( @@a1@@ >> Number ) ) & Number ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r56"}]} {"name": "cpu_get_tb_cpu_state", "code": "int * __fastcall cpu_get_tb_cpu_state ( _DWORD * @@a1@@ , _DWORD * @@a2@@ , _DWORD * @@a3@@ , int * @@a4@@ ) { int * result ; int v5 ; int v6 ; * @@a2@@ = @@a1@@ [ Number ] ; * @@a3@@ = Number ; * @@a4@@ = ( Number * @@a1@@ [ Number ] ) | ( Number * @@a1@@ [ Number ] ) | @@a1@@ [ Number ] | ( @@a1@@ [ Number ] << Number ) ; if ( ( @@a1@@ [ Number ] & Number ) != Number ) * @@a4@@ |= Number ; result = ( int * ) ( @@a1@@ [ Number ] & Number ) ; if ( ( _DWORD ) result ) { v5 = * @@a4@@ ; LOBYTE ( v5 ) = * @@a4@@ | Number ; v6 = v5 ; result = @@a4@@ ; * @@a4@@ = v6 ; } return result ; }", "source": [{"n": "a3", "t": {"T": 3, "t": "_DWORD"}, "location": "r16"}, {"n": "a4", "t": {"T": 3, "t": "int"}, "location": "r24"}, {"n": "a1", "t": {"T": 3, "t": "_DWORD"}, "location": "r56"}, {"n": "a2", "t": {"T": 3, "t": "_DWORD"}, "location": "r64"}]} {"name": "tb_find_slow", "code": "__int64 __fastcall tb_find_slow ( unsigned int @@a1@@ , unsigned int @@a2@@ , __int64 @@a3@@ ) { __int64 @@v3@@ ; int @@v6@@ ; __int64 * @@i@@ ; __int64 @@v8@@ ; tb_invalidated_flag = Number ; regs_to_env ( ) ; @@v6@@ = get_phys_addr_code ( @@v3@@ , @@a1@@ ) ; for ( @@i@@ = ( __int64 * ) ( ( char * ) & tb_phys_hash + Number * ( unsigned int ) tb_phys_hash_func ( @@v6@@ ) ) ; ; @@i@@ = ( __int64 * ) ( @@v8@@ + Number ) ) { @@v8@@ = * @@i@@ ; if ( ! * @@i@@ ) break ; if ( @@a1@@ == * ( _DWORD * ) @@v8@@ && ( @@v6@@ & Number ) == * ( _DWORD * ) ( @@v8@@ + Number ) && @@a2@@ == * ( _DWORD * ) ( @@v8@@ + Number ) && @@a3@@ == * ( _QWORD * ) ( @@v8@@ + Number ) && ( * ( _DWORD * ) ( @@v8@@ + Number ) == Number || ( unsigned int ) get_phys_addr_code ( @@v3@@ , ( @@a1@@ & Number ) + Number ) == * ( _DWORD * ) ( @@v8@@ + Number ) ) ) { goto LABEL_11 ; } } @@v8@@ = tb_gen_code ( @@v3@@ , @@a1@@ , @@a2@@ , ( unsigned int ) @@a3@@ , Number L ) ; LABEL_11 : * ( _QWORD * ) ( @@v3@@ + Number * ( ( unsigned int ) tb_jmp_cache_hash_func ( @@a1@@ ) + Number L ) + Number ) = @@v8@@ ; return @@v8@@ ; }", "source": [{"n": "v3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r120"}, {"n": "a3", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r16"}, {"n": "a1", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r64"}, {"n": "v8", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s24"}, {"n": "i", "t": {"T": 3, "t": "__int64"}, "location": "s32"}, {"n": "v6", "t": {"T": 1, "n": "int", "s": 4}, "location": "s36"}]} {"name": "cpu_arm_exec", "code": "__int64 __fastcall cpu_arm_exec ( __int64 @@a1@@ ) { int @@v2@@ ; unsigned int @@v3@@ ; int v4 ; int v5 ; __int64 @@v6@@ ; int @@v7@@ ; __int64 @@v8@@ ; if ( ( unsigned int ) cpu_halted ( @@a1@@ ) == Number ) return Number L ; cpu_single_env = @@a1@@ ; env_to_regs ( ) ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; while ( setjmp ( ( struct __jmp_buf_tag * ) ( @@a1@@ + Number ) ) ) env_to_regs ( ) ; * ( _QWORD * ) ( @@a1@@ + Number ) = Number L ; if ( * ( int * ) ( @@a1@@ + Number ) < Number ) { LABEL_10 : @@v8@@ = Number L ; while ( Number ) { @@v7@@ = * ( _DWORD * ) ( @@a1@@ + Number ) ; if ( @@v7@@ ) { if ( ( * ( _DWORD * ) ( @@a1@@ + Number ) & Number ) != Number ) LOBYTE ( @@v7@@ ) = @@v7@@ & Number ; if ( ( @@v7@@ & Number ) != Number ) { @@v2@@ = * ( _DWORD * ) ( @@a1@@ + Number ) ; LOBYTE ( @@v2@@ ) = @@v2@@ & Number ; * ( _DWORD * ) ( @@a1@@ + Number ) = @@v2@@ ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; cpu_loop_exit ( ) ; } if ( ( @@v7@@ & Number ) != Number ) { * ( _DWORD * ) ( @@a1@@ + Number ) &= Number ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; cpu_loop_exit ( ) ; } if ( ( @@v7@@ & Number ) != Number && ( * ( _DWORD * ) ( @@a1@@ + Number ) & Number ) == Number ) { * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; do_interrupt ( @@a1@@ ) ; @@v8@@ = Number L ; } if ( ( @@v7@@ & Number ) != Number && ( arm_feature ( @@a1@@ , Number ) && * ( _DWORD * ) ( @@a1@@ + Number ) <= Number || ( * ( _DWORD * ) ( @@a1@@ + Number ) & Number ) == Number ) ) { * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; do_interrupt ( @@a1@@ ) ; @@v8@@ = Number L ; } if ( ( * ( _DWORD * ) ( @@a1@@ + Number ) & Number ) != Number ) { * ( _DWORD * ) ( @@a1@@ + Number ) &= Number ; @@v8@@ = Number L ; } } if ( * ( _DWORD * ) ( @@a1@@ + Number ) ) { * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; cpu_loop_exit ( ) ; } spin_lock ( ) ; @@v6@@ = tb_find_fast ( & tb_lock ) ; if ( tb_invalidated_flag ) { @@v8@@ = Number L ; tb_invalidated_flag = Number ; } if ( @@v8@@ && * ( _DWORD * ) ( @@v6@@ + Number ) == Number ) tb_add_jump ( @@v8@@ & Number , @@v8@@ & Number , @@v6@@ ) ; spin_unlock ( ) ; * ( _QWORD * ) ( @@a1@@ + Number ) = @@v6@@ ; if ( * ( _DWORD * ) ( @@a1@@ + Number ) ) * ( _QWORD * ) ( @@a1@@ + Number ) = Number L ; while ( * ( _QWORD * ) ( @@a1@@ + Number ) ) { @@v8@@ = code_gen_prologue ( * ( _QWORD * ) ( @@v6@@ + Number ) ) ; * ( _QWORD * ) ( @@a1@@ + Number ) = Number L ; if ( ( @@v8@@ & Number ) == Number ) { @@v6@@ = @@v8@@ & Number ; cpu_pc_from_tb ( @@a1@@ , ( _DWORD * ) ( @@v8@@ & Number ) ) ; v4 = * ( _DWORD * ) ( @@a1@@ + Number ) ; if ( ! * ( _QWORD * ) ( @@a1@@ + Number ) || v4 < Number ) { if ( v4 > Number ) cpu_exec_nocache ( v4 , ( unsigned int * ) @@v6@@ ) ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; cpu_loop_exit ( ) ; } * ( _QWORD * ) ( @@a1@@ + Number ) += v4 ; if ( * ( __int64 * ) ( @@a1@@ + Number ) <= Number ) v5 = * ( _QWORD * ) ( @@a1@@ + Number ) ; else v5 = Number ; * ( _QWORD * ) ( @@a1@@ + Number ) -= v5 ; * ( _WORD * ) ( @@a1@@ + Number ) = v5 ; } } } } if ( * ( int * ) ( @@a1@@ + Number ) <= Number ) { do_interrupt ( @@a1@@ ) ; * ( _DWORD * ) ( @@a1@@ + Number ) = Number ; goto LABEL_10 ; } @@v3@@ = * ( _DWORD * ) ( @@a1@@ + Number ) ; if ( @@v3@@ == Number ) cpu_handle_debug_exception ( @@a1@@ ) ; cpu_single_env = Number L ; return @@v3@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "v2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r8"}, {"n": "v8", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s24"}, {"n": "v7", "t": {"T": 1, "n": "int", "s": 4}, "location": "s28"}, {"n": "v6", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s40"}, {"n": "v3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s48"}]}