00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019
00020 #define memcpyloop1()\
00021 while (n--) {\
00022 if (*m == id) {\
00023 *d = *s;\
00024 }\
00025 d++;\
00026 s++;\
00027 m++;\
00028 }
00029
00030 #define memcpyloop2()\
00031 while (n--) {\
00032 if ((*m == id) && (*m_)) {\
00033 *d = *s;\
00034 }\
00035 d++;\
00036 s++;\
00037 m++;\
00038 m_++;\
00039 }
00040
00041 #define memcpyloop3()\
00042 while (n--) {\
00043 *d++ = *s++;\
00044 }
00045
00046 #define memcpyloop4()\
00047 while (n--) {\
00048 if (*m) {\
00049 *d = *s;\
00050 }\
00051 d++;\
00052 s++;\
00053 m++;\
00054 }
00055
00056 #define memcpyloop5()\
00057 while (n--) {\
00058 a = ~*m;\
00059 if (a != 0xff) {\
00060 if (a == 0x00) {\
00061 *d = *s;\
00062 } else {\
00063 dr = (*d >> ro) << rl;\
00064 dg = (*d >> go) << gl;\
00065 db = (*d >> bo) << bl;\
00066 sr = (*s >> ro) << rl;\
00067 sg = (*s >> go) << gl;\
00068 sb = (*s >> bo) << bl;\
00069 dr = (a * (dr - sr) >> 8) + sr;\
00070 dg = (a * (dg - sg) >> 8) + sg;\
00071 db = (a * (db - sb) >> 8) + sb;\
00072 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00073 }\
00074 }\
00075 d++;\
00076 s++;\
00077 m++;\
00078 }
00079
00080 #define memcpyloop6()\
00081 while (n--) {\
00082 a = ~*m_;\
00083 if ((*m == id) && (a != 0xff)) {\
00084 if (a == 0x00) {\
00085 *d = *s;\
00086 } else {\
00087 dr = (*d >> ro) << rl;\
00088 dg = (*d >> go) << gl;\
00089 db = (*d >> bo) << bl;\
00090 sr = (*s >> ro) << rl;\
00091 sg = (*s >> go) << gl;\
00092 sb = (*s >> bo) << bl;\
00093 dr = (a * (dr - sr) >> 8) + sr;\
00094 dg = (a * (dg - sg) >> 8) + sg;\
00095 db = (a * (db - sb) >> 8) + sb;\
00096 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00097 }\
00098 }\
00099 d++;\
00100 s++;\
00101 m++;\
00102 m_++;\
00103 }
00104
00105 #define memcpyloop7()\
00106 while (n--) {\
00107 dr = *s >> 0x18;\
00108 dg = *s >> 0x10;\
00109 db = *s >> 0x08;\
00110 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00111 d++;\
00112 s++;\
00113 }
00114
00115 #define memcpyloop8()\
00116 while (n--) {\
00117 if (*m == id) {\
00118 dr = *s >> 0x18;\
00119 dg = *s >> 0x10;\
00120 db = *s >> 0x08;\
00121 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00122 }\
00123 d++;\
00124 s++;\
00125 m++;\
00126 }
00127
00128 #define memcpyloop9()\
00129 while (n--) {\
00130 a = *s;\
00131 if (a != 0xff) {\
00132 sr = *s >> 0x18;\
00133 sg = *s >> 0x10;\
00134 sb = *s >> 0x08;\
00135 if (a == 0x00) {\
00136 dr = sr;\
00137 dg = sg;\
00138 db = sb;\
00139 } else {\
00140 dr = (*d >> ro) << rl;\
00141 dg = (*d >> go) << gl;\
00142 db = (*d >> bo) << bl;\
00143 dr = (a * (dr - sr) >> 8) + sr;\
00144 dg = (a * (dg - sg) >> 8) + sg;\
00145 db = (a * (db - sb) >> 8) + sb;\
00146 }\
00147 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00148 }\
00149 d++;\
00150 s++;\
00151 }
00152
00153 #define memcpyloop10()\
00154 while (n--) {\
00155 a = *s;\
00156 if ((*m == id) && (a != 0xff)) {\
00157 sr = *s >> 0x18;\
00158 sg = *s >> 0x10;\
00159 sb = *s >> 0x08;\
00160 if (a == 0x00) {\
00161 dr = sr;\
00162 dg = sg;\
00163 db = sb;\
00164 } else {\
00165 dr = (*d >> ro) << rl;\
00166 dg = (*d >> go) << gl;\
00167 db = (*d >> bo) << bl;\
00168 dr = (a * (dr - sr) >> 8) + sr;\
00169 dg = (a * (dg - sg) >> 8) + sg;\
00170 db = (a * (db - sb) >> 8) + sb;\
00171 }\
00172 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00173 }\
00174 d++;\
00175 s++;\
00176 m++;\
00177 }
00178
00179 #define memsetloop1()\
00180 while (n--) {\
00181 if (*m == id) {\
00182 *d = dc;\
00183 }\
00184 d++;\
00185 m++;\
00186 }
00187
00188 #define memsetloop3()\
00189 while (n--) {\
00190 *d++ = dc;\
00191 }
00192
00193 static inline void s_memcpy1o (unsigned char *m, int id, void *dest, void *src, int n)
00194 {
00195 unsigned char *d = (unsigned char *) dest;
00196 unsigned char *s = (unsigned char *) src;
00197 memcpyloop1();
00198 }
00199
00200 static inline void s_memcpy2o (unsigned char *m, int id, void *dest, void *src, int n)
00201 {
00202 unsigned short int *d = (unsigned short int *) dest;
00203 unsigned short int *s = (unsigned short int *) src;
00204 memcpyloop1();
00205 }
00206
00207 static inline void s_memcpy4o (unsigned char *m, int id, void *dest, void *src, int n)
00208 {
00209 unsigned int *d = (unsigned int *) dest;
00210 unsigned int *s = (unsigned int *) src;
00211 memcpyloop1();
00212 }
00213
00214 static inline void s_memcpy1om (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n)
00215 {
00216 unsigned char *d = (unsigned char *) dest;
00217 unsigned char *s = (unsigned char *) src;
00218 unsigned char *m_ = (unsigned char *) mask;
00219 memcpyloop2();
00220 }
00221
00222 static inline void s_memcpy2om (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n)
00223 {
00224 unsigned short int *d = (unsigned short int *) dest;
00225 unsigned short int *s = (unsigned short int *) src;
00226 unsigned char *m_ = (unsigned char *) mask;
00227 memcpyloop2();
00228 }
00229
00230 static inline void s_memcpy4om (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n)
00231 {
00232 unsigned int *d = (unsigned int *) dest;
00233 unsigned int *s = (unsigned int *) src;
00234 unsigned char *m_ = (unsigned char *) mask;
00235 memcpyloop2();
00236 }
00237
00238 static inline void s_memcpy1oa (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00239 {
00240 unsigned char a;
00241 unsigned char sr;
00242 unsigned char sg;
00243 unsigned char sb;
00244 unsigned char dr;
00245 unsigned char dg;
00246 unsigned char db;
00247 unsigned char *d = (unsigned char *) dest;
00248 unsigned char *s = (unsigned char *) src;
00249 unsigned char *m_ = (unsigned char *) mask;
00250 rl = 8 - rl;
00251 gl = 8 - gl;
00252 bl = 8 - bl;
00253 memcpyloop6();
00254 }
00255
00256 static inline void s_memcpy2oa (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00257 {
00258 unsigned char a;
00259 unsigned char sr;
00260 unsigned char sg;
00261 unsigned char sb;
00262 unsigned char dr;
00263 unsigned char dg;
00264 unsigned char db;
00265 unsigned short int *d = (unsigned short int *) dest;
00266 unsigned short int *s = (unsigned short int *) src;
00267 unsigned char *m_ = (unsigned char *) mask;
00268 rl = 8 - rl;
00269 gl = 8 - gl;
00270 bl = 8 - bl;
00271 memcpyloop6();
00272 }
00273
00274 static inline void s_memcpy4oa (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00275 {
00276 unsigned char a;
00277 unsigned char sr;
00278 unsigned char sg;
00279 unsigned char sb;
00280 unsigned char dr;
00281 unsigned char dg;
00282 unsigned char db;
00283 unsigned int *d = (unsigned int *) dest;
00284 unsigned int *s = (unsigned int *) src;
00285 unsigned char *m_ = (unsigned char *) mask;
00286 rl = 8 - rl;
00287 gl = 8 - gl;
00288 bl = 8 - bl;
00289 memcpyloop6();
00290 }
00291
00292 static inline void s_memcpy1orgb (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00293 {
00294 unsigned char dr;
00295 unsigned char dg;
00296 unsigned char db;
00297 unsigned char *d = (unsigned char *) dest;
00298 unsigned int *s = (unsigned int *) rgb;
00299 rl = 8 - rl;
00300 gl = 8 - gl;
00301 bl = 8 - bl;
00302 memcpyloop8();
00303 }
00304
00305 static inline void s_memcpy2orgb (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00306 {
00307 unsigned char dr;
00308 unsigned char dg;
00309 unsigned char db;
00310 unsigned short int *d = (unsigned short int *) dest;
00311 unsigned int *s = (unsigned int *) rgb;
00312 rl = 8 - rl;
00313 gl = 8 - gl;
00314 bl = 8 - bl;
00315 memcpyloop8();
00316 }
00317
00318 static inline void s_memcpy4orgb (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00319 {
00320 unsigned char dr;
00321 unsigned char dg;
00322 unsigned char db;
00323 unsigned int *d = (unsigned int *) dest;
00324 unsigned int *s = (unsigned int *) rgb;
00325 rl = 8 - rl;
00326 gl = 8 - gl;
00327 bl = 8 - bl;
00328 memcpyloop8();
00329 }
00330
00331 static inline void s_memcpy1orgba (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00332 {
00333 unsigned char a;
00334 unsigned char sr;
00335 unsigned char sg;
00336 unsigned char sb;
00337 unsigned char dr;
00338 unsigned char dg;
00339 unsigned char db;
00340 unsigned char *d = (unsigned char *) dest;
00341 unsigned int *s = (unsigned int *) rgb;
00342 rl = 8 - rl;
00343 gl = 8 - gl;
00344 bl = 8 - bl;
00345 memcpyloop10();
00346 }
00347
00348 static inline void s_memcpy2orgba (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00349 {
00350 unsigned char a;
00351 unsigned char sr;
00352 unsigned char sg;
00353 unsigned char sb;
00354 unsigned char dr;
00355 unsigned char dg;
00356 unsigned char db;
00357 unsigned short int *d = (unsigned short int *) dest;
00358 unsigned int *s = (unsigned int *) rgb;
00359 rl = 8 - rl;
00360 gl = 8 - gl;
00361 bl = 8 - bl;
00362 memcpyloop10();
00363 }
00364
00365 static inline void s_memcpy4orgba (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00366 {
00367 unsigned char a;
00368 unsigned char sr;
00369 unsigned char sg;
00370 unsigned char sb;
00371 unsigned char dr;
00372 unsigned char dg;
00373 unsigned char db;
00374 unsigned int *d = (unsigned int *) dest;
00375 unsigned int *s = (unsigned int *) rgb;
00376 rl = 8 - rl;
00377 gl = 8 - gl;
00378 bl = 8 - bl;
00379 memcpyloop10();
00380 }
00381
00382 static inline void s_memcpy1 (void *dest, void *src, int n)
00383 {
00384 unsigned char *d = (unsigned char *) dest;
00385 unsigned char *s = (unsigned char *) src;
00386 memcpyloop3();
00387 }
00388
00389 static inline void s_memcpy2 (void *dest, void *src, int n)
00390 {
00391 unsigned short int *d = (unsigned short int *) dest;
00392 unsigned short int *s = (unsigned short int *) src;
00393 memcpyloop3();
00394 }
00395
00396 static inline void s_memcpy4 (void *dest, void *src, int n)
00397 {
00398 unsigned int *d = (unsigned int *) dest;
00399 unsigned int *s = (unsigned int *) src;
00400 memcpyloop3();
00401 }
00402
00403 static inline void s_memcpy1m (void *dest, void *src, unsigned char *mask, int n)
00404 {
00405 unsigned char *m = (unsigned char *) mask;
00406 unsigned char *d = (unsigned char *) dest;
00407 unsigned char *s = (unsigned char *) src;
00408 memcpyloop4();
00409 }
00410
00411 static inline void s_memcpy2m (void *dest, void *src, unsigned char *mask, int n)
00412 {
00413 unsigned char *m = (unsigned char *) mask;
00414 unsigned short int *d = (unsigned short int *) dest;
00415 unsigned short int *s = (unsigned short int *) src;
00416 memcpyloop4();
00417 }
00418
00419 static inline void s_memcpy4m (void *dest, void *src, unsigned char *mask, int n)
00420 {
00421 unsigned char *m = (unsigned char *) mask;
00422 unsigned int *d = (unsigned int *) dest;
00423 unsigned int *s = (unsigned int *) src;
00424 memcpyloop4();
00425 }
00426
00427 static inline void s_memcpy1a (void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00428 {
00429 unsigned char a;
00430 unsigned char sr;
00431 unsigned char sg;
00432 unsigned char sb;
00433 unsigned char dr;
00434 unsigned char dg;
00435 unsigned char db;
00436 unsigned char *m = (unsigned char *) mask;
00437 unsigned char *d = (unsigned char *) dest;
00438 unsigned char *s = (unsigned char *) src;
00439 rl = 8 - rl;
00440 gl = 8 - gl;
00441 bl = 8 - bl;
00442 memcpyloop5();
00443 }
00444
00445 static inline void s_memcpy2a (void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00446 {
00447 unsigned char a;
00448 unsigned char sr;
00449 unsigned char sg;
00450 unsigned char sb;
00451 unsigned char dr;
00452 unsigned char dg;
00453 unsigned char db;
00454 unsigned char *m = (unsigned char *) mask;
00455 unsigned short int *d = (unsigned short int *) dest;
00456 unsigned short int *s = (unsigned short int *) src;
00457 rl = 8 - rl;
00458 gl = 8 - gl;
00459 bl = 8 - bl;
00460 memcpyloop5();
00461 }
00462
00463 static inline void s_memcpy4a (void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00464 {
00465 unsigned char a;
00466 unsigned char sr;
00467 unsigned char sg;
00468 unsigned char sb;
00469 unsigned char dr;
00470 unsigned char dg;
00471 unsigned char db;
00472 unsigned char *m = (unsigned char *) mask;
00473 unsigned int *d = (unsigned int *) dest;
00474 unsigned int *s = (unsigned int *) src;
00475 rl = 8 - rl;
00476 gl = 8 - gl;
00477 bl = 8 - bl;
00478 memcpyloop5();
00479 }
00480
00481 static inline void s_memcpy1rgb (void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00482 {
00483 unsigned char dr;
00484 unsigned char dg;
00485 unsigned char db;
00486 unsigned char *d = (unsigned char *) dest;
00487 unsigned int *s = (unsigned int *) rgb;
00488 rl = 8 - rl;
00489 gl = 8 - gl;
00490 bl = 8 - bl;
00491 memcpyloop7();
00492 }
00493
00494 static inline void s_memcpy2rgb (void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00495 {
00496 unsigned char dr;
00497 unsigned char dg;
00498 unsigned char db;
00499 unsigned short int *d = (unsigned short int *) dest;
00500 unsigned int *s = (unsigned int *) rgb;
00501 rl = 8 - rl;
00502 gl = 8 - gl;
00503 bl = 8 - bl;
00504 memcpyloop7();
00505 }
00506
00507 static inline void s_memcpy4rgb (void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00508 {
00509 unsigned char dr;
00510 unsigned char dg;
00511 unsigned char db;
00512 unsigned int *d = (unsigned int *) dest;
00513 unsigned int *s = (unsigned int *) rgb;
00514 rl = 8 - rl;
00515 gl = 8 - gl;
00516 bl = 8 - bl;
00517 memcpyloop7();
00518 }
00519
00520 static inline void s_memcpy1rgba (void *dest, unsigned int *rgba, int n, int rl, int gl, int bl, int ro, int go, int bo)
00521 {
00522 unsigned char a;
00523 unsigned char sr;
00524 unsigned char sg;
00525 unsigned char sb;
00526 unsigned char dr;
00527 unsigned char dg;
00528 unsigned char db;
00529 unsigned char *d = (unsigned char *) dest;
00530 unsigned int *s = (unsigned int *) rgba;
00531 rl = 8 - rl;
00532 gl = 8 - gl;
00533 bl = 8 - bl;
00534 memcpyloop9();
00535 }
00536
00537 static inline void s_memcpy2rgba (void *dest, unsigned int *rgba, int n, int rl, int gl, int bl, int ro, int go, int bo)
00538 {
00539 unsigned char a;
00540 unsigned char sr;
00541 unsigned char sg;
00542 unsigned char sb;
00543 unsigned char dr;
00544 unsigned char dg;
00545 unsigned char db;
00546 unsigned short int *d = (unsigned short int *) dest;
00547 unsigned int *s = (unsigned int *) rgba;
00548 rl = 8 - rl;
00549 gl = 8 - gl;
00550 bl = 8 - bl;
00551 memcpyloop9();
00552 }
00553
00554 static inline void s_memcpy4rgba (void *dest, unsigned int *rgba, int n, int rl, int gl, int bl, int ro, int go, int bo)
00555 {
00556 unsigned char a;
00557 unsigned char sr;
00558 unsigned char sg;
00559 unsigned char sb;
00560 unsigned char dr;
00561 unsigned char dg;
00562 unsigned char db;
00563 unsigned int *d = (unsigned int *) dest;
00564 unsigned int *s = (unsigned int *) rgba;
00565 rl = 8 - rl;
00566 gl = 8 - gl;
00567 bl = 8 - bl;
00568 memcpyloop9();
00569 }
00570
00571 static inline void s_memset1o (unsigned char *m, int id, void *dest, int c, int n)
00572 {
00573 unsigned char dc = (unsigned char) c;
00574 unsigned char *d = (unsigned char *) dest;
00575 memsetloop1();
00576 }
00577
00578 static inline void s_memset2o (unsigned char *m, int id, void *dest, int c, int n)
00579 {
00580 unsigned short int dc = (unsigned short int) c;
00581 unsigned short int *d = (unsigned short int *) dest;
00582 memsetloop1();
00583 }
00584
00585 static inline void s_memset4o (unsigned char *m, int id, void *dest, int c, int n)
00586 {
00587 unsigned int dc = (unsigned int) c;
00588 unsigned int *d = (unsigned int *) dest;
00589 memsetloop1();
00590 }
00591
00592 static inline void s_memset1 (void *dest, int c, int n)
00593 {
00594 unsigned char dc = (unsigned char) c;
00595 unsigned char *d = (unsigned char *) dest;
00596 memsetloop3();
00597 }
00598
00599 static inline void s_memset2 (void *dest, int c, int n)
00600 {
00601 unsigned short int dc = (unsigned short int) c;
00602 unsigned short int *d = (unsigned short int *) dest;
00603 memsetloop3();
00604 }
00605
00606 static inline void s_memset4 (void *dest, int c, int n)
00607 {
00608 unsigned int dc = (unsigned int) c;
00609 unsigned int *d = (unsigned int *) dest;
00610 memsetloop3();
00611 }
00612
00613 #ifdef __cplusplus
00614 }
00615 #endif