{"name": "yaffs_qsort", "code": "unsigned __int64 __fastcall yaffs_qsort ( unsigned __int64 @@a1@@ , unsigned __int64 @@a2@@ , unsigned __int64 @@a3@@ , int ( __fastcall * @@a4@@ ) ( __int64 , __int64 ) ) { int v5 ; unsigned __int64 result ; int v7 ; int v8 ; __int64 @@v12@@ ; __int64 @@v13@@ ; __int64 @@v14@@ ; __int64 @@v15@@ ; __int64 @@v16@@ ; int v17 ; int v18 ; int v19 ; __int64 @@v20@@ ; int @@v21@@ ; int @@v22@@ ; int @@v23@@ ; __int64 v24 ; unsigned __int64 v25 ; char * i ; char * v27 ; char * l ; char * j ; __int64 v30 ; char * m ; char * @@v32@@ ; char * @@k@@ ; char * @@v34@@ ; char * @@v35@@ ; while ( Number ) { if ( ( @@a1@@ & Number ) != Number || ( @@a3@@ & Number ) != Number ) v5 = Number ; else v5 = @@a3@@ != Number ; @@v22@@ = v5 ; @@v23@@ = Number ; if ( @@a2@@ <= Number ) { for ( i = ( char * ) ( @@a1@@ + @@a3@@ ) ; ; i += @@a3@@ ) { result = @@a1@@ + @@a3@@ * @@a2@@ ; if ( ( unsigned __int64 ) i >= result ) break ; for ( j = i ; ( unsigned __int64 ) j > @@a1@@ && @@a4@@ ( ( __int64 ) & j [ - @@a3@@ ] , ( __int64 ) j ) > Number ; j -= @@a3@@ ) { if ( @@v22@@ ) { swapfunc ( j , & j [ - @@a3@@ ] , @@a3@@ , @@v22@@ ) ; } else { @@v12@@ = * ( _QWORD * ) j ; * ( _QWORD * ) j = * ( _QWORD * ) & j [ - @@a3@@ ] ; * ( _QWORD * ) & j [ - @@a3@@ ] = @@v12@@ ; } } } return result ; } v27 = ( char * ) ( @@a1@@ + @@a3@@ * ( @@a2@@ >> Number ) ) ; if ( @@a2@@ > Number ) { v30 = @@a1@@ ; v24 = @@a1@@ + @@a3@@ * ( @@a2@@ - Number ) ; if ( @@a2@@ > Number ) { @@v21@@ = ( @@a2@@ >> Number ) * @@a3@@ ; v30 = med3 ( @@a1@@ , @@v21@@ + @@a1@@ , Number * @@v21@@ + @@a1@@ , @@a4@@ ) ; v27 = ( char * ) med3 ( ( __int64 ) & v27 [ - @@v21@@ ] , ( __int64 ) v27 , ( __int64 ) & v27 [ @@v21@@ ] , @@a4@@ ) ; v24 = med3 ( Number * @@v21@@ + v24 , v24 - @@v21@@ , v24 , @@a4@@ ) ; } v27 = ( char * ) med3 ( v30 , ( __int64 ) v27 , v24 , @@a4@@ ) ; } if ( @@v22@@ ) { swapfunc ( ( char * ) @@a1@@ , v27 , @@a3@@ , @@v22@@ ) ; } else { @@v20@@ = * ( _QWORD * ) @@a1@@ ; * ( _QWORD * ) @@a1@@ = * ( _QWORD * ) v27 ; * ( _QWORD * ) v27 = @@v20@@ ; } @@v34@@ = ( char * ) ( @@a1@@ + @@a3@@ ) ; @@v35@@ = ( char * ) ( @@a1@@ + @@a3@@ ) ; @@v32@@ = ( char * ) ( @@a1@@ + @@a3@@ * ( @@a2@@ - Number ) ) ; for ( @@k@@ = @@v32@@ ; ; @@k@@ -= @@a3@@ ) { while ( @@v34@@ <= @@k@@ ) { v17 = @@a4@@ ( ( __int64 ) @@v34@@ , @@a1@@ ) ; if ( v17 > Number ) break ; if ( ! v17 ) { @@v23@@ = Number ; if ( @@v22@@ ) { swapfunc ( @@v35@@ , @@v34@@ , @@a3@@ , @@v22@@ ) ; } else { @@v16@@ = * ( _QWORD * ) @@v35@@ ; * ( _QWORD * ) @@v35@@ = * ( _QWORD * ) @@v34@@ ; * ( _QWORD * ) @@v34@@ = @@v16@@ ; } @@v35@@ += @@a3@@ ; } @@v34@@ += @@a3@@ ; } while ( @@v34@@ <= @@k@@ ) { v18 = @@a4@@ ( ( __int64 ) @@k@@ , @@a1@@ ) ; if ( v18 < Number ) break ; if ( ! v18 ) { @@v23@@ = Number ; if ( @@v22@@ ) { swapfunc ( @@k@@ , @@v32@@ , @@a3@@ , @@v22@@ ) ; } else { @@v15@@ = * ( _QWORD * ) @@k@@ ; * ( _QWORD * ) @@k@@ = * ( _QWORD * ) @@v32@@ ; * ( _QWORD * ) @@v32@@ = @@v15@@ ; } @@v32@@ -= @@a3@@ ; } @@k@@ -= @@a3@@ ; } if ( @@v34@@ > @@k@@ ) break ; if ( @@v22@@ ) { swapfunc ( @@v34@@ , @@k@@ , @@a3@@ , @@v22@@ ) ; } else { @@v14@@ = * ( _QWORD * ) @@v34@@ ; * ( _QWORD * ) @@v34@@ = * ( _QWORD * ) @@k@@ ; * ( _QWORD * ) @@k@@ = @@v14@@ ; } @@v23@@ = Number ; @@v34@@ += @@a3@@ ; } if ( ! @@v23@@ ) break ; v25 = @@a1@@ + @@a3@@ * @@a2@@ ; v7 = ( _DWORD ) @@v34@@ - ( _DWORD ) @@v35@@ ; if ( @@v34@@ - @@v35@@ > ( __int64 ) & @@v35@@ [ - @@a1@@ ] ) v7 = ( _DWORD ) @@v35@@ - @@a1@@ ; if ( v7 > Number ) swapfunc ( ( char * ) @@a1@@ , & @@v34@@ [ - v7 ] , v7 , @@v22@@ ) ; v8 = ( _DWORD ) @@v32@@ - ( _DWORD ) @@k@@ ; if ( ( __int64 ) ( v25 - ( _QWORD ) @@v32@@ - @@a3@@ ) <= @@v32@@ - @@k@@ ) v8 = v25 - ( _DWORD ) @@v32@@ - @@a3@@ ; if ( v8 > Number ) swapfunc ( @@v34@@ , ( char * ) ( v25 - v8 ) , v8 , @@v22@@ ) ; if ( @@a3@@ < ( int ) @@v34@@ - ( int ) @@v35@@ ) yaffs_qsort ( @@a1@@ , ( ( int ) @@v34@@ - ( int ) @@v35@@ ) / @@a3@@ , @@a3@@ , @@a4@@ ) ; v19 = ( _DWORD ) @@v32@@ - ( _DWORD ) @@k@@ ; result = ( int ) @@v32@@ - ( int ) @@k@@ ; if ( @@a3@@ >= result ) return result ; @@a1@@ = v25 - v19 ; @@a2@@ = v19 / @@a3@@ ; } for ( l = ( char * ) ( @@a1@@ + @@a3@@ ) ; ; l += @@a3@@ ) { result = @@a1@@ + @@a3@@ * @@a2@@ ; if ( ( unsigned __int64 ) l >= result ) break ; for ( m = l ; ( unsigned __int64 ) m > @@a1@@ && @@a4@@ ( ( __int64 ) & m [ - @@a3@@ ] , ( __int64 ) m ) > Number ; m -= @@a3@@ ) { if ( @@v22@@ ) { swapfunc ( m , & m [ - @@a3@@ ] , @@a3@@ , @@v22@@ ) ; } else { @@v13@@ = * ( _QWORD * ) m ; * ( _QWORD * ) m = * ( _QWORD * ) & m [ - @@a3@@ ] ; * ( _QWORD * ) & m [ - @@a3@@ ] = @@v13@@ ; } } } return result ; }", "source": [{"n": "a3", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "r16"}, {"n": "a4", "t": {"T": 9, "n": "int (__fastcall *)(__int64, __int64)"}, "location": "r24"}, {"n": "a1", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "r56"}, {"n": "a2", "t": {"T": 1, "n": "unsigned __int64", "s": 8}, "location": "r64"}, {"n": "v16", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s112"}, {"n": "v15", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s120"}, {"n": "v14", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s128"}, {"n": "v13", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s136"}, {"n": "v12", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s144"}, {"n": "v35", "t": {"T": 3, "t": "char"}, "location": "s24"}, {"n": "v34", "t": {"T": 3, "t": "char"}, "location": "s32"}, {"n": "k", "t": {"T": 3, "t": "char"}, "location": "s40"}, {"n": "v32", "t": {"T": 3, "t": "char"}, "location": "s48"}, {"n": "v23", "t": {"T": 1, "n": "int", "s": 4}, "location": "s76"}, {"n": "v22", "t": {"T": 1, "n": "int", "s": 4}, "location": "s80"}, {"n": "v21", "t": {"T": 1, "n": "int", "s": 4}, "location": "s84"}, {"n": "v20", "t": {"T": 1, "n": "__int64", "s": 8}, "location": "s96"}]}