prime/asm/Dolphin/GBA/GBAGetProcessStatus.s

105 lines
5.0 KiB
ArmAsm

.include "macros.inc"
.section .text, "ax"
.global GBAGetProcessStatus
GBAGetProcessStatus:
/* 803C98E8 003C6848 7C 08 02 A6 */ mflr r0
/* 803C98EC 003C684C 3C A0 80 57 */ lis r5, __GBA@ha
/* 803C98F0 003C6850 90 01 00 04 */ stw r0, 4(r1)
/* 803C98F4 003C6854 54 63 40 2E */ slwi r3, r3, 8
/* 803C98F8 003C6858 38 05 A1 A0 */ addi r0, r5, __GBA@l
/* 803C98FC 003C685C 94 21 FF C8 */ stwu r1, -0x38(r1)
/* 803C9900 003C6860 BE E1 00 14 */ stmw r23, 0x14(r1)
/* 803C9904 003C6864 7E E0 1A 14 */ add r23, r0, r3
/* 803C9908 003C6868 3B 04 00 00 */ addi r24, r4, 0
/* 803C990C 003C686C 3B F7 00 40 */ addi r31, r23, 0x40
/* 803C9910 003C6870 4B FB 7D 51 */ bl OSDisableInterrupts
/* 803C9914 003C6874 80 1F 00 14 */ lwz r0, 0x14(r31)
/* 803C9918 003C6878 3B A3 00 00 */ addi r29, r3, 0
/* 803C991C 003C687C 28 00 00 00 */ cmplwi r0, 0
/* 803C9920 003C6880 41 82 01 04 */ beq lbl_803C9A24
/* 803C9924 003C6884 80 7F 00 34 */ lwz r3, 0x34(r31)
/* 803C9928 003C6888 3B C0 00 00 */ li r30, 0
/* 803C992C 003C688C 80 1F 00 28 */ lwz r0, 0x28(r31)
/* 803C9930 003C6890 3B 80 00 02 */ li r28, 2
/* 803C9934 003C6894 1C A3 00 64 */ mulli r5, r3, 0x64
/* 803C9938 003C6898 80 9F 00 64 */ lwz r4, 0x64(r31)
/* 803C993C 003C689C 80 7F 00 2C */ lwz r3, 0x2c(r31)
/* 803C9940 003C68A0 7C 85 23 D6 */ divw r4, r5, r4
/* 803C9944 003C68A4 7C 63 F2 78 */ xor r3, r3, r30
/* 803C9948 003C68A8 7C 00 F2 78 */ xor r0, r0, r30
/* 803C994C 003C68AC 7C 60 03 79 */ or. r0, r3, r0
/* 803C9950 003C68B0 54 9B 06 3E */ clrlwi r27, r4, 0x18
/* 803C9954 003C68B4 41 82 00 C0 */ beq lbl_803C9A14
/* 803C9958 003C68B8 4B FB BA 51 */ bl OSGetTime
/* 803C995C 003C68BC 3E E0 80 00 */ lis r23, 0x800000F8@ha
/* 803C9960 003C68C0 80 DF 00 2C */ lwz r6, 0x2c(r31)
/* 803C9964 003C68C4 80 17 00 F8 */ lwz r0, 0x800000F8@l(r23)
/* 803C9968 003C68C8 3C A0 10 62 */ lis r5, 0x10624DD3@ha
/* 803C996C 003C68CC 7F 26 20 10 */ subfc r25, r6, r4
/* 803C9970 003C68D0 80 9F 00 28 */ lwz r4, 0x28(r31)
/* 803C9974 003C68D4 3B E5 4D D3 */ addi r31, r5, 0x10624DD3@l
/* 803C9978 003C68D8 54 00 F0 BE */ srwi r0, r0, 2
/* 803C997C 003C68DC 7C 1F 00 16 */ mulhwu r0, r31, r0
/* 803C9980 003C68E0 7F 44 19 10 */ subfe r26, r4, r3
/* 803C9984 003C68E4 54 06 D1 BE */ srwi r6, r0, 6
/* 803C9988 003C68E8 38 7A 00 00 */ addi r3, r26, 0
/* 803C998C 003C68EC 38 99 00 00 */ addi r4, r25, 0
/* 803C9990 003C68F0 38 A0 00 00 */ li r5, 0
/* 803C9994 003C68F4 4B FC 02 39 */ bl __div2i
/* 803C9998 003C68F8 38 E0 15 7C */ li r7, 0x157c
/* 803C999C 003C68FC 6C 65 80 00 */ xoris r5, r3, 0x8000
/* 803C99A0 003C6900 6F C3 80 00 */ xoris r3, r30, 0x8000
/* 803C99A4 003C6904 7C 07 20 10 */ subfc r0, r7, r4
/* 803C99A8 003C6908 7C 63 29 10 */ subfe r3, r3, r5
/* 803C99AC 003C690C 7C 65 29 10 */ subfe r3, r5, r5
/* 803C99B0 003C6910 7C 63 00 D1 */ neg. r3, r3
/* 803C99B4 003C6914 41 82 00 50 */ beq lbl_803C9A04
/* 803C99B8 003C6918 80 77 00 F8 */ lwz r3, 0xf8(r23)
/* 803C99BC 003C691C 7C BE 39 D6 */ mullw r5, r30, r7
/* 803C99C0 003C6920 54 63 F0 BE */ srwi r3, r3, 2
/* 803C99C4 003C6924 7C 7F 18 16 */ mulhwu r3, r31, r3
/* 803C99C8 003C6928 54 66 D1 BE */ srwi r6, r3, 6
/* 803C99CC 003C692C 7C 66 38 16 */ mulhwu r3, r6, r7
/* 803C99D0 003C6930 7C A5 1A 14 */ add r5, r5, r3
/* 803C99D4 003C6934 7C 66 F1 D6 */ mullw r3, r6, r30
/* 803C99D8 003C6938 7F 60 FE 70 */ srawi r0, r27, 0x1f
/* 803C99DC 003C693C 7C A5 1A 14 */ add r5, r5, r3
/* 803C99E0 003C6940 7C 60 C9 D6 */ mullw r3, r0, r25
/* 803C99E4 003C6944 7C 1B C8 16 */ mulhwu r0, r27, r25
/* 803C99E8 003C6948 7C 63 02 14 */ add r3, r3, r0
/* 803C99EC 003C694C 7C 1B D1 D6 */ mullw r0, r27, r26
/* 803C99F0 003C6950 7C 9B C9 D6 */ mullw r4, r27, r25
/* 803C99F4 003C6954 7C C6 39 D6 */ mullw r6, r6, r7
/* 803C99F8 003C6958 7C 63 02 14 */ add r3, r3, r0
/* 803C99FC 003C695C 4B FC 01 D1 */ bl __div2i
/* 803C9A00 003C6960 7C 9B 23 78 */ mr r27, r4
lbl_803C9A04:
/* 803C9A04 003C6964 57 60 06 3E */ clrlwi r0, r27, 0x18
/* 803C9A08 003C6968 28 00 00 64 */ cmplwi r0, 0x64
/* 803C9A0C 003C696C 41 80 00 08 */ blt lbl_803C9A14
/* 803C9A10 003C6970 3B 60 00 64 */ li r27, 0x64
lbl_803C9A14:
/* 803C9A14 003C6974 28 18 00 00 */ cmplwi r24, 0
/* 803C9A18 003C6978 41 82 00 24 */ beq lbl_803C9A3C
/* 803C9A1C 003C697C 9B 78 00 00 */ stb r27, 0(r24)
/* 803C9A20 003C6980 48 00 00 1C */ b lbl_803C9A3C
lbl_803C9A24:
/* 803C9A24 003C6984 80 17 00 1C */ lwz r0, 0x1c(r23)
/* 803C9A28 003C6988 28 00 00 00 */ cmplwi r0, 0
/* 803C9A2C 003C698C 41 82 00 0C */ beq lbl_803C9A38
/* 803C9A30 003C6990 3B 80 00 02 */ li r28, 2
/* 803C9A34 003C6994 48 00 00 08 */ b lbl_803C9A3C
lbl_803C9A38:
/* 803C9A38 003C6998 3B 80 00 00 */ li r28, 0
lbl_803C9A3C:
/* 803C9A3C 003C699C 7F A3 EB 78 */ mr r3, r29
/* 803C9A40 003C69A0 4B FB 7C 49 */ bl OSRestoreInterrupts
/* 803C9A44 003C69A4 7F 83 E3 78 */ mr r3, r28
/* 803C9A48 003C69A8 BA E1 00 14 */ lmw r23, 0x14(r1)
/* 803C9A4C 003C69AC 80 01 00 3C */ lwz r0, 0x3c(r1)
/* 803C9A50 003C69B0 38 21 00 38 */ addi r1, r1, 0x38
/* 803C9A54 003C69B4 7C 08 03 A6 */ mtlr r0
/* 803C9A58 003C69B8 4E 80 00 20 */ blr