Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Assembleur :
- ; ======================================================
- ; Subroutine sceGe_lazy_31129B95 - Address 0x00000140
- ; Exported in sceGe_lazy
- sceGe_lazy_31129B95:
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x00000140: 0x3C010000 '...<' - lui $at, 0x0
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x00000144: 0x8C220B80 '..".' - lw $v0, 2944($at)
- 0x00000148: 0x1482000C '....' - bne $a0, $v0, loc_0000017C
- 0x0000014C: 0x00000000 '....' - nop
- 0x00000150: 0x10A0000A '....' - beqz $a1, loc_0000017C
- ; Data ref 0x00000B84 ... 0x00000000 0x00000000 0x00000064 0x00000000
- 0x00000154: 0xAC250B84 '..%.' - sw $a1, 2948($at)
- ; Data ref 0x00000B88 ... 0x00000000 0x00000064 0x00000000 0x00000000
- 0x00000158: 0x8C230B88 '..#.' - lw $v1, 2952($at)
- ; Data ref 0x00000B8C ... 0x00000064 0x00000000 0x00000000 0x00000000
- 0x0000015C: 0x8C260B8C '..&.' - lw $a2, 2956($at)
- 0x00000160: 0x24630001 '..c$' - addiu $v1, $v1, 1
- ; Data ref 0x00000B88 ... 0x00000000 0x00000064 0x00000000 0x00000000
- 0x00000164: 0xAC230B88 '..#.' - sw $v1, 2952($at)
- 0x00000168: 0x0066182B '+.f.' - sltu $v1, $v1, $a2
- 0x0000016C: 0x10600003 '..`.' - beqz $v1, loc_0000017C
- 0x00000170: 0x00000000 '....' - nop
- 0x00000174: 0x03E00008 '....' - jr $ra
- 0x00000178: 0x00001021 '!...' - move $v0, $zr
- loc_0000017C: ; Refs: 0x00000148 0x00000150 0x0000016C
- 0x0000017C: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16
- 0x00000180: 0xAFA40000 '....' - sw $a0, 0($sp)
- 0x00000184: 0xAFA50004 '....' - sw $a1, 4($sp)
- 0x00000188: 0x0440000D '..@.' - bltz $v0, loc_000001C0
- 0x0000018C: 0xAFBF0008 '....' - sw $ra, 8($sp)
- ; Data ref 0x00000B84 ... 0x00000000 0x00000000 0x00000064 0x00000000
- 0x00000190: 0x8C270B84 '..'.' - lw $a3, 2948($at)
- loc_00000194: ; Refs: 0x000001A4
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x00000194: 0xC0260B80 '..&.' - ll $a2, 2944($at)
- 0x00000198: 0x14C20009 '....' - bne $a2, $v0, loc_000001C0
- 0x0000019C: 0x2403FFFF '...$' - li $v1, -1
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x000001A0: 0xE0230B80 '..#.' - sc $v1, 2944($at)
- 0x000001A4: 0x1060FFFB '..`.' - beqz $v1, loc_00000194
- 0x000001A8: 0x00000000 '....' - nop
- 0x000001AC: 0x00C02021 '! ..' - move $a0, $a2
- 0x000001B0: 0x0C000082 '....' - jal sub_00000208
- 0x000001B4: 0x00E02821 '!(..' - move $a1, $a3
- 0x000001B8: 0x8FA40000 '....' - lw $a0, 0($sp)
- 0x000001BC: 0x8FA50004 '....' - lw $a1, 4($sp)
- loc_000001C0: ; Refs: 0x00000188 0x00000198
- 0x000001C0: 0x0C000082 '....' - jal sub_00000208
- 0x000001C4: 0x00000000 '....' - nop
- 0x000001C8: 0x0440000C '..@.' - bltz $v0, loc_000001FC
- 0x000001CC: 0x00000000 '....' - nop
- 0x000001D0: 0x8FA40000 '....' - lw $a0, 0($sp)
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x000001D4: 0x3C010000 '...<' - lui $at, 0x0
- loc_000001D8: ; Refs: 0x000001E8
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x000001D8: 0xC0230B80 '..#.' - ll $v1, 2944($at)
- 0x000001DC: 0x04610007 '..a.' - bgez $v1, loc_000001FC
- 0x000001E0: 0x00801821 '!...' - move $v1, $a0
- ; Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- 0x000001E4: 0xE0230B80 '..#.' - sc $v1, 2944($at)
- 0x000001E8: 0x1060FFFB '..`.' - beqz $v1, loc_000001D8
- 0x000001EC: 0x00000000 '....' - nop
- 0x000001F0: 0x8FA50004 '....' - lw $a1, 4($sp)
- ; Data ref 0x00000B84 ... 0x00000000 0x00000000 0x00000064 0x00000000
- 0x000001F4: 0xAC250B84 '..%.' - sw $a1, 2948($at)
- ; Data ref 0x00000B88 ... 0x00000000 0x00000064 0x00000000 0x00000000
- 0x000001F8: 0xAC200B88 '.. .' - sw $zr, 2952($at)
- loc_000001FC: ; Refs: 0x000001C8 0x000001DC
- 0x000001FC: 0x8FBF0008 '....' - lw $ra, 8($sp)
- 0x00000200: 0x03E00008 '....' - jr $ra
- 0x00000204: 0x27BD0010 '...'' - addiu $sp, $sp, 16
- Code C généré :
- sceGe_lazy_31129B95(...) // at 0x00000140
- {
- & at = 0x00000; // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- & v0 = *(s32*)(at + 2944); // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- & if (a0 != v0)
- & goto loc_0000017C;
- & *(s32*)(at + 2948) = a1; // Data ref 0x00000B84 ... 0x00000000 0x00000000 0x00000064 0x00000000
- & if (a1 == 0)
- & goto loc_0000017C;
- & v1 = *(s32*)(at + 2952); // Data ref 0x00000B88 ... 0x00000000 0x00000064 0x00000000 0x00000000
- & a2 = *(s32*)(at + 2956); // Data ref 0x00000B8C ... 0x00000064 0x00000000 0x00000000 0x00000000
- & v1 = v1 + 1;
- & *(s32*)(at + 2952) = v1; // Data ref 0x00000B88 ... 0x00000000 0x00000064 0x00000000 0x00000000
- & v1 = (u32)v1 < (u32)a2;
- & if (v1 == 0)
- & goto loc_0000017C;
- & v0 = 0;
- & return (v1 << 32) | v0;
- loc_0000017C:
- & sp = sp - 16;
- & *(s32*)(sp + 0) = a0;
- & *(s32*)(sp + 4) = a1;
- & *(s32*)(sp + 8) = ra;
- & if (v0 < 0)
- & goto loc_000001C0;
- & a3 = *(s32*)(at + 2948); // Data ref 0x00000B84 ... 0x00000000 0x00000000 0x00000064 0x00000000
- loc_00000194:
- & asm("ll $a2, 2944($at)"); // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- & v1 = -1;
- & if (a2 != v0)
- & goto loc_000001C0;
- & asm("sc $v1, 2944($at)"); // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- & if (v1 == 0)
- & goto loc_00000194;
- & a0 = a2;
- & a1 = a3;
- v0, v1 = sub_00000208(...);
- a0 = *(s32*)(sp + 0);
- a1 = *(s32*)(sp + 4);
- loc_000001C0:
- v0, v1 = sub_00000208(...);
- if (v0 < 0)
- goto loc_000001FC;
- a0 = *(s32*)(sp + 0);
- at = 0x00000; // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- loc_000001D8:
- asm("ll $v1, 2944($at)"); // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- cond = (v1 >= 0);
- v1 = a0;
- if (cond)
- goto loc_000001FC;
- asm("sc $v1, 2944($at)"); // Data ref 0x00000B80 ... 0xFFFFFFFF 0x00000000 0x00000000 0x00000064
- if (v1 == 0)
- goto loc_000001D8;
- a1 = *(s32*)(sp + 4);
- *(s32*)(at + 2948) = a1; // Data ref 0x00000B84 ... 0x00000000 0x00000000 0x00000064 0x00000000
- *(s32*)(at + 2952) = 0; // Data ref 0x00000B88 ... 0x00000000 0x00000064 0x00000000 0x00000000
- loc_000001FC:
- ra = *(s32*)(sp + 8);
- sp = sp + 16;
- return (v1 << 32) | v0;
- }
- Code C reversé (non complet) :
- s32 sceGe_lazy_31129B95(s32 arg0, s32 arg1)
- {
- s32 tmp0;
- s32 tmp1;
- if (arg0 == g_b80) {
- g_b84 = arg1;
- if (arg1 != 0) {
- g_b88++;
- if (g_b88 < g_b8c) {
- return 0;
- }
- }
- }
- // loc_0000017C
- if (g_b80 < 0) {
- goto loc_000001C0;
- }
- do {
- /* begin atomic RMW */
- asm __volatile__(
- "ll %0, (%1)"
- : "=r" (tmp0)
- : "r" (&g_b80)
- );
- tmp1 = -1;
- if (tmp0 != g_b80) {
- goto loc_000001C0;
- }
- /* end atomic RMW */
- /* if an atomic update as occured, %0 will be set to 1 */
- asm __volatile__(
- "sc %0, (%1)"
- : "=r" (tmp1)
- : "r" (&g_b80)
- );
- } while (!tmp1);
- $at = 0
- $a0 = tmp0
- $a1 = g_b84
- $a2 = g_b8c
- $a3 = g_b84
- $v0 = g_b80
- $v1 = -1
- loc_000001C0:
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement