{"name": "disas_neon_ls_insn", "code": "__int64 __fastcall disas_neon_ls_insn ( __int64 @@a1@@ , _DWORD * @@a2@@ , unsigned int @@a3@@ ) { int v4 ; int v5 ; int v6 ; unsigned int v7 ; int @@v9@@ ; unsigned int v10 ; unsigned int v11 ; int v12 ; int v13 ; int k ; int i ; int j ; int l ; int v18 ; unsigned int @@v19@@ ; int m ; int n ; unsigned int v22 ; unsigned int v23 ; unsigned int v24 ; unsigned int v25 ; unsigned int v26 ; unsigned int v27 ; unsigned int v28 ; unsigned int v29 ; unsigned int v30 ; unsigned int v31 ; unsigned int v32 ; unsigned int v33 ; unsigned int v34 ; unsigned int v35 ; unsigned int v36 ; int @@v37@@ ; int @@v38@@ ; unsigned int @@v39@@ ; int v40 ; int v41 ; int v42 ; int v43 ; int v44 ; int v45 ; unsigned int @@v46@@ ; int @@v47@@ ; int @@v48@@ ; unsigned int v49 ; unsigned int v50 ; unsigned int @@v51@@ ; unsigned int @@v52@@ ; if ( ! vfp_enabled ( @@a1@@ ) ) return Number L ; if ( arm_feature ( @@a1@@ , Number ) ) { @@v9@@ = ( ( unsigned __int16 ) @@a3@@ >> Number ) | ( @@a3@@ >> Number ) & Number ; } else { if ( ( @@a3@@ & Number ) != Number ) return Number L ; @@v9@@ = ( unsigned __int16 ) @@a3@@ >> Number ; } @@v37@@ = HIWORD ( @@a3@@ ) & Number ; @@v38@@ = @@a3@@ & Number ; @@v39@@ = new_tmp ( ) ; if ( ( @@a3@@ & Number ) != Number ) { v41 = ( @@a3@@ >> Number ) & Number ; if ( v41 == Number ) { if ( ( @@a3@@ & Number ) == Number ) return Number L ; v42 = ( unsigned __int8 ) @@a3@@ >> Number ; v44 = ( ( @@a3@@ >> Number ) & Number ) + Number ; if ( ( @@a3@@ & Number ) != Number ) v4 = Number ; else v4 = Number ; v12 = v4 ; load_reg_var ( @@a2@@ , @@v39@@ , @@v37@@ ) ; for ( i = Number ; i < v44 ; ++ i ) { if ( v42 == Number ) return Number L ; if ( ( unsigned __int8 ) ( ( unsigned __int8 ) @@a3@@ >> Number ) > Number ) abort ( ) ; if ( v42 == Number ) { v28 = gen_ld32 ( @@v39@@ , Number ) ; } else if ( ( unsigned __int8 ) @@a3@@ >> Number ) { v28 = gen_ld16u ( @@v39@@ , Number ) ; gen_neon_dup_low16 ( v28 ) ; } else { v28 = gen_ld8u ( @@v39@@ , Number ) ; gen_neon_dup_u8 ( v28 , Number ) ; } tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , Number << v42 ) ; v35 = new_tmp ( ) ; tcg_gen_mov_i32 ( v35 , v28 ) ; neon_store_reg ( @@v9@@ , Number , v35 ) ; neon_store_reg ( @@v9@@ , Number , v28 ) ; @@v9@@ += v12 ; } v11 = v44 << v42 ; } else { v18 = ( @@a3@@ >> Number ) & Number ; if ( v41 == Number ) { @@v19@@ = Number ; if ( ( @@a3@@ & Number ) != Number ) v6 = Number ; else v6 = Number ; v13 = v6 ; } else if ( v41 ) { @@v19@@ = Number * ( ( @@a3@@ >> Number ) & Number ) ; if ( ( @@a3@@ & Number ) != Number ) v5 = Number ; else v5 = Number ; v13 = v5 ; } else { @@v19@@ = Number * ( ( @@a3@@ >> Number ) & Number ) ; v13 = Number ; } v45 = ( ( @@a3@@ >> Number ) & Number ) + Number ; load_reg_var ( @@a2@@ , @@v39@@ , @@v37@@ ) ; for ( j = Number ; j < v45 ; ++ j ) { if ( ( @@a3@@ & Number ) != Number ) { if ( v41 == Number ) { v29 = gen_ld32 ( @@v39@@ , Number ) ; } else if ( v41 ) { v29 = gen_ld16u ( @@v39@@ , Number ) ; } else { v29 = gen_ld8u ( @@v39@@ , Number ) ; } if ( v41 != Number ) { v36 = neon_load_reg ( @@v9@@ , v18 ) ; if ( v41 ) v7 = Number ; else v7 = Number ; gen_bfi ( v29 , v36 , v29 , @@v19@@ , v7 ) ; dead_tmp ( v36 ) ; } neon_store_reg ( @@v9@@ , v18 , v29 ) ; } else { v30 = neon_load_reg ( @@v9@@ , v18 ) ; if ( @@v19@@ ) tcg_gen_shri_i32 ( v30 , v30 , @@v19@@ ) ; if ( v41 == Number ) { gen_st32 ( v30 , @@v39@@ , Number ) ; } else if ( v41 ) { gen_st16 ( v30 , @@v39@@ , Number ) ; } else { gen_st8 ( v30 , @@v39@@ , Number ) ; } } @@v9@@ += v13 ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , Number << v41 ) ; } v11 = v45 << v41 ; } } else { @@v46@@ = ( @@a3@@ >> Number ) & Number ; v40 = ( unsigned __int8 ) @@a3@@ >> Number ; if ( @@v46@@ > Number ) return Number L ; v43 = * ( ( _DWORD * ) & neon_ls_element_type + Number * ( int ) @@v46@@ ) ; @@v47@@ = * ( ( _DWORD * ) & unk_29644 + Number * ( int ) @@v46@@ ) ; @@v48@@ = dword_29648 [ Number * @@v46@@ ] ; if ( v40 == Number && ( @@v48@@ | @@v47@@ ) != Number ) return Number L ; load_reg_var ( @@a2@@ , @@v39@@ , @@v37@@ ) ; v10 = @@v47@@ << v40 ; for ( k = Number ; k < v43 ; ++ k ) { if ( @@v47@@ > Number || @@v47@@ == Number && v43 == Number ) { load_reg_var ( @@a2@@ , @@v39@@ , @@v37@@ ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , k << v40 ) ; } else if ( @@v47@@ == Number && v43 == Number && k == Number ) { load_reg_var ( @@a2@@ , @@v39@@ , @@v37@@ ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , Number << v40 ) ; } if ( v40 == Number ) { if ( ( @@a3@@ & Number ) != Number ) { v49 = gen_ld64 ( @@v39@@ , Number ) ; neon_store_reg64 ( v49 , @@v9@@ ) ; tcg_temp_free_i64 ( v49 ) ; } else { v50 = tcg_temp_new_i64 ( ) ; neon_load_reg64 ( v50 , @@v9@@ ) ; gen_st64 ( v50 , @@v39@@ , Number ) ; } tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; } else { for ( l = Number ; l <= Number ; ++ l ) { if ( v40 == Number ) { if ( ( @@a3@@ & Number ) != Number ) { v22 = gen_ld32 ( @@v39@@ , Number ) ; neon_store_reg ( @@v9@@ , l , v22 ) ; } else { v23 = neon_load_reg ( @@v9@@ , l ) ; gen_st32 ( v23 , @@v39@@ , Number ) ; } tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; } else if ( v40 == Number ) { if ( ( @@a3@@ & Number ) != Number ) { v24 = gen_ld16u ( @@v39@@ , Number ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; v31 = gen_ld16u ( @@v39@@ , Number ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; tcg_gen_shli_i32 ( v31 , v31 , Number ) ; tcg_gen_or_i32 ( v24 , v24 , v31 ) ; dead_tmp ( v31 ) ; neon_store_reg ( @@v9@@ , l , v24 ) ; } else { v25 = neon_load_reg ( @@v9@@ , l ) ; v32 = new_tmp ( ) ; tcg_gen_shri_i32 ( v32 , v25 , Number ) ; gen_st16 ( v25 , @@v39@@ , Number ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; gen_st16 ( v32 , @@v39@@ , Number ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; } } else if ( ( @@a3@@ & Number ) != Number ) { v33 = Number ; for ( m = Number ; m <= Number ; ++ m ) { v26 = gen_ld8u ( @@v39@@ , Number ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; if ( m ) { tcg_gen_shli_i32 ( v26 , v26 , Number * m ) ; tcg_gen_or_i32 ( v33 , v33 , v26 ) ; dead_tmp ( v26 ) ; } else { v33 = v26 ; } } neon_store_reg ( @@v9@@ , l , v33 ) ; } else { v34 = neon_load_reg ( @@v9@@ , l ) ; for ( n = Number ; n <= Number ; ++ n ) { v27 = new_tmp ( ) ; if ( n ) tcg_gen_shri_i32 ( v27 , v34 , Number * n ) ; else tcg_gen_mov_i32 ( v27 , v34 ) ; gen_st8 ( v27 , @@v39@@ , Number ) ; tcg_gen_addi_i32 ( @@v39@@ , @@v39@@ , v10 ) ; } dead_tmp ( v34 ) ; } } } @@v9@@ += @@v48@@ ; } v11 = Number * v43 ; } dead_tmp ( @@v39@@ ) ; if ( @@v38@@ != Number ) { @@v51@@ = load_reg ( @@a2@@ , @@v37@@ ) ; if ( @@v38@@ == Number ) { tcg_gen_addi_i32 ( @@v51@@ , @@v51@@ , v11 ) ; } else { @@v52@@ = load_reg ( @@a2@@ , @@v38@@ ) ; tcg_gen_add_i32 ( @@v51@@ , @@v51@@ , @@v52@@ ) ; dead_tmp ( @@v52@@ ) ; } store_reg ( ( __int64 ) @@a2@@ , @@v37@@ , @@v51@@ ) ; } 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": "v52", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s12"}, {"n": "v51", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s16"}, {"n": "v48", "t": {"T": 1, "n": "int", "s": 4}, "location": "s24"}, {"n": "v47", "t": {"T": 1, "n": "int", "s": 4}, "location": "s28"}, {"n": "v46", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s32"}, {"n": "v39", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s44"}, {"n": "v38", "t": {"T": 1, "n": "int", "s": 4}, "location": "s52"}, {"n": "v37", "t": {"T": 1, "n": "int", "s": 4}, "location": "s56"}, {"n": "v19", "t": {"T": 1, "n": "unsigned int", "s": 4}, "location": "s72"}, {"n": "v9", "t": {"T": 1, "n": "int", "s": 4}, "location": "s88"}]}