{"name": "gen_load_and_replicate", "code": "__int64 __fastcall gen_load_and_replicate ( __int64 @@a1@@ , int @@a2@@ , int @@a3@@ ) { unsigned int @@v4@@ ; if ( @@a3@@ == Number ) return ( unsigned int ) gen_ld32 ( @@a2@@ , Number ) ; if ( @@a3@@ > Number ) goto LABEL_9 ; if ( @@a3@@ ) { if ( @@a3@@ != Number ) LABEL_9 : abort ( ) ; @@v4@@ = gen_ld16u ( @@a2@@ , Number ) ; gen_neon_dup_low16 ( @@v4@@ ) ; } else { @@v4@@ = gen_ld8u ( @@a2@@ , Number ) ; gen_neon_dup_u8 ( @@v4@@ , Number ) ; } return @@v4@@ ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "int", "s": 4}, "location": "r16"}, {"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r64"}, {"n": "v4", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}]}
{"name": "gen_ld8u", "code": "__int64 __fastcall gen_ld8u ( int @@a1@@ , int @@a2@@ ) { unsigned int @@v3@@ ; @@v3@@ = tcg_temp_new_i32 ( ) ; tcg_gen_qemu_ld8u ( @@v3@@ , @@a1@@ , @@a2@@ ) ; return @@v3@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "int", "s": 4}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r64"}, {"n": "v3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}]} {"name": "gen_ld16u", "code": "__int64 __fastcall gen_ld16u ( int @@a1@@ , int @@a2@@ ) { unsigned int @@v3@@ ; @@v3@@ = tcg_temp_new_i32 ( ) ; tcg_gen_qemu_ld16u ( @@v3@@ , @@a1@@ , @@a2@@ ) ; return @@v3@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "int", "s": 4}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r64"}, {"n": "v3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}]} {"name": "gen_ld32", "code": "__int64 __fastcall gen_ld32 ( int @@a1@@ , int @@a2@@ ) { unsigned int @@v3@@ ; @@v3@@ = tcg_temp_new_i32 ( ) ; tcg_gen_qemu_ld32u ( @@v3@@ , @@a1@@ , @@a2@@ ) ; return @@v3@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "int", "s": 4}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "int", "s": 4}, "location": "r64"}, {"n": "v3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}]} {"name": "gen_neon_dup_u8", "code": "unsigned __int64 __fastcall gen_neon_dup_u8 ( int @@a1@@ , unsigned int @@a2@@ ) { unsigned int @@v3@@ ; unsigned __int64 @@v4@@ ; @@v4@@ = __readfsqword ( Number ) ; @@v3@@ = tcg_temp_new_i32 ( ) ; if ( @@a2@@ ) tcg_gen_shri_i32 ( @@a1@@ , @@a1@@ , @@a2@@ ) ; tcg_gen_ext8u_i32 ( @@a1@@ , @@a1@@ ) ; tcg_gen_shli_i32 ( @@v3@@ , @@a1@@ , Number ) ; tcg_gen_or_i32 ( @@a1@@ , @@a1@@ , @@v3@@ ) ; tcg_gen_shli_i32 ( @@v3@@ , @@a1@@ , Number ) ; tcg_gen_or_i32 ( @@a1@@ , @@a1@@ , @@v3@@ ) ; tcg_temp_free_i32 ( @@v3@@ ) ; return __readfsqword ( Number ) ^ @@v4@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "int", "s": 4}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r64"}, {"n": "v3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}, {"n": "v4", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "s8"}]} {"name": "gen_neon_dup_low16", "code": "unsigned __int64 __fastcall gen_neon_dup_low16 ( int @@a1@@ ) { unsigned int @@v3@@ ; unsigned __int64 @@v4@@ ; @@v4@@ = __readfsqword ( Number ) ; @@v3@@ = tcg_temp_new_i32 ( ) ; tcg_gen_ext16u_i32 ( @@a1@@ , @@a1@@ ) ; tcg_gen_shli_i32 ( @@v3@@ , @@a1@@ , Number ) ; tcg_gen_or_i32 ( @@a1@@ , @@a1@@ , @@v3@@ ) ; tcg_temp_free_i32 ( @@v3@@ ) ; return __readfsqword ( Number ) ^ @@v4@@ ; }", "source": [{"n": "a1", "t": {"T": 1, "n": "int", "s": 4}, "location": "r56"}, {"n": "v3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}, {"n": "v4", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "s8"}]} {"name": "disas_neon_ls_insn", "code": "__int64 __fastcall disas_neon_ls_insn ( __int64 @@a1@@ , _DWORD * @@a2@@ , unsigned int @@a3@@ ) { int v4 ; __int64 v5 ; __int64 v6 ; __int64 v7 ; __int64 v8 ; int v9 ; __int64 v10 ; __int64 v11 ; int v12 ; int v13 ; unsigned int v14 ; int @@v16@@ ; unsigned int v17 ; unsigned int v18 ; int v19 ; int v20 ; int v21 ; int v22 ; int i ; int n ; int m ; int j ; int v27 ; unsigned int @@v28@@ ; int k ; int l ; unsigned int v31 ; unsigned int v32 ; unsigned int v33 ; unsigned int v34 ; unsigned int v35 ; unsigned int v36 ; unsigned int v37 ; unsigned int v38 ; unsigned int v39 ; unsigned int v40 ; unsigned int v41 ; unsigned int v42 ; unsigned int v43 ; unsigned int v44 ; unsigned int v45 ; int @@v46@@ ; int @@v47@@ ; int @@v48@@ ; int v49 ; int v50 ; unsigned int v51 ; unsigned int v52 ; int @@v53@@ ; unsigned int @@v54@@ ; int @@v55@@ ; int @@v56@@ ; unsigned int v57 ; unsigned int v58 ; unsigned int @@v59@@ ; unsigned int @@v60@@ ; if ( ! @@a2@@ [ Number ] ) return Number L ; if ( arm_feature ( @@a1@@ , Number ) ) { @@v16@@ = ( ( unsigned __int16 ) @@a3@@ >> Number ) | ( @@a3@@ >> Number ) & Number ; } else { if ( ( @@a3@@ & Number ) != Number ) return Number L ; @@v16@@ = ( unsigned __int16 ) @@a3@@ >> Number ; } @@v46@@ = HIWORD ( @@a3@@ ) & Number ; @@v47@@ = @@a3@@ & Number ; if ( ( @@a3@@ & Number ) == Number ) { @@v54@@ = ( @@a3@@ >> Number ) & Number ; v21 = ( unsigned __int8 ) @@a3@@ >> Number ; if ( @@v54@@ > Number ) return Number L ; v4 = @@v54@@ & Number ; if ( v4 == Number ) { if ( ( @@a3@@ & Number ) != Number ) return Number L ; } else if ( v4 == Number && ( ( @@a3@@ >> Number ) & Number ) == Number ) { return Number L ; } v49 = * ( ( _DWORD * ) & neon_ls_element_type + Number * ( int ) @@v54@@ ) ; @@v55@@ = * ( ( _DWORD * ) & unk_2E644 + Number * ( int ) @@v54@@ ) ; @@v56@@ = dword_2E648 [ Number * @@v54@@ ] ; if ( v21 == Number && ( @@v56@@ | @@v55@@ ) != Number ) return Number L ; v51 = tcg_temp_new_i32 ( ) ; load_reg_var ( @@a2@@ , v51 , @@v46@@ ) ; v17 = @@v55@@ << v21 ; for ( i = Number ; i < v49 ; ++ i ) { if ( @@v55@@ > Number || @@v55@@ == Number && v49 == Number ) { load_reg_var ( @@a2@@ , v51 , @@v46@@ ) ; tcg_gen_addi_i32 ( v51 , v51 , i << v21 ) ; } else if ( @@v55@@ == Number && v49 == Number && i == Number ) { load_reg_var ( @@a2@@ , v51 , @@v46@@ ) ; tcg_gen_addi_i32 ( v51 , v51 , Number << v21 ) ; } if ( v21 == Number ) { if ( ( @@a3@@ & Number ) != Number ) { v57 = gen_ld64 ( v51 , Number ) ; neon_store_reg64 ( v57 , @@v16@@ ) ; tcg_temp_free_i64 ( v57 ) ; } else { v58 = tcg_temp_new_i64 ( ) ; neon_load_reg64 ( v58 , @@v16@@ ) ; gen_st64 ( v58 , v51 , Number ) ; } tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; } else { for ( j = Number ; j <= Number ; ++ j ) { if ( v21 == Number ) { if ( ( @@a3@@ & Number ) != Number ) { v31 = gen_ld32 ( v51 , Number ) ; neon_store_reg ( @@v16@@ , j , v31 ) ; } else { v32 = neon_load_reg ( @@v16@@ , j ) ; gen_st32 ( v32 , v51 , Number ) ; } tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; } else if ( v21 == Number ) { if ( ( @@a3@@ & Number ) != Number ) { v33 = gen_ld16u ( v51 , Number ) ; tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; v41 = gen_ld16u ( v51 , Number ) ; tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; tcg_gen_shli_i32 ( v41 , v41 , Number ) ; tcg_gen_or_i32 ( v33 , v33 , v41 ) ; tcg_temp_free_i32 ( v41 ) ; neon_store_reg ( @@v16@@ , j , v33 ) ; } else { v34 = neon_load_reg ( @@v16@@ , j ) ; v42 = tcg_temp_new_i32 ( ) ; tcg_gen_shri_i32 ( v42 , v34 , Number ) ; gen_st16 ( v34 , v51 , Number ) ; tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; gen_st16 ( v42 , v51 , Number ) ; tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; } } else if ( ( @@a3@@ & Number ) != Number ) { v43 = Number ; for ( k = Number ; k <= Number ; ++ k ) { v35 = gen_ld8u ( v51 , Number ) ; tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; if ( k ) { tcg_gen_shli_i32 ( v35 , v35 , Number * k ) ; tcg_gen_or_i32 ( v43 , v43 , v35 ) ; tcg_temp_free_i32 ( v35 ) ; } else { v43 = v35 ; } } neon_store_reg ( @@v16@@ , j , v43 ) ; } else { v44 = neon_load_reg ( @@v16@@ , j ) ; for ( l = Number ; l <= Number ; ++ l ) { v36 = tcg_temp_new_i32 ( ) ; if ( l ) tcg_gen_shri_i32 ( v36 , v44 , Number * l ) ; else tcg_gen_mov_i32 ( v36 , v44 ) ; gen_st8 ( v36 , v51 , Number ) ; tcg_gen_addi_i32 ( v51 , v51 , v17 ) ; } tcg_temp_free_i32 ( v44 ) ; } } } @@v16@@ += @@v56@@ ; } tcg_temp_free_i32 ( v51 ) ; v18 = Number * v49 ; goto LABEL_148 ; } v22 = ( @@a3@@ >> Number ) & Number ; if ( v22 != Number ) { @@v48@@ = ( unsigned __int8 ) @@a3@@ >> Number ; v27 = ( @@a3@@ >> Number ) & Number ; if ( v22 == Number ) { @@v28@@ = Number ; if ( ( @@a3@@ & Number ) != Number ) v13 = Number ; else v13 = Number ; v20 = v13 ; } else if ( v22 ) { @@v28@@ = Number * ( ( @@a3@@ >> Number ) & Number ) ; if ( ( @@a3@@ & Number ) != Number ) v12 = Number ; else v12 = Number ; v20 = v12 ; } else { @@v28@@ = Number * ( ( @@a3@@ >> Number ) & Number ) ; v20 = Number ; } v50 = ( ( @@a3@@ >> Number ) & Number ) + Number ; if ( ( ( @@a3@@ >> Number ) & Number ) == Number ) { if ( v22 == Number && ( @@v48@@ & Number ) == Number ) return Number L ; goto LABEL_123 ; } if ( v50 > Number ) goto LABEL_122 ; if ( ( ( @@a3@@ >> Number ) & Number ) == Number ) { if ( ( @@a3@@ & Number ) != Number ) return Number L ; } else { if ( v50 > Number ) goto LABEL_122 ; if ( ( ( @@a3@@ >> Number ) & Number ) == Number ) { if ( ( ( @@v48@@ >> v22 ) & Number ) != Number || v22 == Number && ( ( @@v48@@ & Number ) == Number || ( @@v48@@ & Number ) == Number ) ) return Number L ; LABEL_123 : if ( ( int ) ( v20 * ( ( @@a3@@ >> Number ) & Number ) + @@v16@@ ) > Number ) return Number L ; v52 = tcg_temp_new_i32 ( ) ; load_reg_var ( @@a2@@ , v52 , @@v46@@ ) ; for ( m = Number ; m < v50 ; ++ m ) { if ( ( @@a3@@ & Number ) != Number ) { if ( v22 == Number ) { v39 = gen_ld32 ( v52 , Number ) ; } else if ( v22 ) { v39 = gen_ld16u ( v52 , Number ) ; } else { v39 = gen_ld8u ( v52 , Number ) ; } if ( v22 != Number ) { v45 = neon_load_reg ( @@v16@@ , v27 ) ; if ( v22 ) v14 = Number ; else v14 = Number ; gen_bfi ( v39 , v45 , v39 , @@v28@@ , v14 ) ; tcg_temp_free_i32 ( v45 ) ; } neon_store_reg ( @@v16@@ , v27 , v39 ) ; } else { v40 = neon_load_reg ( @@v16@@ , v27 ) ; if ( @@v28@@ ) tcg_gen_shri_i32 ( v40 , v40 , @@v28@@ ) ; if ( v22 == Number ) { gen_st32 ( v40 , v52 , Number ) ; } else if ( v22 ) { gen_st16 ( v40 , v52 , Number ) ; } else { gen_st8 ( v40 , v52 , Number ) ; } } @@v16@@ += v20 ; tcg_gen_addi_i32 ( v52 , v52 , Number << v22 ) ; } goto LABEL_147 ; } if ( ( ( @@a3@@ >> Number ) & Number ) != Number ) LABEL_122 : abort ( ) ; } if ( v22 == Number && ( @@v48@@ & Number ) != Number ) return Number L ; goto LABEL_123 ; } @@v53@@ = ( @@a3@@ >> Number ) & Number ; if ( ( @@a3@@ & Number ) == Number ) return Number L ; v22 = ( unsigned __int8 ) @@a3@@ >> Number ; v50 = ( ( @@a3@@ >> Number ) & Number ) + Number ; if ( v22 == Number ) { if ( ( ( @@a3@@ >> Number ) & Number ) != Number || ! @@v53@@ ) return Number L ; v22 = Number ; } if ( ( ( @@a3@@ >> Number ) & Number ) == Number && @@v53@@ == Number && ! v22 ) return Number L ; if ( ( ( @@a3@@ >> Number ) & Number ) == Number && @@v53@@ == Number ) return Number L ; v52 = tcg_temp_new_i32 ( ) ; load_reg_var ( @@a2@@ , v52 , @@v46@@ ) ; if ( ( ( @@a3@@ >> Number ) & Number ) != Number ) { if ( ( @@a3@@ & Number ) != Number ) v9 = Number ; else v9 = Number ; v19 = v9 ; for ( n = Number ; n < v50 ; ++ n ) { v38 = gen_load_and_replicate ( ( __int64 ) @@a2@@ , v52 , v22 ) ; v10 = neon_reg_offset ( @@v16@@ , Number ) ; tcg_gen_st_i32 ( v38 , cpu_env , v10 ) ; v11 = neon_reg_offset ( @@v16@@ , Number ) ; tcg_gen_st_i32 ( v38 , cpu_env , v11 ) ; tcg_temp_free_i32 ( v38 ) ; tcg_gen_addi_i32 ( v52 , v52 , Number << v22 ) ; @@v16@@ += v19 ; } } else { v37 = gen_load_and_replicate ( ( __int64 ) @@a2@@ , v52 , v22 ) ; v5 = neon_reg_offset ( @@v16@@ , Number ) ; tcg_gen_st_i32 ( v37 , cpu_env , v5 ) ; v6 = neon_reg_offset ( @@v16@@ , Number ) ; tcg_gen_st_i32 ( v37 , cpu_env , v6 ) ; if ( ( @@a3@@ & Number ) != Number ) { v7 = neon_reg_offset ( @@v16@@ + Number , Number ) ; tcg_gen_st_i32 ( v37 , cpu_env , v7 ) ; v8 = neon_reg_offset ( @@v16@@ + Number , Number ) ; tcg_gen_st_i32 ( v37 , cpu_env , v8 ) ; } tcg_temp_free_i32 ( v37 ) ; } LABEL_147 : tcg_temp_free_i32 ( v52 ) ; v18 = v50 << v22 ; LABEL_148 : if ( @@v47@@ != Number ) { @@v59@@ = load_reg ( @@a2@@ , @@v46@@ ) ; if ( @@v47@@ == Number ) { tcg_gen_addi_i32 ( @@v59@@ , @@v59@@ , v18 ) ; } else { @@v60@@ = load_reg ( @@a2@@ , @@v47@@ ) ; tcg_gen_add_i32 ( @@v59@@ , @@v59@@ , @@v60@@ ) ; tcg_temp_free_i32 ( @@v60@@ ) ; } store_reg ( ( __int64 ) @@a2@@ , @@v46@@ , @@v59@@ ) ; } return Number L ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "r16"}, {"n": "a1", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 3, "t": "_DWORD"}, "location": "r64"}, {"n": "v60", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}, {"n": "v59", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s16"}, {"n": "v56", "t": {"T": 1, "n": "int", "s": 4}, "location": "s24"}, {"n": "v55", "t": {"T": 1, "n": "int", "s": 4}, "location": "s28"}, {"n": "v54", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s32"}, {"n": "v53", "t": {"T": 1, "n": "int", "s": 4}, "location": "s36"}, {"n": "v48", "t": {"T": 1, "n": "int", "s": 4}, "location": "s48"}, {"n": "v47", "t": {"T": 1, "n": "int", "s": 4}, "location": "s56"}, {"n": "v46", "t": {"T": 1, "n": "int", "s": 4}, "location": "s60"}, {"n": "v28", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s76"}, {"n": "v16", "t": {"T": 1, "n": "int", "s": 4}, "location": "s96"}]}