PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_m_int.c
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11#include "libspu2_internal.h"
12
13void _spu_gcSPU(void)
14{
15 int counter_1;
16 libspu2_malloc_t *p_cur_block_2;
17 int counter_3;
18 libspu2_malloc_t *p_next_block;
19 u32 addr_area;
20 u32 size_area_1;
21 int idx;
22 const libspu2_malloc_t *p_cur_block_3;
23 u32 size_area_2;
24 int alloc_last_num_1;
25 u32 size_area_3;
26
27 for ( counter_1 = 0; counter_1 <= _spu_AllocLastNum; counter_1 += 1 )
28 {
29 while ( (_spu_memList[counter_1].addr_area & 0x80000000) != 0 )
30 {
31 int list_idx;
32
33 for ( list_idx = counter_1 + 1; _spu_memList[list_idx].addr_area == 0x2fffffff; list_idx += 1 )
34 {
35 }
36 p_cur_block_2 = &_spu_memList[list_idx];
37 if (
38 (p_cur_block_2->addr_area & 0x80000000) != 0
39 && (p_cur_block_2->addr_area & 0xFFFFFFF)
40 == (_spu_memList[counter_1].addr_area & 0xFFFFFFF) + _spu_memList[counter_1].size_area )
41 {
42 p_cur_block_2->addr_area = 0x2fffffff;
43 _spu_memList[counter_1].size_area += p_cur_block_2->size_area;
44 continue;
45 }
46 break;
47 }
48 }
49 if ( _spu_AllocLastNum >= 0 )
50 {
51 if ( !_spu_memList[0].size_area )
52 _spu_memList[0].addr_area = 0x2fffffff;
53 }
54 for ( counter_3 = 0; counter_3 <= _spu_AllocLastNum; counter_3 += 1 )
55 {
56 int counter_next;
57
58 if ( (_spu_memList[counter_3].addr_area & 0x40000000) != 0 )
59 break;
60 for ( counter_next = counter_3 + 1; _spu_AllocLastNum >= counter_next; counter_next += 1 )
61 {
62 p_next_block = &_spu_memList[counter_next];
63 if ( (p_next_block->addr_area & 0x40000000) != 0 )
64 break;
65 addr_area = _spu_memList[counter_3].addr_area;
66 if ( (p_next_block->addr_area & 0xFFFFFFF) < (_spu_memList[counter_3].addr_area & 0xFFFFFFF) )
67 {
68 _spu_memList[counter_3].addr_area = p_next_block->addr_area;
69 size_area_1 = _spu_memList[counter_3].size_area;
70 _spu_memList[counter_3].size_area = p_next_block->size_area;
71 p_next_block->addr_area = addr_area;
72 p_next_block->size_area = size_area_1;
73 }
74 }
75 }
76 for ( idx = 0; idx <= _spu_AllocLastNum; idx += 1 )
77 {
78 if ( (_spu_memList[idx].addr_area & 0x40000000) != 0 )
79 {
80 break;
81 }
82 if ( _spu_memList[idx].addr_area == 0x2fffffff )
83 {
84 p_cur_block_3 = &_spu_memList[_spu_AllocLastNum];
85 _spu_memList[idx].addr_area = p_cur_block_3->addr_area;
86 size_area_2 = p_cur_block_3->size_area;
87 _spu_AllocLastNum = idx;
88 _spu_memList[idx].size_area = size_area_2;
89 break;
90 }
91 }
92 for ( alloc_last_num_1 = _spu_AllocLastNum - 1; alloc_last_num_1 >= 0; alloc_last_num_1 -= 1 )
93 {
94 int alloc_last_num_2;
95 libspu2_malloc_t *p_prev_block;
96
97 p_prev_block = &_spu_memList[alloc_last_num_1];
98 if ( (p_prev_block->addr_area & 0x80000000) == 0 )
99 break;
100 alloc_last_num_2 = _spu_AllocLastNum;
101 p_prev_block->addr_area = (p_prev_block->addr_area & 0xFFFFFFF) | 0x40000000;
102 size_area_3 = p_prev_block->size_area;
103 _spu_AllocLastNum = alloc_last_num_1;
104 p_prev_block->size_area = size_area_3 + _spu_memList[alloc_last_num_2].size_area;
105 }
106}