patch from Tiago Falcão - unroll loops in evas a bit.

SVN revision: 39467
This commit is contained in:
Carsten Haitzler 2009-03-13 15:18:39 +00:00
parent 750bdfce3d
commit 6bc4266805
12 changed files with 534 additions and 476 deletions

View File

@ -4,12 +4,12 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l, a = 256 - (c >> 24); DATA32 *e, a = 256 - (c >> 24);
while (d < e) UNROLL8_PLD_WHILE(d, l, e,
{ {
*d = c + MUL_256(a, *d); *d = c + MUL_256(a, *d);
d++; d++;
} });
} }
#define _op_blend_caa_dp _op_blend_c_dp #define _op_blend_caa_dp _op_blend_c_dp
@ -31,8 +31,8 @@ init_blend_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_blend_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
s = 256 - (c >> 24); s = 256 - (c >> 24);
*d = c + MUL_256(s, *d); *d = c + MUL_256(s, *d);
} }
#define _op_blend_pt_caa_dp _op_blend_pt_c_dp #define _op_blend_pt_caa_dp _op_blend_pt_c_dp
@ -61,13 +61,13 @@ init_blend_color_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
l = 256 - (c >> 24); int alpha = 256 - (c >> 24);
while (d < e) UNROLL8_PLD_WHILE(d, l, e,
{ {
*d = MUL_SYM(*d >> 24, c) + MUL_256(l, *d); *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
d++; d++;
} });
} }
#define _op_blend_rel_caa_dp _op_blend_rel_c_dp #define _op_blend_rel_caa_dp _op_blend_rel_c_dp
@ -89,8 +89,8 @@ init_blend_rel_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_blend_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
s = *d >> 24; s = *d >> 24;
*d = MUL_SYM(s, c) + MUL_256(256 - (c >> 24), *d); *d = MUL_SYM(s, c) + MUL_256(256 - (c >> 24), *d);
} }
#define _op_blend_rel_pt_caa_dp _op_blend_rel_pt_c_dp #define _op_blend_rel_pt_caa_dp _op_blend_rel_pt_c_dp

View File

@ -4,48 +4,51 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_blend_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
l = 256 - (c >> 24); int alpha = 256 - (c >> 24);
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
DATA32 a = *m; {
switch(a) DATA32 a = *m;
{ switch(a)
case 0: {
break; case 0:
case 255: break;
*d = c + MUL_256(l, *d); case 255:
break; *d = c + MUL_256(alpha, *d);
default: break;
{ default:
DATA32 mc = MUL_SYM(a, c); {
a = 256 - (mc >> 24); DATA32 mc = MUL_SYM(a, c);
*d = mc + MUL_256(a, *d); a = 256 - (mc >> 24);
} *d = mc + MUL_256(a, *d);
break; }
} break;
m++; d++; }
} m++; d++;
});
} }
static void static void
_op_blend_mas_can_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_blend_mas_can_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ alpha = *m;
case 0: switch(alpha)
break; {
case 255: case 0:
*d = c; break;
break; case 255:
default: *d = c;
l++; break;
*d = INTERP_256(l, c, *d); default:
break; alpha++;
} *d = INTERP_256(alpha, c, *d);
m++; d++; break;
} }
m++; d++;
});
} }
#define _op_blend_mas_cn_dp _op_blend_mas_can_dp #define _op_blend_mas_cn_dp _op_blend_mas_can_dp
@ -74,14 +77,14 @@ init_blend_mask_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { _op_blend_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
s = MUL_SYM(m, c); s = MUL_SYM(m, c);
m = 256 - (s >> 24); m = 256 - (s >> 24);
*d = s + MUL_256(m, *d); *d = s + MUL_256(m, *d);
} }
static void static void
_op_blend_pt_mas_can_dp(DATA32 s __UNUSED__, DATA8 m, DATA32 c, DATA32 *d) { _op_blend_pt_mas_can_dp(DATA32 s __UNUSED__, DATA8 m, DATA32 c, DATA32 *d) {
*d = INTERP_256(m + 1, c, *d); *d = INTERP_256(m + 1, c, *d);
} }
#define _op_blend_pt_mas_cn_dp _op_blend_pt_mas_can_dp #define _op_blend_pt_mas_cn_dp _op_blend_pt_mas_can_dp
@ -114,14 +117,16 @@ init_blend_mask_color_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_blend_rel_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
DATA32 mc = MUL_SYM(*m, c); UNROLL8_PLD_WHILE(d, l, e,
l = 256 - (mc >> 24); {
*d = MUL_SYM(*d >> 24, mc) + MUL_256(l, *d); DATA32 mc = MUL_SYM(*m, c);
d++; alpha = 256 - (mc >> 24);
m++; *d = MUL_SYM(*d >> 24, mc) + MUL_256(alpha, *d);
} d++;
m++;
});
} }
#define _op_blend_rel_mas_cn_dp _op_blend_rel_mas_c_dp #define _op_blend_rel_mas_cn_dp _op_blend_rel_mas_c_dp
@ -151,9 +156,9 @@ init_blend_rel_mask_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { _op_blend_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
s = MUL_SYM(m, c); s = MUL_SYM(m, c);
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d); *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
} }
#define _op_blend_rel_pt_mas_cn_dp _op_blend_rel_pt_mas_c_dp #define _op_blend_rel_pt_mas_cn_dp _op_blend_rel_pt_mas_c_dp

View File

@ -4,33 +4,36 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) { _op_blend_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = 256 - (*s >> 24); UNROLL8_PLD_WHILE(d, l, e,
*d = *s++ + MUL_256(l, *d); {
d++; alpha = 256 - (*s >> 24);
} *d = *s++ + MUL_256(alpha, *d);
d++;
});
} }
static void static void
_op_blend_pas_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) { _op_blend_pas_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) int alpha;
{ UNROLL8_PLD_WHILE(d, l, e,
switch (*s & 0xff000000) {
{ switch (*s & 0xff000000)
case 0: {
break; case 0:
case 0xff000000: break;
*d = *s; case 0xff000000:
break; *d = *s;
default : break;
l = 256 - (*s >> 24); default:
*d = *s + MUL_256(l, *d); alpha = 256 - (*s >> 24);
break; *d = *s + MUL_256(alpha, *d);
} break;
s++; d++; }
} s++; d++;
});
} }
#define _op_blend_pan_dp NULL #define _op_blend_pan_dp NULL
@ -55,8 +58,8 @@ init_blend_pixel_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_blend_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = s + MUL_256(c, *d); *d = s + MUL_256(c, *d);
} }
#define _op_blend_pt_pas_dp _op_blend_pt_p_dp #define _op_blend_pt_pas_dp _op_blend_pt_p_dp
@ -86,24 +89,28 @@ init_blend_pixel_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_rel_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = 256 - (*s >> 24); UNROLL8_PLD_WHILE(d, l, e,
c = 1 + (*d >> 24); {
*d = MUL_256(c, *s) + MUL_256(l, *d); alpha = 256 - (*s >> 24);
d++; c = 1 + (*d >> 24);
s++; *d = MUL_256(c, *s) + MUL_256(alpha, *d);
} d++;
s++;
});
} }
static void static void
_op_blend_rel_pan_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_rel_pan_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
c = 1 + (*d >> 24); UNROLL8_PLD_WHILE(d, l, e,
*d++ = MUL_256(c, *s); {
s++; c = 1 + (*d >> 24);
} *d++ = MUL_256(c, *s);
s++;
});
} }
#define _op_blend_rel_pas_dp _op_blend_rel_p_dp #define _op_blend_rel_pas_dp _op_blend_rel_p_dp
@ -128,13 +135,13 @@ init_blend_rel_pixel_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_blend_rel_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d); *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
} }
static void static void
_op_blend_rel_pt_pan_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) { _op_blend_rel_pt_pan_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
*d = MUL_SYM(*d >> 24, s); *d = MUL_SYM(*d >> 24, s);
} }
#define _op_blend_rel_pt_pas_dp _op_blend_rel_pt_p_dp #define _op_blend_rel_pt_pas_dp _op_blend_rel_pt_p_dp

View File

@ -4,69 +4,78 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
DATA32 sc = MUL4_SYM(c, *s); UNROLL8_PLD_WHILE(d, l, e,
l = 256 - (sc >> 24); {
*d = sc + MUL_256(l, *d); DATA32 sc = MUL4_SYM(c, *s);
d++; alpha = 256 - (sc >> 24);
s++; *d = sc + MUL_256(alpha, *d);
} d++;
s++;
});
} }
static void static void
_op_blend_pan_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_pan_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
l = 256 - (c >> 24); int alpha = 256 - (c >> 24);
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
*d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(l, *d); {
d++; *d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
s++; d++;
} s++;
});
} }
static void static void
_op_blend_p_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_p_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = 256 - (*s >> 24); UNROLL8_PLD_WHILE(d, l, e,
*d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(l, *d); {
d++; alpha = 256 - (*s >> 24);
s++; *d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
} d++;
s++;
});
} }
static void static void
_op_blend_pan_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_pan_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
*d++ = 0xff000000 + MUL3_SYM(c, *s); {
s++; *d++ = 0xff000000 + MUL3_SYM(c, *s);
} s++;
});
} }
static void static void
_op_blend_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
int alpha;
c = 1 + (c & 0xff); c = 1 + (c & 0xff);
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
DATA32 sc = MUL_256(c, *s); {
l = 256 - (sc >> 24); DATA32 sc = MUL_256(c, *s);
*d = sc + MUL_256(l, *d); alpha = 256 - (sc >> 24);
d++; *d = sc + MUL_256(alpha, *d);
s++; d++;
} s++;
});
} }
static void static void
_op_blend_pan_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_pan_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
c = 1 + (c & 0xff); c = 1 + (c & 0xff);
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
*d = INTERP_256(c, *s, *d); {
d++; *d = INTERP_256(c, *s, *d);
s++; d++;
} s++;
});
} }
#define _op_blend_pas_c_dp _op_blend_p_c_dp #define _op_blend_pas_c_dp _op_blend_p_c_dp
@ -111,9 +120,9 @@ init_blend_pixel_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_blend_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
s = MUL4_SYM(c, s); s = MUL4_SYM(c, s);
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = s + MUL_256(c, *d); *d = s + MUL_256(c, *d);
} }
#define _op_blend_pt_pas_c_dp _op_blend_pt_p_c_dp #define _op_blend_pt_pas_c_dp _op_blend_pt_p_c_dp
@ -167,14 +176,16 @@ init_blend_pixel_color_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_blend_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
DATA32 sc = MUL4_SYM(c, *s); UNROLL8_PLD_WHILE(d, l, e,
l = 256 - (sc >> 24); {
*d = MUL_SYM(*d >> 24, sc) + MUL_256(l, *d); DATA32 sc = MUL4_SYM(c, *s);
d++; alpha = 256 - (sc >> 24);
s++; *d = MUL_SYM(*d >> 24, sc) + MUL_256(alpha, *d);
} d++;
s++;
});
} }
#define _op_blend_rel_pas_c_dp _op_blend_rel_p_c_dp #define _op_blend_rel_pas_c_dp _op_blend_rel_p_c_dp
@ -224,9 +235,9 @@ init_blend_rel_pixel_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_blend_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
s = MUL4_SYM(c, s); s = MUL4_SYM(c, s);
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d); *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
} }
#define _op_blend_rel_pt_pas_c_dp _op_blend_rel_pt_p_c_dp #define _op_blend_rel_pt_pas_c_dp _op_blend_rel_pt_p_c_dp

View File

@ -4,68 +4,73 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_blend_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ alpha = *m;
case 0: switch(alpha)
break; {
case 255: case 0:
l = 256 - (*s >> 24); break;
*d = *s + MUL_256(l, *d); case 255:
break; alpha = 256 - (*s >> 24);
default: *d = *s + MUL_256(alpha, *d);
c = MUL_SYM(l, *s); break;
l = 256 - (c >> 24); default:
*d = c + MUL_256(l, *d); c = MUL_SYM(alpha, *s);
break; alpha = 256 - (c >> 24);
} *d = c + MUL_256(alpha, *d);
m++; s++; d++; break;
} }
m++; s++; d++;
});
} }
static void static void
_op_blend_pas_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_blend_pas_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = (*s >> 24); UNROLL8_PLD_WHILE(d, l, e,
switch(*m & l) {
{ alpha = (*s >> 24);
case 0: switch(alpha)
break; {
case 255: case 0:
*d = *s; break;
break; case 255:
default: *d = *s;
c = MUL_SYM(l, *s); break;
l = 256 - (c >> 24); default:
*d = c + MUL_256(l, *d); c = MUL_SYM(alpha, *s);
break; alpha = 256 - (c >> 24);
} *d = c + MUL_256(alpha, *d);
m++; s++; d++; break;
} }
});
} }
static void static void
_op_blend_pan_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) { _op_blend_pan_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ alpha = *m;
case 0: switch(alpha)
break; {
case 255: case 0:
*d = *s; break;
break; case 255:
default: *d = *s;
l++; break;
*d = INTERP_256(l, *s, *d); default:
break; alpha++;
} *d = INTERP_256(alpha, *s, *d);
m++; s++; d++; break;
} }
m++; s++; d++;
});
} }
@ -89,14 +94,14 @@ init_blend_pixel_mask_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { _op_blend_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
s = MUL_SYM(m, s); s = MUL_SYM(m, s);
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = s + MUL_256(c, *d); *d = s + MUL_256(c, *d);
} }
static void static void
_op_blend_pt_pan_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) { _op_blend_pt_pan_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) {
*d = INTERP_256(m + 1, s, *d); *d = INTERP_256(m + 1, s, *d);
} }
#define _op_blend_pt_pas_mas_dp _op_blend_pt_p_mas_dp #define _op_blend_pt_pas_mas_dp _op_blend_pt_p_mas_dp
@ -125,15 +130,15 @@ init_blend_pixel_mask_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_blend_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int alpha;
c = MUL_SYM(*m, *s); UNROLL8_PLD_WHILE(d, l, e,
l = 256 - (c >> 24); {
*d = MUL_SYM(*d >> 24, c) + MUL_256(l, *d); c = MUL_SYM(*m, *s);
d++; alpha = 256 - (c >> 24);
m++; *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
s++; d++; m++; s++;
} });
} }
#define _op_blend_rel_pas_mas_dp _op_blend_rel_p_mas_dp #define _op_blend_rel_pas_mas_dp _op_blend_rel_p_mas_dp
@ -159,9 +164,9 @@ init_blend_rel_pixel_mask_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_blend_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { _op_blend_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
s = MUL_SYM(m, s); s = MUL_SYM(m, s);
c = 256 - (s >> 24); c = 256 - (s >> 24);
*d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d); *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
} }
#define _op_blend_rel_pt_pas_mas_dp _op_blend_rel_pt_p_mas_dp #define _op_blend_rel_pt_pas_mas_dp _op_blend_rel_pt_p_mas_dp

View File

@ -4,10 +4,12 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_copy_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
for (; d < e; d++) { UNROLL8_PLD_WHILE(d, l, e,
*d = c; {
} *d = c;
d++;
});
} }
#define _op_copy_cn_dp _op_copy_c_dp #define _op_copy_cn_dp _op_copy_c_dp
@ -37,7 +39,7 @@ init_copy_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_pt_c_dp(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_copy_pt_c_dp(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
*d = c; *d = c;
} }
#define _op_copy_pt_cn_dp _op_copy_pt_c_dp #define _op_copy_pt_cn_dp _op_copy_pt_c_dp
@ -71,10 +73,12 @@ init_copy_color_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_copy_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
for (; d < e; d++) { UNROLL8_PLD_WHILE(d, l, e,
*d = MUL_SYM(*d >> 24, c); {
} *d = MUL_SYM(*d >> 24, c);
d++;
});
} }
@ -105,8 +109,8 @@ init_copy_rel_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_copy_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
s = 1 + (*d >> 24); s = 1 + (*d >> 24);
*d = MUL_256(s, c); *d = MUL_256(s, c);
} }

View File

@ -4,23 +4,25 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_copy_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int color;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ color = *m;
case 0: switch(color)
break; {
case 255: case 0:
*d = c; break;
break; case 255:
default: *d = c;
l++; break;
*d = INTERP_256(l, c, *d); default:
break; color++;
} *d = INTERP_256(color, c, *d);
m++; d++; break;
} }
m++; d++;
});
} }
#define _op_copy_mas_cn_dp _op_copy_mas_c_dp #define _op_copy_mas_cn_dp _op_copy_mas_c_dp
@ -50,7 +52,7 @@ init_copy_mask_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_pt_mas_c_dp(DATA32 s __UNUSED__, DATA8 m, DATA32 c, DATA32 *d) { _op_copy_pt_mas_c_dp(DATA32 s __UNUSED__, DATA8 m, DATA32 c, DATA32 *d) {
*d = INTERP_256(m + 1, c, *d); *d = INTERP_256(m + 1, c, *d);
} }
@ -85,28 +87,30 @@ init_copy_mask_color_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_copy_rel_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int color;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ color = *m;
case 0: switch(color)
break; {
case 255: case 0:
l = 1 + (*d >> 24); break;
*d = MUL_256(l, c); case 255:
break; color = 1 + (*d >> 24);
default: *d = MUL_256(color, c);
{ break;
DATA32 da = 1 + (*d >> 24); default:
da = MUL_256(da, c); {
l++; DATA32 da = 1 + (*d >> 24);
*d = INTERP_256(l, da, *d); da = MUL_256(da, c);
} color++;
break; *d = INTERP_256(color, da, *d);
} }
m++; d++; break;
} }
m++; d++;
});
} }
@ -137,9 +141,9 @@ init_copy_rel_mask_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { _op_copy_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
s = 1 + (*d >> 24); s = 1 + (*d >> 24);
s = MUL_256(s, c); s = MUL_256(s, c);
*d = INTERP_256(m + 1, s, *d); *d = INTERP_256(m + 1, s, *d);
} }
#define _op_copy_rel_pt_mas_cn_dp _op_copy_rel_pt_mas_c_dp #define _op_copy_rel_pt_mas_cn_dp _op_copy_rel_pt_mas_c_dp

View File

@ -4,10 +4,7 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) { _op_copy_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
DATA32 *e = d + l; memcpy(d, s, l * sizeof(DATA32));
for (; d < e; d++, s++) {
*d = *s;
}
} }
#define _op_copy_pan_dp _op_copy_p_dp #define _op_copy_pan_dp _op_copy_p_dp
@ -33,7 +30,7 @@ init_copy_pixel_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) { _op_copy_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
*d = s; *d = s;
} }
#define _op_copy_pt_pan_dp _op_copy_pt_p_dp #define _op_copy_pt_pan_dp _op_copy_pt_p_dp
@ -63,10 +60,12 @@ init_copy_pixel_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) { _op_copy_rel_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
for (; d < e; d++, s++) { UNROLL8_PLD_WHILE(d, l, e,
*d = MUL_SYM(*d >> 24, *s); {
} *d = MUL_SYM(*d >> 24, *s);
d++; s++;
});
} }
@ -93,8 +92,8 @@ init_copy_rel_pixel_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_copy_rel_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
c = 1 + (*d >> 24); c = 1 + (*d >> 24);
*d = MUL_256(c, s); *d = MUL_256(c, s);
} }

View File

@ -4,23 +4,25 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_copy_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
*d = MUL4_SYM(c, *s); {
d++; *d = MUL4_SYM(c, *s);
s++; d++;
} s++;
});
} }
static void static void
_op_copy_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_copy_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
c = 1 + (c >> 24); c = 1 + (c >> 24);
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
*d = MUL_256(c, *s); {
d++; *d = MUL_256(c, *s);
s++; d++;
} s++;
});
} }
@ -70,12 +72,12 @@ init_copy_pixel_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_copy_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
*d = MUL4_SYM(c, s); *d = MUL4_SYM(c, s);
} }
static void static void
_op_copy_pt_p_caa_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_copy_pt_p_caa_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
*d = MUL_SYM(c >> 24, s); *d = MUL_SYM(c >> 24, s);
} }
@ -129,13 +131,14 @@ init_copy_pixel_color_pt_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { _op_copy_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { UNROLL8_PLD_WHILE(d, l, e,
DATA32 cs = MUL4_SYM(c, *s); {
*d = MUL_SYM(*d >> 24, cs); DATA32 cs = MUL4_SYM(c, *s);
d++; *d = MUL_SYM(*d >> 24, cs);
s++; d++;
} s++;
});
} }
#define _op_copy_rel_pas_c_dp _op_copy_rel_p_c_dp #define _op_copy_rel_pas_c_dp _op_copy_rel_p_c_dp
@ -185,8 +188,8 @@ init_copy_rel_pixel_color_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { _op_copy_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
s = MUL4_SYM(c, s); s = MUL4_SYM(c, s);
*d = MUL_SYM(*d >> 24, s); *d = MUL_SYM(*d >> 24, s);
} }
#define _op_copy_rel_pt_pas_c_dp _op_copy_rel_pt_p_c_dp #define _op_copy_rel_pt_pas_c_dp _op_copy_rel_pt_p_c_dp

View File

@ -4,23 +4,25 @@
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) { _op_copy_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int color;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ color = *m;
case 0: switch(color)
break; {
case 255: case 0:
*d = *s; break;
break; case 255:
default: *d = *s;
l++; break;
*d = INTERP_256(l, *s, *d); default:
break; color++;
} *d = INTERP_256(color, *s, *d);
m++; s++; d++; break;
} }
m++; s++; d++;
});
} }
@ -47,7 +49,7 @@ init_copy_pixel_mask_span_funcs_c(void)
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) { _op_copy_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) {
*d = INTERP_256(m + 1, s, *d); *d = INTERP_256(m + 1, s, *d);
} }
#define _op_copy_pt_pan_mas_dp _op_copy_pt_p_mas_dp #define _op_copy_pt_pan_mas_dp _op_copy_pt_p_mas_dp
@ -75,26 +77,28 @@ init_copy_pixel_mask_pt_funcs_c(void)
/* copy_rel pixel x mask --> dst */ /* copy_rel pixel x mask --> dst */
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { _op_copy_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
DATA32 *e = d + l; DATA32 *e;
while (d < e) { int color;
l = *m; UNROLL8_PLD_WHILE(d, l, e,
switch(l) {
{ color = *m;
case 0: switch(color)
break; {
case 255: case 0:
*d = MUL_SYM(*d >> 24, *s); break;
break; case 255:
default: *d = MUL_SYM(*d >> 24, *s);
c = MUL_SYM(*d >> 24, *s); break;
l++; default:
*d = INTERP_256(l, c, *d); c = MUL_SYM(*d >> 24, *s);
break; l++;
} *d = INTERP_256(l, c, *d);
m++; s++; d++; break;
} }
m++; s++; d++;
});
} }
@ -119,10 +123,10 @@ init_copy_rel_pixel_mask_span_funcs_c(void)
#endif #endif
#ifdef BUILD_C #ifdef BUILD_C
static void static void
_op_copy_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { _op_copy_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
c = MUL_SYM(*d >> 24, s); c = MUL_SYM(*d >> 24, s);
*d = INTERP_256(m + 1, c, *d); *d = INTERP_256(m + 1, c, *d);
} }

View File

@ -127,6 +127,95 @@ void *alloca (size_t);
/*****************************************************************************/ /*****************************************************************************/
#if defined(__ARM_ARCH_3M__)
# define __ARM_ARCH__ 40
#endif
#if defined(__ARM_ARCH_4__)
# define __ARM_ARCH__ 40
#endif
#if defined(__ARM_ARCH_4T__)
# define __ARM_ARCH__ 41
#endif
#if defined(__ARM_ARCH_5__)
# define __ARM_ARCH__ 50
#endif
#if defined(__ARM_ARCH_5T__)
# define __ARM_ARCH__ 51
#endif
#if defined(__ARM_ARCH_5E__)
# define __ARM_ARCH__ 52
#endif
#if defined(__ARM_ARCH_5TE__)
# define __ARM_ARCH__ 53
#endif
#if defined(__ARM_ARCH_5TEJ__)
# define __ARM_ARCH__ 54
#endif
#if defined(__ARM_ARCH_6__)
# define __ARM_ARCH__ 60
#endif
#if defined(__ARM_ARCH_6J__)
# define __ARM_ARCH__ 61
#endif
#if defined(__ARM_ARCH_6K__)
# define __ARM_ARCH__ 62
#endif
#if defined(__ARM_ARCH_6Z__)
# define __ARM_ARCH__ 63
#endif
#if defined(__ARM_ARCH_6ZK__)
# define __ARM_ARCH__ 64
#endif
#if defined(__ARM_ARCH_6T2__)
# define __ARM_ARCH__ 65
#endif
#if defined(__ARM_ARCH_7__)
# define __ARM_ARCH__ 70
#endif
#if defined(__ARM_ARCH_7A__)
# define __ARM_ARCH__ 71
#endif
#if defined(__ARM_ARCH_7R__)
# define __ARM_ARCH__ 72
#endif
#if defined(__ARM_ARCH_7M__)
# define __ARM_ARCH__ 73
#endif
#if defined(__ARM_ARCH__) && (__ARM_ARCH__ >= 52)
/* tested on ARMv6 (arm1136j-s), Nokia N800 CPU */
#define pld(addr, off) \
__asm__("pld [%[address], %[offset]]":: \
[address] "r" (addr), [offset] "i" (off))
#else
#define pld(addr, off)
#endif /* __ARMEL__ */
/*****************************************************************************/
#define UNROLL2(op...) op op
#define UNROLL4(op...) UNROLL2(op) UNROLL2(op)
#define UNROLL8(op...) UNROLL4(op) UNROLL4(op)
#define UNROLL16(op...) UNROLL8(op) UNROLL8(op)
#define UNROLL8_PLD_WHILE(start, size, end, op) \
pld(start, 0); \
end = start + (size & ~7); \
while (start < end) \
{ \
pld(start, 32); \
UNROLL8(op); \
} \
end += (size & 7); \
pld(start, 32); \
while (start < end) \
{ \
op; \
}
/*****************************************************************************/ /*****************************************************************************/
typedef unsigned long long DATA64; typedef unsigned long long DATA64;
@ -277,46 +366,46 @@ struct _Evas_Cache_Target
struct _Image_Entry struct _Image_Entry
{ {
EINA_INLIST; EINA_INLIST;
Evas_Cache_Image *cache;
const char *cache_key;
const char *file;
const char *key;
Evas_Cache_Target *targets;
time_t timestamp;
time_t laststat;
int references;
unsigned char scale;
RGBA_Image_Loadopts load_opts;
int space;
int w;
int h;
struct
{
int w;
int h;
} allocated;
struct
{
void *module;
void *loader;
} info;
Evas_Cache_Image *cache;
const char *cache_key;
const char *file;
const char *key;
Evas_Cache_Target *targets;
time_t timestamp;
time_t laststat;
int references;
unsigned char scale;
RGBA_Image_Loadopts load_opts;
int space;
int w;
int h;
struct
{
int w;
int h;
} allocated;
struct
{
void *module;
void *loader;
} info;
#ifdef BUILD_ASYNC_PRELOAD #ifdef BUILD_ASYNC_PRELOAD
pthread_mutex_t lock; LK(lock);
#endif #endif
Image_Entry_Flags flags; Image_Entry_Flags flags;
}; };
struct _Engine_Image_Entry struct _Engine_Image_Entry
@ -642,9 +731,8 @@ struct _RGBA_Font_Int
Eina_Hash *glyphs; Eina_Hash *glyphs;
#ifdef HAVE_PTHREAD LK(ft_mutex);
pthread_mutex_t ft_mutex;
#endif
Eina_Hash *kerning; Eina_Hash *kerning;
Eina_Hash *indexes; Eina_Hash *indexes;

View File

@ -32,78 +32,6 @@ extern "C" {
((((g) >> 2) & 0x3f) << 5) | \ ((((g) >> 2) & 0x3f) << 5) | \
(((b) >> 3) & 0x1f)) (((b) >> 3) & 0x1f))
#define UNROLL2(op...) op op
#define UNROLL4(op...) UNROLL2(op) UNROLL2(op)
#define UNROLL8(op...) UNROLL4(op) UNROLL4(op)
#define UNROLL16(op...) UNROLL8(op) UNROLL8(op)
#if defined(__ARM_ARCH_3M__)
# define __ARM_ARCH__ 40
#endif
#if defined(__ARM_ARCH_4__)
# define __ARM_ARCH__ 40
#endif
#if defined(__ARM_ARCH_4T__)
# define __ARM_ARCH__ 41
#endif
#if defined(__ARM_ARCH_5__)
# define __ARM_ARCH__ 50
#endif
#if defined(__ARM_ARCH_5T__)
# define __ARM_ARCH__ 51
#endif
#if defined(__ARM_ARCH_5E__)
# define __ARM_ARCH__ 52
#endif
#if defined(__ARM_ARCH_5TE__)
# define __ARM_ARCH__ 53
#endif
#if defined(__ARM_ARCH_5TEJ__)
# define __ARM_ARCH__ 54
#endif
#if defined(__ARM_ARCH_6__)
# define __ARM_ARCH__ 60
#endif
#if defined(__ARM_ARCH_6J__)
# define __ARM_ARCH__ 61
#endif
#if defined(__ARM_ARCH_6K__)
# define __ARM_ARCH__ 62
#endif
#if defined(__ARM_ARCH_6Z__)
# define __ARM_ARCH__ 63
#endif
#if defined(__ARM_ARCH_6ZK__)
# define __ARM_ARCH__ 64
#endif
#if defined(__ARM_ARCH_6T2__)
# define __ARM_ARCH__ 65
#endif
#if defined(__ARM_ARCH_7__)
# define __ARM_ARCH__ 70
#endif
#if defined(__ARM_ARCH_7A__)
# define __ARM_ARCH__ 71
#endif
#if defined(__ARM_ARCH_7R__)
# define __ARM_ARCH__ 72
#endif
#if defined(__ARM_ARCH_7M__)
# define __ARM_ARCH__ 73
#endif
#if defined(__ARM_ARCH__) && (__ARM_ARCH__ >= 52)
/* tested on ARMv6 (arm1136j-s), Nokia N800 CPU */
#define pld(addr, off) \
__asm__("pld [%[address], %[offset]]":: \
[address] "r" (addr), [offset] "i" (off))
#else
#define pld(addr, off)
#endif /* __ARMEL__ */
static inline int static inline int
_calc_stride(int w) _calc_stride(int w)
{ {