summaryrefslogtreecommitdiff
path: root/asm/SDK/OS/OSSemaphore.s
blob: 404f964e03591716879946638a4968c14b5b1c36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global OSInitSemaphore
OSInitSemaphore:
/* 80270E68 0026CAC8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80270E6C 0026CACC  7C 08 02 A6 */	mflr r0
/* 80270E70 0026CAD0  90 01 00 24 */	stw r0, 0x24(r1)
/* 80270E74 0026CAD4  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80270E78 0026CAD8  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80270E7C 0026CADC  7C 9E 23 78 */	mr r30, r4
/* 80270E80 0026CAE0  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80270E84 0026CAE4  7C 7D 1B 78 */	mr r29, r3
/* 80270E88 0026CAE8  4B FF D8 D5 */	bl OSDisableInterrupts
/* 80270E8C 0026CAEC  7C 7F 1B 78 */	mr r31, r3
/* 80270E90 0026CAF0  38 7D 00 04 */	addi r3, r29, 4
/* 80270E94 0026CAF4  48 00 04 55 */	bl OSInitThreadQueue
/* 80270E98 0026CAF8  93 DD 00 00 */	stw r30, 0(r29)
/* 80270E9C 0026CAFC  7F E3 FB 78 */	mr r3, r31
/* 80270EA0 0026CB00  4B FF D8 E5 */	bl OSRestoreInterrupts
/* 80270EA4 0026CB04  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80270EA8 0026CB08  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80270EAC 0026CB0C  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80270EB0 0026CB10  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80270EB4 0026CB14  7C 08 03 A6 */	mtlr r0
/* 80270EB8 0026CB18  38 21 00 20 */	addi r1, r1, 0x20
/* 80270EBC 0026CB1C  4E 80 00 20 */	blr

.global OSWaitSemaphore
OSWaitSemaphore:
/* 80270EC0 0026CB20  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80270EC4 0026CB24  7C 08 02 A6 */	mflr r0
/* 80270EC8 0026CB28  90 01 00 24 */	stw r0, 0x24(r1)
/* 80270ECC 0026CB2C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80270ED0 0026CB30  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80270ED4 0026CB34  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80270ED8 0026CB38  7C 7D 1B 78 */	mr r29, r3
/* 80270EDC 0026CB3C  4B FF D8 81 */	bl OSDisableInterrupts
/* 80270EE0 0026CB40  7C 7F 1B 78 */	mr r31, r3
/* 80270EE4 0026CB44  48 00 00 0C */	b lbl_80270EF0
lbl_80270EE8:
/* 80270EE8 0026CB48  38 7D 00 04 */	addi r3, r29, 4
/* 80270EEC 0026CB4C  48 00 14 89 */	bl OSSleepThread
lbl_80270EF0:
/* 80270EF0 0026CB50  83 DD 00 00 */	lwz r30, 0(r29)
/* 80270EF4 0026CB54  2C 1E 00 00 */	cmpwi r30, 0
/* 80270EF8 0026CB58  40 81 FF F0 */	ble lbl_80270EE8
/* 80270EFC 0026CB5C  80 9D 00 00 */	lwz r4, 0(r29)
/* 80270F00 0026CB60  7F E3 FB 78 */	mr r3, r31
/* 80270F04 0026CB64  38 04 FF FF */	addi r0, r4, -1
/* 80270F08 0026CB68  90 1D 00 00 */	stw r0, 0(r29)
/* 80270F0C 0026CB6C  4B FF D8 79 */	bl OSRestoreInterrupts
/* 80270F10 0026CB70  7F C3 F3 78 */	mr r3, r30
/* 80270F14 0026CB74  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80270F18 0026CB78  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80270F1C 0026CB7C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80270F20 0026CB80  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80270F24 0026CB84  7C 08 03 A6 */	mtlr r0
/* 80270F28 0026CB88  38 21 00 20 */	addi r1, r1, 0x20
/* 80270F2C 0026CB8C  4E 80 00 20 */	blr

.global OSTryWaitSemaphore
OSTryWaitSemaphore:
/* 80270F30 0026CB90  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80270F34 0026CB94  7C 08 02 A6 */	mflr r0
/* 80270F38 0026CB98  90 01 00 14 */	stw r0, 0x14(r1)
/* 80270F3C 0026CB9C  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80270F40 0026CBA0  93 C1 00 08 */	stw r30, 8(r1)
/* 80270F44 0026CBA4  7C 7E 1B 78 */	mr r30, r3
/* 80270F48 0026CBA8  4B FF D8 15 */	bl OSDisableInterrupts
/* 80270F4C 0026CBAC  83 FE 00 00 */	lwz r31, 0(r30)
/* 80270F50 0026CBB0  2C 1F 00 00 */	cmpwi r31, 0
/* 80270F54 0026CBB4  40 81 00 0C */	ble lbl_80270F60
/* 80270F58 0026CBB8  38 1F FF FF */	addi r0, r31, -1
/* 80270F5C 0026CBBC  90 1E 00 00 */	stw r0, 0(r30)
lbl_80270F60:
/* 80270F60 0026CBC0  4B FF D8 25 */	bl OSRestoreInterrupts
/* 80270F64 0026CBC4  7F E3 FB 78 */	mr r3, r31
/* 80270F68 0026CBC8  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80270F6C 0026CBCC  83 C1 00 08 */	lwz r30, 8(r1)
/* 80270F70 0026CBD0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80270F74 0026CBD4  7C 08 03 A6 */	mtlr r0
/* 80270F78 0026CBD8  38 21 00 10 */	addi r1, r1, 0x10
/* 80270F7C 0026CBDC  4E 80 00 20 */	blr

.global OSSignalSemaphore
OSSignalSemaphore:
/* 80270F80 0026CBE0  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80270F84 0026CBE4  7C 08 02 A6 */	mflr r0
/* 80270F88 0026CBE8  90 01 00 24 */	stw r0, 0x24(r1)
/* 80270F8C 0026CBEC  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80270F90 0026CBF0  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80270F94 0026CBF4  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80270F98 0026CBF8  7C 7D 1B 78 */	mr r29, r3
/* 80270F9C 0026CBFC  4B FF D7 C1 */	bl OSDisableInterrupts
/* 80270FA0 0026CC00  83 DD 00 00 */	lwz r30, 0(r29)
/* 80270FA4 0026CC04  7C 7F 1B 78 */	mr r31, r3
/* 80270FA8 0026CC08  38 7D 00 04 */	addi r3, r29, 4
/* 80270FAC 0026CC0C  38 1E 00 01 */	addi r0, r30, 1
/* 80270FB0 0026CC10  90 1D 00 00 */	stw r0, 0(r29)
/* 80270FB4 0026CC14  48 00 14 AD */	bl OSWakeupThread
/* 80270FB8 0026CC18  7F E3 FB 78 */	mr r3, r31
/* 80270FBC 0026CC1C  4B FF D7 C9 */	bl OSRestoreInterrupts
/* 80270FC0 0026CC20  7F C3 F3 78 */	mr r3, r30
/* 80270FC4 0026CC24  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80270FC8 0026CC28  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80270FCC 0026CC2C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80270FD0 0026CC30  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80270FD4 0026CC34  7C 08 03 A6 */	mtlr r0
/* 80270FD8 0026CC38  38 21 00 20 */	addi r1, r1, 0x20
/* 80270FDC 0026CC3C  4E 80 00 20 */	blr