summaryrefslogtreecommitdiff
path: root/asm/SDK/DWC/gamespy/gpiProfile.s
blob: 4c819809b149835c0c323d74f9ec8b7379cb5182 (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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
.include "macros.inc"

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

.global gpiProfilesTableHash
gpiProfilesTableHash:
/* 80345554 003411B4  80 63 00 00 */	lwz r3, 0(r3)
/* 80345558 003411B8  7C 03 23 D6 */	divw r0, r3, r4
/* 8034555C 003411BC  7C 00 21 D6 */	mullw r0, r0, r4
/* 80345560 003411C0  7C 60 18 50 */	subf r3, r0, r3
/* 80345564 003411C4  4E 80 00 20 */	blr

.global gpiProfilesTableCompare
gpiProfilesTableCompare:
/* 80345568 003411C8  80 84 00 00 */	lwz r4, 0(r4)
/* 8034556C 003411CC  80 03 00 00 */	lwz r0, 0(r3)
/* 80345570 003411D0  7C 64 00 50 */	subf r3, r4, r0
/* 80345574 003411D4  4E 80 00 20 */	blr

.global gpiProfilesTableFree
gpiProfilesTableFree:
/* 80345578 003411D8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8034557C 003411DC  7C 08 02 A6 */	mflr r0
/* 80345580 003411E0  90 01 00 14 */	stw r0, 0x14(r1)
/* 80345584 003411E4  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80345588 003411E8  93 C1 00 08 */	stw r30, 8(r1)
/* 8034558C 003411EC  7C 7E 1B 78 */	mr r30, r3
/* 80345590 003411F0  80 83 00 08 */	lwz r4, 8(r3)
/* 80345594 003411F4  2C 04 00 00 */	cmpwi r4, 0
/* 80345598 003411F8  41 82 00 38 */	beq lbl_803455D0
/* 8034559C 003411FC  80 64 00 08 */	lwz r3, 8(r4)
/* 803455A0 00341200  4B FF 3D 99 */	bl gsifree
/* 803455A4 00341204  80 7E 00 08 */	lwz r3, 8(r30)
/* 803455A8 00341208  3B E0 00 00 */	li r31, 0
/* 803455AC 0034120C  93 E3 00 08 */	stw r31, 8(r3)
/* 803455B0 00341210  80 7E 00 08 */	lwz r3, 8(r30)
/* 803455B4 00341214  80 63 00 0C */	lwz r3, 0xc(r3)
/* 803455B8 00341218  4B FF 3D 81 */	bl gsifree
/* 803455BC 0034121C  80 7E 00 08 */	lwz r3, 8(r30)
/* 803455C0 00341220  93 E3 00 0C */	stw r31, 0xc(r3)
/* 803455C4 00341224  80 7E 00 08 */	lwz r3, 8(r30)
/* 803455C8 00341228  4B FF 3D 71 */	bl gsifree
/* 803455CC 0034122C  93 FE 00 08 */	stw r31, 8(r30)
lbl_803455D0:
/* 803455D0 00341230  7F C3 F3 78 */	mr r3, r30
/* 803455D4 00341234  4B FF E4 BD */	bl gpiFreeInfoCache
/* 803455D8 00341238  80 7E 00 10 */	lwz r3, 0x10(r30)
/* 803455DC 0034123C  4B FF 3D 5D */	bl gsifree
/* 803455E0 00341240  3B E0 00 00 */	li r31, 0
/* 803455E4 00341244  80 7E 00 18 */	lwz r3, 0x18(r30)
/* 803455E8 00341248  93 FE 00 10 */	stw r31, 0x10(r30)
/* 803455EC 0034124C  4B FF 3D 4D */	bl gsifree
/* 803455F0 00341250  93 FE 00 18 */	stw r31, 0x18(r30)
/* 803455F4 00341254  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 803455F8 00341258  83 C1 00 08 */	lwz r30, 8(r1)
/* 803455FC 0034125C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80345600 00341260  7C 08 03 A6 */	mtlr r0
/* 80345604 00341264  38 21 00 10 */	addi r1, r1, 0x10
/* 80345608 00341268  4E 80 00 20 */	blr

.global gpiInitProfiles
gpiInitProfiles:
/* 8034560C 0034126C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 80345610 00341270  7C 08 02 A6 */	mflr r0
/* 80345614 00341274  3C A0 80 34 */	lis r5, gpiProfilesTableHash@ha
/* 80345618 00341278  3C C0 80 34 */	lis r6, gpiProfilesTableCompare@ha
/* 8034561C 0034127C  90 01 00 14 */	stw r0, 0x14(r1)
/* 80345620 00341280  3C E0 80 34 */	lis r7, gpiProfilesTableFree@ha
/* 80345624 00341284  38 00 00 00 */	li r0, 0
/* 80345628 00341288  38 A5 55 54 */	addi r5, r5, gpiProfilesTableHash@l
/* 8034562C 0034128C  93 E1 00 0C */	stw r31, 0xc(r1)
/* 80345630 00341290  38 C6 55 68 */	addi r6, r6, gpiProfilesTableCompare@l
/* 80345634 00341294  38 E7 55 78 */	addi r7, r7, gpiProfilesTableFree@l
/* 80345638 00341298  38 80 00 20 */	li r4, 0x20
/* 8034563C 0034129C  83 E3 00 00 */	lwz r31, 0(r3)
/* 80345640 003412A0  38 60 00 1C */	li r3, 0x1c
/* 80345644 003412A4  90 1F 04 4C */	stw r0, 0x44c(r31)
/* 80345648 003412A8  90 1F 04 48 */	stw r0, 0x448(r31)
/* 8034564C 003412AC  4B FF 11 C1 */	bl TableNew
/* 80345650 003412B0  7C 03 00 D0 */	neg r0, r3
/* 80345654 003412B4  90 7F 04 44 */	stw r3, 0x444(r31)
/* 80345658 003412B8  7C 00 1B 78 */	or r0, r0, r3
/* 8034565C 003412BC  54 03 0F FE */	srwi r3, r0, 0x1f
/* 80345660 003412C0  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 80345664 003412C4  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80345668 003412C8  7C 08 03 A6 */	mtlr r0
/* 8034566C 003412CC  38 21 00 10 */	addi r1, r1, 0x10
/* 80345670 003412D0  4E 80 00 20 */	blr

.global gpiProcessNewProfile
gpiProcessNewProfile:
/* 80345674 003412D4  94 21 FF C0 */	stwu r1, -0x40(r1)
/* 80345678 003412D8  7C 08 02 A6 */	mflr r0
/* 8034567C 003412DC  90 01 00 44 */	stw r0, 0x44(r1)
/* 80345680 003412E0  93 E1 00 3C */	stw r31, 0x3c(r1)
/* 80345684 003412E4  7C BF 2B 78 */	mr r31, r5
/* 80345688 003412E8  38 A0 00 01 */	li r5, 1
/* 8034568C 003412EC  93 C1 00 38 */	stw r30, 0x38(r1)
/* 80345690 003412F0  3F C0 80 45 */	lis r30, lbl_8044B070@ha
/* 80345694 003412F4  3B DE B0 70 */	addi r30, r30, lbl_8044B070@l
/* 80345698 003412F8  93 A1 00 34 */	stw r29, 0x34(r1)
/* 8034569C 003412FC  7C 9D 23 78 */	mr r29, r4
/* 803456A0 00341300  7F E4 FB 78 */	mr r4, r31
/* 803456A4 00341304  93 81 00 30 */	stw r28, 0x30(r1)
/* 803456A8 00341308  7C 7C 1B 78 */	mr r28, r3
/* 803456AC 0034130C  48 00 28 E9 */	bl gpiCheckForError
/* 803456B0 00341310  2C 03 00 00 */	cmpwi r3, 0
/* 803456B4 00341314  41 82 00 0C */	beq lbl_803456C0
/* 803456B8 00341318  38 60 00 04 */	li r3, 4
/* 803456BC 0034131C  48 00 01 20 */	b lbl_803457DC
lbl_803456C0:
/* 803456C0 00341320  7F E3 FB 78 */	mr r3, r31
/* 803456C4 00341324  38 8D 91 A8 */	addi r4, r13, lbl_8063E468-_SDA_BASE_
/* 803456C8 00341328  38 A0 00 05 */	li r5, 5
/* 803456CC 0034132C  4B E8 8E 9D */	bl strncmp
/* 803456D0 00341330  2C 03 00 00 */	cmpwi r3, 0
/* 803456D4 00341334  41 82 00 2C */	beq lbl_80345700
/* 803456D8 00341338  7F 83 E3 78 */	mr r3, r28
/* 803456DC 0034133C  38 BE 01 04 */	addi r5, r30, 0x104
/* 803456E0 00341340  38 80 00 01 */	li r4, 1
/* 803456E4 00341344  48 00 2D 25 */	bl gpiSetError
/* 803456E8 00341348  7F 83 E3 78 */	mr r3, r28
/* 803456EC 0034134C  38 80 00 03 */	li r4, 3
/* 803456F0 00341350  38 A0 00 01 */	li r5, 1
/* 803456F4 00341354  4B FF A5 75 */	bl gpiCallErrorCallback
/* 803456F8 00341358  38 60 00 03 */	li r3, 3
/* 803456FC 0034135C  48 00 00 E0 */	b lbl_803457DC
lbl_80345700:
/* 80345700 00341360  7F E3 FB 78 */	mr r3, r31
/* 80345704 00341364  38 9E 01 34 */	addi r4, r30, 0x134
/* 80345708 00341368  38 A1 00 18 */	addi r5, r1, 0x18
/* 8034570C 0034136C  38 C0 00 10 */	li r6, 0x10
/* 80345710 00341370  48 00 29 7D */	bl gpiValueForKey
/* 80345714 00341374  2C 03 00 00 */	cmpwi r3, 0
/* 80345718 00341378  40 82 00 2C */	bne lbl_80345744
/* 8034571C 0034137C  7F 83 E3 78 */	mr r3, r28
/* 80345720 00341380  38 BE 01 04 */	addi r5, r30, 0x104
/* 80345724 00341384  38 80 00 01 */	li r4, 1
/* 80345728 00341388  48 00 2C E1 */	bl gpiSetError
/* 8034572C 0034138C  7F 83 E3 78 */	mr r3, r28
/* 80345730 00341390  38 80 00 03 */	li r4, 3
/* 80345734 00341394  38 A0 00 01 */	li r5, 1
/* 80345738 00341398  4B FF A5 31 */	bl gpiCallErrorCallback
/* 8034573C 0034139C  38 60 00 03 */	li r3, 3
/* 80345740 003413A0  48 00 00 9C */	b lbl_803457DC
lbl_80345744:
/* 80345744 003413A4  38 61 00 18 */	addi r3, r1, 0x18
/* 80345748 003413A8  4B E8 AF C5 */	bl atoi
/* 8034574C 003413AC  80 9D 00 0C */	lwz r4, 0xc(r29)
/* 80345750 003413B0  7C 7F 1B 78 */	mr r31, r3
/* 80345754 003413B4  80 1D 00 10 */	lwz r0, 0x10(r29)
/* 80345758 003413B8  2C 04 00 00 */	cmpwi r4, 0
/* 8034575C 003413BC  90 81 00 10 */	stw r4, 0x10(r1)
/* 80345760 003413C0  90 01 00 14 */	stw r0, 0x14(r1)
/* 80345764 003413C4  41 82 00 68 */	beq lbl_803457CC
/* 80345768 003413C8  38 60 00 08 */	li r3, 8
/* 8034576C 003413CC  4B FF 3B A9 */	bl gsimalloc
/* 80345770 003413D0  2C 03 00 00 */	cmpwi r3, 0
/* 80345774 003413D4  40 82 00 18 */	bne lbl_8034578C
/* 80345778 003413D8  7F 83 E3 78 */	mr r3, r28
/* 8034577C 003413DC  38 9E 01 40 */	addi r4, r30, 0x140
/* 80345780 003413E0  48 00 2C D9 */	bl gpiSetErrorString
/* 80345784 003413E4  38 60 00 01 */	li r3, 1
/* 80345788 003413E8  48 00 00 54 */	b lbl_803457DC
lbl_8034578C:
/* 8034578C 003413EC  93 E3 00 04 */	stw r31, 4(r3)
/* 80345790 003413F0  38 00 00 00 */	li r0, 0
/* 80345794 003413F4  80 81 00 10 */	lwz r4, 0x10(r1)
/* 80345798 003413F8  7C 65 1B 78 */	mr r5, r3
/* 8034579C 003413FC  90 03 00 00 */	stw r0, 0(r3)
/* 803457A0 00341400  7F 83 E3 78 */	mr r3, r28
/* 803457A4 00341404  80 01 00 14 */	lwz r0, 0x14(r1)
/* 803457A8 00341408  7F A6 EB 78 */	mr r6, r29
/* 803457AC 0034140C  90 81 00 08 */	stw r4, 8(r1)
/* 803457B0 00341410  38 81 00 08 */	addi r4, r1, 8
/* 803457B4 00341414  38 E0 00 00 */	li r7, 0
/* 803457B8 00341418  90 01 00 0C */	stw r0, 0xc(r1)
/* 803457BC 0034141C  4B FF A5 6D */	bl gpiAddCallback
/* 803457C0 00341420  2C 03 00 00 */	cmpwi r3, 0
/* 803457C4 00341424  41 82 00 08 */	beq lbl_803457CC
/* 803457C8 00341428  48 00 00 14 */	b lbl_803457DC
lbl_803457CC:
/* 803457CC 0034142C  7F 83 E3 78 */	mr r3, r28
/* 803457D0 00341430  7F A4 EB 78 */	mr r4, r29
/* 803457D4 00341434  4B FF E8 89 */	bl gpiRemoveOperation
/* 803457D8 00341438  38 60 00 00 */	li r3, 0
lbl_803457DC:
/* 803457DC 0034143C  80 01 00 44 */	lwz r0, 0x44(r1)
/* 803457E0 00341440  83 E1 00 3C */	lwz r31, 0x3c(r1)
/* 803457E4 00341444  83 C1 00 38 */	lwz r30, 0x38(r1)
/* 803457E8 00341448  83 A1 00 34 */	lwz r29, 0x34(r1)
/* 803457EC 0034144C  83 81 00 30 */	lwz r28, 0x30(r1)
/* 803457F0 00341450  7C 08 03 A6 */	mtlr r0
/* 803457F4 00341454  38 21 00 40 */	addi r1, r1, 0x40
/* 803457F8 00341458  4E 80 00 20 */	blr

.global gpiProfileListAdd
gpiProfileListAdd:
/* 803457FC 0034145C  94 21 FF 90 */	stwu r1, -0x70(r1)
/* 80345800 00341460  7C 08 02 A6 */	mflr r0
/* 80345804 00341464  2C 04 00 00 */	cmpwi r4, 0
/* 80345808 00341468  90 01 00 74 */	stw r0, 0x74(r1)
/* 8034580C 0034146C  93 E1 00 6C */	stw r31, 0x6c(r1)
/* 80345810 00341470  93 C1 00 68 */	stw r30, 0x68(r1)
/* 80345814 00341474  7C 9E 23 78 */	mr r30, r4
/* 80345818 00341478  93 A1 00 64 */	stw r29, 0x64(r1)
/* 8034581C 0034147C  7C 7D 1B 78 */	mr r29, r3
/* 80345820 00341480  83 E3 00 00 */	lwz r31, 0(r3)
/* 80345824 00341484  41 81 00 0C */	bgt lbl_80345830
/* 80345828 00341488  38 60 00 00 */	li r3, 0
/* 8034582C 0034148C  48 00 00 88 */	b lbl_803458B4
lbl_80345830:
/* 80345830 00341490  90 81 00 24 */	stw r4, 0x24(r1)
/* 80345834 00341494  38 81 00 24 */	addi r4, r1, 0x24
/* 80345838 00341498  80 7F 04 44 */	lwz r3, 0x444(r31)
/* 8034583C 0034149C  4B FF 12 E1 */	bl TableLookup
/* 80345840 003414A0  2C 03 00 00 */	cmpwi r3, 0
/* 80345844 003414A4  41 82 00 08 */	beq lbl_8034584C
/* 80345848 003414A8  48 00 00 6C */	b lbl_803458B4
lbl_8034584C:
/* 8034584C 003414AC  38 61 00 40 */	addi r3, r1, 0x40
/* 80345850 003414B0  38 80 00 00 */	li r4, 0
/* 80345854 003414B4  38 A0 00 1C */	li r5, 0x1c
/* 80345858 003414B8  4B CB E8 AD */	bl memset
/* 8034585C 003414BC  38 00 00 00 */	li r0, 0
/* 80345860 003414C0  93 C1 00 40 */	stw r30, 0x40(r1)
/* 80345864 003414C4  38 81 00 40 */	addi r4, r1, 0x40
/* 80345868 003414C8  90 01 00 44 */	stw r0, 0x44(r1)
/* 8034586C 003414CC  90 01 00 4C */	stw r0, 0x4c(r1)
/* 80345870 003414D0  90 01 00 50 */	stw r0, 0x50(r1)
/* 80345874 003414D4  90 01 00 58 */	stw r0, 0x58(r1)
/* 80345878 003414D8  90 01 00 54 */	stw r0, 0x54(r1)
/* 8034587C 003414DC  80 7F 04 44 */	lwz r3, 0x444(r31)
/* 80345880 003414E0  4B FF 11 51 */	bl TableEnter
/* 80345884 003414E4  80 7F 04 48 */	lwz r3, 0x448(r31)
/* 80345888 003414E8  38 81 00 08 */	addi r4, r1, 8
/* 8034588C 003414EC  38 03 00 01 */	addi r0, r3, 1
/* 80345890 003414F0  90 1F 04 48 */	stw r0, 0x448(r31)
/* 80345894 003414F4  80 7D 00 00 */	lwz r3, 0(r29)
/* 80345898 003414F8  93 C1 00 08 */	stw r30, 8(r1)
/* 8034589C 003414FC  80 63 04 44 */	lwz r3, 0x444(r3)
/* 803458A0 00341500  4B FF 12 7D */	bl TableLookup
/* 803458A4 00341504  2C 03 00 00 */	cmpwi r3, 0
/* 803458A8 00341508  41 82 00 08 */	beq lbl_803458B0
/* 803458AC 0034150C  48 00 00 08 */	b lbl_803458B4
lbl_803458B0:
/* 803458B0 00341510  38 60 00 00 */	li r3, 0
lbl_803458B4:
/* 803458B4 00341514  80 01 00 74 */	lwz r0, 0x74(r1)
/* 803458B8 00341518  83 E1 00 6C */	lwz r31, 0x6c(r1)
/* 803458BC 0034151C  83 C1 00 68 */	lwz r30, 0x68(r1)
/* 803458C0 00341520  83 A1 00 64 */	lwz r29, 0x64(r1)
/* 803458C4 00341524  7C 08 03 A6 */	mtlr r0
/* 803458C8 00341528  38 21 00 70 */	addi r1, r1, 0x70
/* 803458CC 0034152C  4E 80 00 20 */	blr

.global gpiGetProfile
gpiGetProfile:
/* 803458D0 00341530  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 803458D4 00341534  7C 08 02 A6 */	mflr r0
/* 803458D8 00341538  90 01 00 34 */	stw r0, 0x34(r1)
/* 803458DC 0034153C  93 E1 00 2C */	stw r31, 0x2c(r1)
/* 803458E0 00341540  7C BF 2B 78 */	mr r31, r5
/* 803458E4 00341544  80 63 00 00 */	lwz r3, 0(r3)
/* 803458E8 00341548  90 81 00 08 */	stw r4, 8(r1)
/* 803458EC 0034154C  38 81 00 08 */	addi r4, r1, 8
/* 803458F0 00341550  80 63 04 44 */	lwz r3, 0x444(r3)
/* 803458F4 00341554  4B FF 12 29 */	bl TableLookup
/* 803458F8 00341558  2C 1F 00 00 */	cmpwi r31, 0
/* 803458FC 0034155C  41 82 00 08 */	beq lbl_80345904
/* 80345900 00341560  90 7F 00 00 */	stw r3, 0(r31)
lbl_80345904:
/* 80345904 00341564  7C 03 00 D0 */	neg r0, r3
/* 80345908 00341568  83 E1 00 2C */	lwz r31, 0x2c(r1)
/* 8034590C 0034156C  7C 00 1B 78 */	or r0, r0, r3
/* 80345910 00341570  54 03 0F FE */	srwi r3, r0, 0x1f
/* 80345914 00341574  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80345918 00341578  7C 08 03 A6 */	mtlr r0
/* 8034591C 0034157C  38 21 00 30 */	addi r1, r1, 0x30
/* 80345920 00341580  4E 80 00 20 */	blr

.global gpiProcessDeleteProfle
gpiProcessDeleteProfle:
/* 80345924 00341584  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80345928 00341588  7C 08 02 A6 */	mflr r0
/* 8034592C 0034158C  90 01 00 34 */	stw r0, 0x34(r1)
/* 80345930 00341590  93 E1 00 2C */	stw r31, 0x2c(r1)
/* 80345934 00341594  93 C1 00 28 */	stw r30, 0x28(r1)
/* 80345938 00341598  7C BE 2B 78 */	mr r30, r5
/* 8034593C 0034159C  38 A0 00 01 */	li r5, 1
/* 80345940 003415A0  93 A1 00 24 */	stw r29, 0x24(r1)
/* 80345944 003415A4  7C 9D 23 78 */	mr r29, r4
/* 80345948 003415A8  7F C4 F3 78 */	mr r4, r30
/* 8034594C 003415AC  93 81 00 20 */	stw r28, 0x20(r1)
/* 80345950 003415B0  7C 7C 1B 78 */	mr r28, r3
/* 80345954 003415B4  83 E3 00 00 */	lwz r31, 0(r3)
/* 80345958 003415B8  48 00 26 3D */	bl gpiCheckForError
/* 8034595C 003415BC  2C 03 00 00 */	cmpwi r3, 0
/* 80345960 003415C0  41 82 00 0C */	beq lbl_8034596C
/* 80345964 003415C4  38 60 00 04 */	li r3, 4
/* 80345968 003415C8  48 00 00 DC */	b lbl_80345A44
lbl_8034596C:
/* 8034596C 003415CC  7F C3 F3 78 */	mr r3, r30
/* 80345970 003415D0  38 8D 91 B0 */	addi r4, r13, lbl_8063E470-_SDA_BASE_
/* 80345974 003415D4  38 A0 00 05 */	li r5, 5
/* 80345978 003415D8  4B E8 8B F1 */	bl strncmp
/* 8034597C 003415DC  2C 03 00 00 */	cmpwi r3, 0
/* 80345980 003415E0  41 82 00 30 */	beq lbl_803459B0
/* 80345984 003415E4  3C A0 80 45 */	lis r5, lbl_8044B174@ha
/* 80345988 003415E8  7F 83 E3 78 */	mr r3, r28
/* 8034598C 003415EC  38 A5 B1 74 */	addi r5, r5, lbl_8044B174@l
/* 80345990 003415F0  38 80 00 01 */	li r4, 1
/* 80345994 003415F4  48 00 2A 75 */	bl gpiSetError
/* 80345998 003415F8  7F 83 E3 78 */	mr r3, r28
/* 8034599C 003415FC  38 80 00 03 */	li r4, 3
/* 803459A0 00341600  38 A0 00 01 */	li r5, 1
/* 803459A4 00341604  4B FF A2 C5 */	bl gpiCallErrorCallback
/* 803459A8 00341608  38 60 00 03 */	li r3, 3
/* 803459AC 0034160C  48 00 00 98 */	b lbl_80345A44
lbl_803459B0:
/* 803459B0 00341610  80 7D 00 0C */	lwz r3, 0xc(r29)
/* 803459B4 00341614  80 1D 00 10 */	lwz r0, 0x10(r29)
/* 803459B8 00341618  2C 03 00 00 */	cmpwi r3, 0
/* 803459BC 0034161C  90 61 00 10 */	stw r3, 0x10(r1)
/* 803459C0 00341620  90 01 00 14 */	stw r0, 0x14(r1)
/* 803459C4 00341624  41 82 00 70 */	beq lbl_80345A34
/* 803459C8 00341628  38 60 00 08 */	li r3, 8
/* 803459CC 0034162C  4B FF 39 49 */	bl gsimalloc
/* 803459D0 00341630  2C 03 00 00 */	cmpwi r3, 0
/* 803459D4 00341634  40 82 00 1C */	bne lbl_803459F0
/* 803459D8 00341638  3C 80 80 45 */	lis r4, lbl_8044B1B0@ha
/* 803459DC 0034163C  7F 83 E3 78 */	mr r3, r28
/* 803459E0 00341640  38 84 B1 B0 */	addi r4, r4, lbl_8044B1B0@l
/* 803459E4 00341644  48 00 2A 75 */	bl gpiSetErrorString
/* 803459E8 00341648  38 60 00 01 */	li r3, 1
/* 803459EC 0034164C  48 00 00 58 */	b lbl_80345A44
lbl_803459F0:
/* 803459F0 00341650  80 1F 01 A0 */	lwz r0, 0x1a0(r31)
/* 803459F4 00341654  38 E0 00 00 */	li r7, 0
/* 803459F8 00341658  81 01 00 10 */	lwz r8, 0x10(r1)
/* 803459FC 0034165C  7C 65 1B 78 */	mr r5, r3
/* 80345A00 00341660  90 03 00 04 */	stw r0, 4(r3)
/* 80345A04 00341664  7F A6 EB 78 */	mr r6, r29
/* 80345A08 00341668  80 01 00 14 */	lwz r0, 0x14(r1)
/* 80345A0C 0034166C  38 81 00 08 */	addi r4, r1, 8
/* 80345A10 00341670  90 E3 00 00 */	stw r7, 0(r3)
/* 80345A14 00341674  7F 83 E3 78 */	mr r3, r28
/* 80345A18 00341678  38 E0 00 00 */	li r7, 0
/* 80345A1C 0034167C  91 01 00 08 */	stw r8, 8(r1)
/* 80345A20 00341680  90 01 00 0C */	stw r0, 0xc(r1)
/* 80345A24 00341684  4B FF A3 05 */	bl gpiAddCallback
/* 80345A28 00341688  2C 03 00 00 */	cmpwi r3, 0
/* 80345A2C 0034168C  41 82 00 08 */	beq lbl_80345A34
/* 80345A30 00341690  48 00 00 14 */	b lbl_80345A44
lbl_80345A34:
/* 80345A34 00341694  7F 83 E3 78 */	mr r3, r28
/* 80345A38 00341698  7F A4 EB 78 */	mr r4, r29
/* 80345A3C 0034169C  4B FF E6 21 */	bl gpiRemoveOperation
/* 80345A40 003416A0  38 60 00 00 */	li r3, 0
lbl_80345A44:
/* 80345A44 003416A4  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80345A48 003416A8  83 E1 00 2C */	lwz r31, 0x2c(r1)
/* 80345A4C 003416AC  83 C1 00 28 */	lwz r30, 0x28(r1)
/* 80345A50 003416B0  83 A1 00 24 */	lwz r29, 0x24(r1)
/* 80345A54 003416B4  83 81 00 20 */	lwz r28, 0x20(r1)
/* 80345A58 003416B8  7C 08 03 A6 */	mtlr r0
/* 80345A5C 003416BC  38 21 00 30 */	addi r1, r1, 0x30
/* 80345A60 003416C0  4E 80 00 20 */	blr

.global gpiRemoveProfileByID
gpiRemoveProfileByID:
/* 80345A64 003416C4  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80345A68 003416C8  7C 08 02 A6 */	mflr r0
/* 80345A6C 003416CC  90 01 00 34 */	stw r0, 0x34(r1)
/* 80345A70 003416D0  93 E1 00 2C */	stw r31, 0x2c(r1)
/* 80345A74 003416D4  83 E3 00 00 */	lwz r31, 0(r3)
/* 80345A78 003416D8  90 81 00 08 */	stw r4, 8(r1)
/* 80345A7C 003416DC  38 81 00 08 */	addi r4, r1, 8
/* 80345A80 003416E0  80 7F 04 44 */	lwz r3, 0x444(r31)
/* 80345A84 003416E4  4B FF 10 99 */	bl TableLookup
/* 80345A88 003416E8  2C 03 00 00 */	cmpwi r3, 0
/* 80345A8C 003416EC  7C 64 1B 78 */	mr r4, r3
/* 80345A90 003416F0  41 82 00 0C */	beq lbl_80345A9C
/* 80345A94 003416F4  80 7F 04 44 */	lwz r3, 0x444(r31)
/* 80345A98 003416F8  4B FF 0F E1 */	bl TableRemove
lbl_80345A9C:
/* 80345A9C 003416FC  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80345AA0 00341700  83 E1 00 2C */	lwz r31, 0x2c(r1)
/* 80345AA4 00341704  7C 08 03 A6 */	mtlr r0
/* 80345AA8 00341708  38 21 00 30 */	addi r1, r1, 0x30
/* 80345AAC 0034170C  4E 80 00 20 */	blr

.global gpiRemoveProfile
gpiRemoveProfile:
/* 80345AB0 00341710  80 63 00 00 */	lwz r3, 0(r3)
/* 80345AB4 00341714  80 63 04 44 */	lwz r3, 0x444(r3)
/* 80345AB8 00341718  4B FF 0F C0 */	b TableRemove

.global gpiCheckProfileForUser
gpiCheckProfileForUser:
/* 80345ABC 0034171C  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80345AC0 00341720  7C 08 02 A6 */	mflr r0
/* 80345AC4 00341724  90 01 00 24 */	stw r0, 0x24(r1)
/* 80345AC8 00341728  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 80345ACC 0034172C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 80345AD0 00341730  7C BE 2B 78 */	mr r30, r5
/* 80345AD4 00341734  93 A1 00 14 */	stw r29, 0x14(r1)
/* 80345AD8 00341738  7C 9D 23 78 */	mr r29, r4
/* 80345ADC 0034173C  83 E4 00 0C */	lwz r31, 0xc(r4)
/* 80345AE0 00341740  2C 1F 00 00 */	cmpwi r31, 0
/* 80345AE4 00341744  41 82 00 44 */	beq lbl_80345B28
/* 80345AE8 00341748  80 65 00 00 */	lwz r3, 0(r5)
/* 80345AEC 0034174C  80 9F 00 00 */	lwz r4, 0(r31)
/* 80345AF0 00341750  4B E8 89 5D */	bl strcmp
/* 80345AF4 00341754  2C 03 00 00 */	cmpwi r3, 0
/* 80345AF8 00341758  40 82 00 30 */	bne lbl_80345B28
/* 80345AFC 0034175C  80 7E 00 04 */	lwz r3, 4(r30)
/* 80345B00 00341760  80 9F 00 08 */	lwz r4, 8(r31)
/* 80345B04 00341764  4B E8 89 49 */	bl strcmp
/* 80345B08 00341768  2C 03 00 00 */	cmpwi r3, 0
/* 80345B0C 0034176C  40 82 00 1C */	bne lbl_80345B28
/* 80345B10 00341770  80 9E 00 08 */	lwz r4, 8(r30)
/* 80345B14 00341774  38 00 00 01 */	li r0, 1
/* 80345B18 00341778  38 60 00 00 */	li r3, 0
/* 80345B1C 0034177C  93 A4 00 00 */	stw r29, 0(r4)
/* 80345B20 00341780  90 1E 00 0C */	stw r0, 0xc(r30)
/* 80345B24 00341784  48 00 00 08 */	b lbl_80345B2C
lbl_80345B28:
/* 80345B28 00341788  38 60 00 01 */	li r3, 1
lbl_80345B2C:
/* 80345B2C 0034178C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80345B30 00341790  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 80345B34 00341794  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 80345B38 00341798  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 80345B3C 0034179C  7C 08 03 A6 */	mtlr r0
/* 80345B40 003417A0  38 21 00 20 */	addi r1, r1, 0x20
/* 80345B44 003417A4  4E 80 00 20 */	blr

.global gpiFindProfileByUser
gpiFindProfileByUser:
/* 80345B48 003417A8  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80345B4C 003417AC  7C 08 02 A6 */	mflr r0
/* 80345B50 003417B0  3C E0 80 34 */	lis r7, gpiCheckProfileForUser@ha
/* 80345B54 003417B4  90 01 00 34 */	stw r0, 0x34(r1)
/* 80345B58 003417B8  38 01 00 18 */	addi r0, r1, 0x18
/* 80345B5C 003417BC  38 E7 5A BC */	addi r7, r7, gpiCheckProfileForUser@l
/* 80345B60 003417C0  93 E1 00 2C */	stw r31, 0x2c(r1)
/* 80345B64 003417C4  3B E0 00 00 */	li r31, 0
/* 80345B68 003417C8  93 C1 00 28 */	stw r30, 0x28(r1)
/* 80345B6C 003417CC  7C DE 33 78 */	mr r30, r6
/* 80345B70 003417D0  90 A1 00 1C */	stw r5, 0x1c(r1)
/* 80345B74 003417D4  38 A1 00 08 */	addi r5, r1, 8
/* 80345B78 003417D8  90 81 00 18 */	stw r4, 0x18(r1)
/* 80345B7C 003417DC  3C 80 80 34 */	lis r4, gpiProfileMapCallback@ha
/* 80345B80 003417E0  38 84 5B D0 */	addi r4, r4, gpiProfileMapCallback@l
/* 80345B84 003417E4  90 C1 00 20 */	stw r6, 0x20(r1)
/* 80345B88 003417E8  93 E1 00 24 */	stw r31, 0x24(r1)
/* 80345B8C 003417EC  80 C3 00 00 */	lwz r6, 0(r3)
/* 80345B90 003417F0  90 61 00 08 */	stw r3, 8(r1)
/* 80345B94 003417F4  90 E1 00 0C */	stw r7, 0xc(r1)
/* 80345B98 003417F8  90 01 00 10 */	stw r0, 0x10(r1)
/* 80345B9C 003417FC  80 66 04 44 */	lwz r3, 0x444(r6)
/* 80345BA0 00341800  4B FF 10 89 */	bl TableMapSafe2
/* 80345BA4 00341804  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80345BA8 00341808  2C 00 00 00 */	cmpwi r0, 0
/* 80345BAC 0034180C  40 82 00 08 */	bne lbl_80345BB4
/* 80345BB0 00341810  93 FE 00 00 */	stw r31, 0(r30)
lbl_80345BB4:
/* 80345BB4 00341814  83 E1 00 2C */	lwz r31, 0x2c(r1)
/* 80345BB8 00341818  38 60 00 00 */	li r3, 0
/* 80345BBC 0034181C  83 C1 00 28 */	lwz r30, 0x28(r1)
/* 80345BC0 00341820  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80345BC4 00341824  7C 08 03 A6 */	mtlr r0
/* 80345BC8 00341828  38 21 00 30 */	addi r1, r1, 0x30
/* 80345BCC 0034182C  4E 80 00 20 */	blr

.global gpiProfileMapCallback
gpiProfileMapCallback:
/* 80345BD0 00341830  81 84 00 04 */	lwz r12, 4(r4)
/* 80345BD4 00341834  7C 85 23 78 */	mr r5, r4
/* 80345BD8 00341838  7C 60 1B 78 */	mr r0, r3
/* 80345BDC 0034183C  80 64 00 00 */	lwz r3, 0(r4)
/* 80345BE0 00341840  7C 04 03 78 */	mr r4, r0
/* 80345BE4 00341844  80 A5 00 08 */	lwz r5, 8(r5)
/* 80345BE8 00341848  7D 89 03 A6 */	mtctr r12
/* 80345BEC 0034184C  4E 80 04 20 */	bctr

.global gpiProfileMap
gpiProfileMap:
/* 80345BF0 00341850  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80345BF4 00341854  7C 08 02 A6 */	mflr r0
/* 80345BF8 00341858  3C C0 80 34 */	lis r6, gpiProfileMapCallback@ha
/* 80345BFC 0034185C  90 01 00 24 */	stw r0, 0x24(r1)
/* 80345C00 00341860  80 E3 00 00 */	lwz r7, 0(r3)
/* 80345C04 00341864  90 81 00 0C */	stw r4, 0xc(r1)
/* 80345C08 00341868  38 86 5B D0 */	addi r4, r6, gpiProfileMapCallback@l
/* 80345C0C 0034186C  90 A1 00 10 */	stw r5, 0x10(r1)
/* 80345C10 00341870  38 A1 00 08 */	addi r5, r1, 8
/* 80345C14 00341874  90 61 00 08 */	stw r3, 8(r1)
/* 80345C18 00341878  80 67 04 44 */	lwz r3, 0x444(r7)
/* 80345C1C 0034187C  4B FF 10 0D */	bl TableMapSafe2
/* 80345C20 00341880  7C 60 00 34 */	cntlzw r0, r3
/* 80345C24 00341884  54 03 D9 7E */	srwi r3, r0, 5
/* 80345C28 00341888  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80345C2C 0034188C  7C 08 03 A6 */	mtlr r0
/* 80345C30 00341890  38 21 00 20 */	addi r1, r1, 0x20
/* 80345C34 00341894  4E 80 00 20 */	blr

.global gpiCheckForBuddy
gpiCheckForBuddy:
/* 80345C38 00341898  80 C4 00 08 */	lwz r6, 8(r4)
/* 80345C3C 0034189C  2C 06 00 00 */	cmpwi r6, 0
/* 80345C40 003418A0  41 82 00 20 */	beq lbl_80345C60
/* 80345C44 003418A4  80 65 00 00 */	lwz r3, 0(r5)
/* 80345C48 003418A8  80 06 00 00 */	lwz r0, 0(r6)
/* 80345C4C 003418AC  7C 03 00 00 */	cmpw r3, r0
/* 80345C50 003418B0  40 82 00 10 */	bne lbl_80345C60
/* 80345C54 003418B4  90 85 00 04 */	stw r4, 4(r5)
/* 80345C58 003418B8  38 60 00 00 */	li r3, 0
/* 80345C5C 003418BC  4E 80 00 20 */	blr
lbl_80345C60:
/* 80345C60 003418C0  38 60 00 01 */	li r3, 1
/* 80345C64 003418C4  4E 80 00 20 */	blr

.global gpiFindBuddy
gpiFindBuddy:
/* 80345C68 003418C8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80345C6C 003418CC  7C 08 02 A6 */	mflr r0
/* 80345C70 003418D0  3C C0 80 34 */	lis r6, gpiCheckForBuddy@ha
/* 80345C74 003418D4  38 A0 00 00 */	li r5, 0
/* 80345C78 003418D8  90 01 00 24 */	stw r0, 0x24(r1)
/* 80345C7C 003418DC  38 C6 5C 38 */	addi r6, r6, gpiCheckForBuddy@l
/* 80345C80 003418E0  38 01 00 08 */	addi r0, r1, 8
/* 80345C84 003418E4  90 81 00 08 */	stw r4, 8(r1)
/* 80345C88 003418E8  3C 80 80 34 */	lis r4, gpiProfileMapCallback@ha
/* 80345C8C 003418EC  38 84 5B D0 */	addi r4, r4, gpiProfileMapCallback@l
/* 80345C90 003418F0  90 A1 00 0C */	stw r5, 0xc(r1)
/* 80345C94 003418F4  38 A1 00 10 */	addi r5, r1, 0x10
/* 80345C98 003418F8  80 E3 00 00 */	lwz r7, 0(r3)
/* 80345C9C 003418FC  90 61 00 10 */	stw r3, 0x10(r1)
/* 80345CA0 00341900  90 C1 00 14 */	stw r6, 0x14(r1)
/* 80345CA4 00341904  90 01 00 18 */	stw r0, 0x18(r1)
/* 80345CA8 00341908  80 67 04 44 */	lwz r3, 0x444(r7)
/* 80345CAC 0034190C  4B FF 0F 7D */	bl TableMapSafe2
/* 80345CB0 00341910  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80345CB4 00341914  80 61 00 0C */	lwz r3, 0xc(r1)
/* 80345CB8 00341918  7C 08 03 A6 */	mtlr r0
/* 80345CBC 0034191C  38 21 00 20 */	addi r1, r1, 0x20
/* 80345CC0 00341920  4E 80 00 20 */	blr

.global gpiCanFreeProfile
gpiCanFreeProfile:
/* 80345CC4 00341924  2C 03 00 00 */	cmpwi r3, 0
/* 80345CC8 00341928  38 80 00 00 */	li r4, 0
/* 80345CCC 0034192C  41 82 00 38 */	beq lbl_80345D04
/* 80345CD0 00341930  80 03 00 0C */	lwz r0, 0xc(r3)
/* 80345CD4 00341934  2C 00 00 00 */	cmpwi r0, 0
/* 80345CD8 00341938  40 82 00 2C */	bne lbl_80345D04
/* 80345CDC 0034193C  80 03 00 08 */	lwz r0, 8(r3)
/* 80345CE0 00341940  2C 00 00 00 */	cmpwi r0, 0
/* 80345CE4 00341944  40 82 00 20 */	bne lbl_80345D04
/* 80345CE8 00341948  80 03 00 18 */	lwz r0, 0x18(r3)
/* 80345CEC 0034194C  2C 00 00 00 */	cmpwi r0, 0
/* 80345CF0 00341950  40 82 00 14 */	bne lbl_80345D04
/* 80345CF4 00341954  80 03 00 10 */	lwz r0, 0x10(r3)
/* 80345CF8 00341958  2C 00 00 00 */	cmpwi r0, 0
/* 80345CFC 0034195C  40 82 00 08 */	bne lbl_80345D04
/* 80345D00 00341960  38 80 00 01 */	li r4, 1
lbl_80345D04:
/* 80345D04 00341964  7C 04 00 D0 */	neg r0, r4
/* 80345D08 00341968  7C 00 23 78 */	or r0, r0, r4
/* 80345D0C 0034196C  54 03 0F FE */	srwi r3, r0, 0x1f
/* 80345D10 00341970  4E 80 00 20 */	blr