nmpp
malloc32.h
1#ifndef MALLOC32_DEFINED
2#define MALLOC32_DEFINED
3#include <malloc.h>
4#include "nmtype.h"
5
6//#define void* malloc32 (unsigned size_int32 );
7//#define malloc32 nmppsMalloc_32s
8typedef void (*t_free_func)(void*);
9#ifdef __cplusplus
10 extern "C" {
11#endif
12
13
14#define HEAP_0 1
15#define HEAP_1 2
16#define HEAP_2 4
17#define HEAP_3 8
18
19
20void* malloc0(unsigned int size);
21void* malloc1(unsigned int size);
22void* malloc2(unsigned int size);
23void* malloc3(unsigned int size);
24
25//void* malloc32 (unsigned size_int32, unsigned bank_mask);
26//#define malloc32 (unsigned size_int32)
27void free32(void* p);
28
29
30#ifdef __NM__
31 #define malloc32(size) malloc(size)
32
33#else
34 #define malloc32(size) malloc((size)<<2)
35#endif
36
37// universal malloc for nmc-gcc and nmcc (универсальный маллок для nmc-gcc и nmcc)
38// size - размер выделяемой памяти в 32-битных словах
39// heap_num - номер кучи, в которой будет выделена память (для nmcc от 0 до 3, для nmc-gcc от 0 до 15)
40void* nmppMalloc(unsigned size, int heap_num);
41
42typedef void (Free32Func)(void*);
43typedef void* (Malloc32Func)(unsigned int);
44
45#define NMPP_OPTIMIZE_ALLOC 1
46#define NMPP_CUSTOM_ALLOC 2
47
48
49#define ENABLE_HISTORY 1
50#define ENABLE_RANDOM 1
51enum MALLOC32_MODE {MALLOC32_RING_MODE,MALLOC32_HISTORY_MODE,MALLOC32_PRIORITY_MODE, MALLOC32_ROUTE_MODE, MALLOC32_LONG_ROUTE_MODE, MALLOC32_FIXED_MODE, MALLOC32_RANDOM_MODE };
52#define NMPPS_MALLOC_LIMIT 128
53#define NMPPS_MALLOC_MAX_POS NMPPS_MALLOC_LIMIT-1
54
56 Malloc32Func* allocator[4];
57 enum MALLOC32_MODE mode;
58 uint32 random; // bit-mask of available heaps
59 fseq32 priority; // heap allocation sequence in decdendnig priority terminated by 0xF
60 uint32 status; // error status
61 uint32 time;
62 uint32 timeBest;
63 uint32 routePos;
64 fseq64 route[NMPPS_MALLOC_LIMIT/16];
65 fseq64 bestRoute[NMPPS_MALLOC_LIMIT/16];
66 void* allocHistory[NMPPS_MALLOC_LIMIT];
67 void* freeHistory[NMPPS_MALLOC_LIMIT];
68 uint32 allocHistoryPos;
69 uint32 freeHistoryPos;
70 uint32 firstPass;
71};
72
74 void* buffer0;
75 void* buffer1;
76} ;
77
78
79
80//nm1* nmppsMalloc_1 (unsigned sizeInt1) ;
81//nm2s* nmppsMalloc_2s (unsigned sizeInt2) ;
82//nm2u* nmppsMalloc_2u (unsigned sizeInt2) ;
83//nm4s* nmppsMalloc_4s (unsigned sizeInt4) ;
84//nm4u* nmppsMalloc_4u (unsigned sizeInt4) ;
85//nm8s* nmppsMalloc_8s (unsigned sizeInt8) ;
86//nm8u* nmppsMalloc_8u (unsigned sizeInt8) ;
87//nm16s* nmppsMalloc_16s(unsigned sizeInt16);
88//nm16u* nmppsMalloc_16u(unsigned sizeInt16);
89//nm32s* nmppsMalloc_32s(unsigned sizeInt32);
90//nm32u* nmppsMalloc_32u(unsigned sizeInt32);
91//nm64s* nmppsMalloc_64s(unsigned sizeInt64);
92//nm64u* nmppsMalloc_64u(unsigned sizeInt64);
93//void nmppsFree32(void* buffer);
94
95typedef struct {
96 void* pull;
97 nm8u* data;
99
100typedef struct {
101 void* pull;
102 nm8s* data;
104
105typedef struct {
106 void* pull;
107 nm16u* data;
109
110typedef struct {
111 void* pull;
112 nm16s* data;
114
115typedef struct {
116 void* pull;
117 nm32u* data;
119
120typedef struct {
121 void* pull;
122 nm32s* data;
124
125typedef struct {
126 void* pull;
127 nm64u* data;
129
130typedef struct {
131 void* pull;
132 nm64s* data;
134
135//NmppsFrame_32s* nmppsMallocFrame32 (unsigned sizeInt32, unsigned boundaryInt32);
136nm8s* nmppsMallocFrame_8s (unsigned sizeInt8 , unsigned boundaryInt8 , NmppsFrame_8s * pFrame) ;
137nm8u* nmppsMallocFrame_8u (unsigned sizeInt8 , unsigned boundaryInt8 , NmppsFrame_8u * pFrame) ;
138nm16s* nmppsMallocFrame_16s(unsigned sizeInt16, unsigned boundaryInt16, NmppsFrame_16s* pFrame);
139nm16u* nmppsMallocFrame_16u(unsigned sizeInt16, unsigned boundaryInt16, NmppsFrame_16u* pFrame);
140nm32s* nmppsMallocFrame_32s(unsigned sizeInt32, unsigned boundaryInt32, NmppsFrame_32s* pFrame);
141nm32u* nmppsMallocFrame_32u(unsigned sizeInt32, unsigned boundaryInt32, NmppsFrame_32u* pFrame);
142nm64s* nmppsMallocFrame_64s(unsigned sizeInt64, unsigned boundaryInt64, NmppsFrame_64s* pFrame);
143nm64u* nmppsMallocFrame_64u(unsigned sizeInt64, unsigned boundaryInt64, NmppsFrame_64u* pFrame);
144void nmppsFreeFrame(void* pFrame);
145
146
147/*
148typedef struct ss {
149 void* pull;
150 void* data;
151}NmppiFrame;
152
153nm8s* nmppiMallocFrame_8s (unsigned width, unsigned height, unsigned border, NmppiFrame_8s * pFrame);
154nm8u* nmppiMallocFrame_8u (unsigned width, unsigned height, unsigned border, NmppiFrame_8u * pFrame);
155nm16s* nmppiMallocFrame_16s(unsigned width, unsigned height, unsigned border, NmppiFrame_16s* pFrame);
156nm16u* nmppiMallocFrame_16u(unsigned width, unsigned height, unsigned border, NmppiFrame_16u* pFrame);
157nm32s* nmppiMallocFrame_32s(unsigned width, unsigned height, unsigned border, NmppiFrame_32s* pFrame);
158nm32u* nmppiMallocFrame_32u(unsigned width, unsigned height, unsigned border, NmppiFrame_32u* pFrame);
159nm64s* nmppiMallocFrame_64s(unsigned width, unsigned height, unsigned border, NmppiFrame_64s* pFrame);
160nm64u* nmppiMallocFrame_64u(unsigned width, unsigned height, unsigned border, NmppiFrame_64u* pFrame);
161void nmppsFreeFrame32(void* buffer);
162*/
163
164
165
166typedef struct {
167 void* buffer;
168 int status;
169 int mode;
170 fseq64 route;
171} SpecTmp1;
172//
173//typedef struct {
174// nm8s* buffer0;
175// nm8s* buffer1;
176// int status;
177// int mode;
178// fseq64 route;
179//} Spec8s;
180
181//int nmppsMallocCreate(int limit);
182//int nmppsMallocDestroy();
183//int nmppsMallocMode(WIPE_ENABLE|REC_HISTORY|REC_ROUTE);
184
185//void* nmppsMallocSpec_8s(SpecTmp1* spec,int size, int mode);
186void* nmppsMallocSpec1(SpecTmp1* spc,int sizeBuf0,int , int);
187void* nmppsFreeSpec1 (SpecTmp1* spc);
188
189int nmppsMallocResetPos();
190int nmppsMallocResetRoute ();
191void nmppsMallocSetRouteMode ();
192void nmppsMallocSetRingMode ();
193//void nmppsMallocSetRouteModeEx(seq64* heapSeq, int routeSize, int routeLimit);
194
195//void nmppsMallocSetBigRouteMode(seq64* heapSeq, int heapCount);
196//void nmppsMallocSetRandomMode(uint32 heapSet, int heapCount);
197//void nmppsMallocSetPriorityMode (seq64 heapSeq, int heapCount);
198//void nmppsMallocSetHistoryMode(seq64* addrSeq, void** allocSeq);
199void nmppsMallocSetHistoryMode();
200void nmppsMallocRecHistory (void** allocSeq, void** freeSeq);
201//int nmppsMallocStopAddrRec ();
202//void nmppsMallocStartRouteRec (seq64* heapSeq, int maxHeapCount);
203//int nmppsMallocStopRouteRec ();
204//void nmppsMallocSetBoundary32 (int size32 );
205//void nmppsMallocSetFill32(int borderColor, int dataColor );
206//int nmppsMallocCheckBoundary(void*);
207//int nmppsMallocIsErrorStatus();
208int nmppsMallocSuccess();
209int nmppsMallocFail();
210int nmppsMallocStatus();
211void nmppsMallocResetStatus ();
212//int nmppsMallocGetHistory (fseq64* heapSeq, int seqSize);
213//int nmppsMallocSaveState();
214//int nmppsMallocRestoreState();
215//void nmppsMallocReset(seq64* currRoute,void** allocHistory,void** freeHistory, int size);
216
217void nmppsMallocTimerStart();
218void nmppsMallocTimerResume();
219void nmppsMallocTimerStop();
220
221//void nmppsMallocNextRoute(seq64* currRoute, int mode);
222void nmppsMallocRandomRoute();
223int nmppsMallocIncrementRoute0();
224int nmppsMallocIncrementRoute(int routeLength, int heapMask );
225int nmppsMallocWipe();
226int nmppsMallocBetterRoute();
227void nmppsMallocSetBestRoute(int historyEnable);
228int nmppsMallocSetRoute(fseq64* route, int count); // implemented
229void nmppsMallocSetShortRoute(fseq64 route);
230void nmppsMallocSetRoute16(fseq64 route);
231void nmppsMallocGetRoute16(fseq64* route);
232extern struct NmppsMallocSpec nmppsMallocSpec;
233
234
260void* nmppsMalloc32 (unsigned sizeInt32);
261nm64s* nmppsMalloc_64s (unsigned nSize);
262nm1* nmppsMalloc_1 (unsigned nSize) ;//{return (nm1* )nmppsMalloc_64s((nSize>>6) +1);}
263nm2s* nmppsMalloc_2s (unsigned nSize) ;//{return (nm2s* )nmppsMalloc_64s((nSize>>5) +1);}
264nm2u* nmppsMalloc_2u (unsigned nSize) ;//{return (nm2u* )nmppsMalloc_64s((nSize>>5) +1);}
265nm4s* nmppsMalloc_4s (unsigned nSize) ;//{return (nm4s* )nmppsMalloc_64s((nSize>>4) +1);}
266nm4u* nmppsMalloc_4u (unsigned nSize) ;//{return (nm4u* )nmppsMalloc_64s((nSize>>4) +1);}
267nm8u* nmppsMalloc_8u (unsigned nSize) ;//{return (nm8u* )nmppsMalloc_64s((nSize>>3) +1);}
268nm8s* nmppsMalloc_8s (unsigned nSize) ;//{return (nm8s* )nmppsMalloc_64s((nSize>>3) +1);}
269nm16u* nmppsMalloc_16u (unsigned nSize) ;//{return (nm16u*)nmppsMalloc_64s((nSize>>2) +1);}
270nm16s* nmppsMalloc_16s (unsigned nSize) ;//{return (nm16s*)nmppsMalloc_64s((nSize>>2) +1);}
271nm32u* nmppsMalloc_32u (unsigned nSize) ;//{return (nm32u*)nmppsMalloc_64s((nSize>>1) +1);}
272nm32s* nmppsMalloc_32s (unsigned nSize) ;//{return (nm32s*)nmppsMalloc_64s((nSize>>1) +1);}
273nm64u* nmppsMalloc_64u (unsigned nSize) ;//{return (nm64u*)nmppsMalloc_64s(nSize);}
274nm64sc* nmppsMalloc_64sc (unsigned nSize) ;//{return (nm64u*)nmppsMalloc_64s(nSize);}
275nm32sc* nmppsMalloc_32sc (unsigned sizeCmplxInt32);
276nm32fc* nmppsMalloc_32fc (unsigned sizeCmplxFloat);
277nm32fcr* nmppsMalloc_32fcr(unsigned sizeCmplxFloat);
278float* nmppsMalloc_32f (unsigned sizeFloat);
279double* nmppsMalloc_64f (unsigned sizeDouble);
280
281
282/*
283__INLINE__ void nmppsMalloc_1 (nm1** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>6) +1, hint);}
284__INLINE__ void nmppsMalloc_2s(nm2s** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>5) +1, hint);}
285__INLINE__ void nmppsMalloc_2u(nm2u** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>5) +1, hint);}
286__INLINE__ void nmppsMalloc_4s(nm4s** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>4) +1, hint);}
287__INLINE__ void nmppsMalloc_4u(nm4u** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>4) +1, hint);}
288__INLINE__ void nmppsMalloc_8u(nm8u** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>3) +1, hint);}
289__INLINE__ void nmppsMalloc_8s(nm8s** pptr, int nSize, int hint ) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>3) +1, hint);}
290__INLINE__ void nmppsMalloc_16u(nm16u** pptr, int nSize, int hint) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>2) +1, hint);}
291__INLINE__ void nmppsMalloc_16s(nm16s** pptr, int nSize, int hint) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>2) +1, hint);}
292__INLINE__ void nmppsMalloc_32u(nm32u** pptr, int nSize, int hint) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>1) +1, hint);}
293__INLINE__ void nmppsMalloc_32s(nm32s** pptr, int nSize, int hint) { nmppsMalloc_64s((nm64s**)pptr, (nSize>>1) +1, hint);}
294__INLINE__ void nmppsMalloc_64u(nm64u** pptr, int nSize, int hint) { nmppsMalloc_64s((nm64s**)pptr, nSize, hint);}
295*/
297
298//*****************************************************************************
299
316
317
318 void nmppsFree(void* ptr);
319
321
322
323
324#ifdef __cplusplus
325 };
326#endif
327
328#endif
unsigned char nm8u
Definition: nmtype.h:448
int nm32s
Definition: nmtype.h:292
void nm4u
Definition: nmtype.h:417
unsigned short nm16u
Definition: nmtype.h:481
long long nm64s
Definition: nmtype.h:375
void nm2s
Definition: nmtype.h:116
void nm2u
Definition: nmtype.h:404
int nm1
Definition: nmtype.h:100
short nm16s
Definition: nmtype.h:243
unsigned int nm32u
Definition: nmtype.h:509
void nm4s
Definition: nmtype.h:129
unsigned long long nm64u
Definition: nmtype.h:536
char nm8s
Definition: nmtype.h:167
Definition: malloc32.h:110
Definition: malloc32.h:105
Definition: malloc32.h:120
Definition: malloc32.h:115
Definition: malloc32.h:130
Definition: malloc32.h:125
Definition: malloc32.h:100
Definition: malloc32.h:95
Definition: malloc32.h:55
Definition: malloc32.h:73
Definition: malloc32.h:166
Definition: nmtype.h:1328
Definition: nmtype.h:1335
Definition: nmtype.h:1301
Definition: nmtype.h:1364