gfx/cairo/libpixman/src/pixman-arm-common.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /*
michael@0 2 * Copyright © 2010 Nokia Corporation
michael@0 3 *
michael@0 4 * Permission is hereby granted, free of charge, to any person obtaining a
michael@0 5 * copy of this software and associated documentation files (the "Software"),
michael@0 6 * to deal in the Software without restriction, including without limitation
michael@0 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
michael@0 8 * and/or sell copies of the Software, and to permit persons to whom the
michael@0 9 * Software is furnished to do so, subject to the following conditions:
michael@0 10 *
michael@0 11 * The above copyright notice and this permission notice (including the next
michael@0 12 * paragraph) shall be included in all copies or substantial portions of the
michael@0 13 * Software.
michael@0 14 *
michael@0 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
michael@0 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
michael@0 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
michael@0 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
michael@0 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
michael@0 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
michael@0 21 * DEALINGS IN THE SOFTWARE.
michael@0 22 *
michael@0 23 * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
michael@0 24 */
michael@0 25
michael@0 26 #ifndef PIXMAN_ARM_COMMON_H
michael@0 27 #define PIXMAN_ARM_COMMON_H
michael@0 28
michael@0 29 #include "pixman-inlines.h"
michael@0 30
michael@0 31 /* Define some macros which can expand into proxy functions between
michael@0 32 * ARM assembly optimized functions and the rest of pixman fast path API.
michael@0 33 *
michael@0 34 * All the low level ARM assembly functions have to use ARM EABI
michael@0 35 * calling convention and take up to 8 arguments:
michael@0 36 * width, height, dst, dst_stride, src, src_stride, mask, mask_stride
michael@0 37 *
michael@0 38 * The arguments are ordered with the most important coming first (the
michael@0 39 * first 4 arguments are passed to function in registers, the rest are
michael@0 40 * on stack). The last arguments are optional, for example if the
michael@0 41 * function is not using mask, then 'mask' and 'mask_stride' can be
michael@0 42 * omitted when doing a function call.
michael@0 43 *
michael@0 44 * Arguments 'src' and 'mask' contain either a pointer to the top left
michael@0 45 * pixel of the composited rectangle or a pixel color value depending
michael@0 46 * on the function type. In the case of just a color value (solid source
michael@0 47 * or mask), the corresponding stride argument is unused.
michael@0 48 */
michael@0 49
michael@0 50 #define SKIP_ZERO_SRC 1
michael@0 51 #define SKIP_ZERO_MASK 2
michael@0 52
michael@0 53 #define PIXMAN_ARM_BIND_FAST_PATH_SRC_DST(cputype, name, \
michael@0 54 src_type, src_cnt, \
michael@0 55 dst_type, dst_cnt) \
michael@0 56 void \
michael@0 57 pixman_composite_##name##_asm_##cputype (int32_t w, \
michael@0 58 int32_t h, \
michael@0 59 dst_type *dst, \
michael@0 60 int32_t dst_stride, \
michael@0 61 src_type *src, \
michael@0 62 int32_t src_stride); \
michael@0 63 \
michael@0 64 static void \
michael@0 65 cputype##_composite_##name (pixman_implementation_t *imp, \
michael@0 66 pixman_composite_info_t *info) \
michael@0 67 { \
michael@0 68 PIXMAN_COMPOSITE_ARGS (info); \
michael@0 69 dst_type *dst_line; \
michael@0 70 src_type *src_line; \
michael@0 71 int32_t dst_stride, src_stride; \
michael@0 72 \
michael@0 73 PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \
michael@0 74 src_stride, src_line, src_cnt); \
michael@0 75 PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, dst_type, \
michael@0 76 dst_stride, dst_line, dst_cnt); \
michael@0 77 \
michael@0 78 pixman_composite_##name##_asm_##cputype (width, height, \
michael@0 79 dst_line, dst_stride, \
michael@0 80 src_line, src_stride); \
michael@0 81 }
michael@0 82
michael@0 83 #define PIXMAN_ARM_BIND_FAST_PATH_N_DST(flags, cputype, name, \
michael@0 84 dst_type, dst_cnt) \
michael@0 85 void \
michael@0 86 pixman_composite_##name##_asm_##cputype (int32_t w, \
michael@0 87 int32_t h, \
michael@0 88 dst_type *dst, \
michael@0 89 int32_t dst_stride, \
michael@0 90 uint32_t src); \
michael@0 91 \
michael@0 92 static void \
michael@0 93 cputype##_composite_##name (pixman_implementation_t *imp, \
michael@0 94 pixman_composite_info_t *info) \
michael@0 95 { \
michael@0 96 PIXMAN_COMPOSITE_ARGS (info); \
michael@0 97 dst_type *dst_line; \
michael@0 98 int32_t dst_stride; \
michael@0 99 uint32_t src; \
michael@0 100 \
michael@0 101 src = _pixman_image_get_solid ( \
michael@0 102 imp, src_image, dest_image->bits.format); \
michael@0 103 \
michael@0 104 if ((flags & SKIP_ZERO_SRC) && src == 0) \
michael@0 105 return; \
michael@0 106 \
michael@0 107 PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, dst_type, \
michael@0 108 dst_stride, dst_line, dst_cnt); \
michael@0 109 \
michael@0 110 pixman_composite_##name##_asm_##cputype (width, height, \
michael@0 111 dst_line, dst_stride, \
michael@0 112 src); \
michael@0 113 }
michael@0 114
michael@0 115 #define PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST(flags, cputype, name, \
michael@0 116 mask_type, mask_cnt, \
michael@0 117 dst_type, dst_cnt) \
michael@0 118 void \
michael@0 119 pixman_composite_##name##_asm_##cputype (int32_t w, \
michael@0 120 int32_t h, \
michael@0 121 dst_type *dst, \
michael@0 122 int32_t dst_stride, \
michael@0 123 uint32_t src, \
michael@0 124 int32_t unused, \
michael@0 125 mask_type *mask, \
michael@0 126 int32_t mask_stride); \
michael@0 127 \
michael@0 128 static void \
michael@0 129 cputype##_composite_##name (pixman_implementation_t *imp, \
michael@0 130 pixman_composite_info_t *info) \
michael@0 131 { \
michael@0 132 PIXMAN_COMPOSITE_ARGS (info); \
michael@0 133 dst_type *dst_line; \
michael@0 134 mask_type *mask_line; \
michael@0 135 int32_t dst_stride, mask_stride; \
michael@0 136 uint32_t src; \
michael@0 137 \
michael@0 138 src = _pixman_image_get_solid ( \
michael@0 139 imp, src_image, dest_image->bits.format); \
michael@0 140 \
michael@0 141 if ((flags & SKIP_ZERO_SRC) && src == 0) \
michael@0 142 return; \
michael@0 143 \
michael@0 144 PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, dst_type, \
michael@0 145 dst_stride, dst_line, dst_cnt); \
michael@0 146 PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, mask_type, \
michael@0 147 mask_stride, mask_line, mask_cnt); \
michael@0 148 \
michael@0 149 pixman_composite_##name##_asm_##cputype (width, height, \
michael@0 150 dst_line, dst_stride, \
michael@0 151 src, 0, \
michael@0 152 mask_line, mask_stride); \
michael@0 153 }
michael@0 154
michael@0 155 #define PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST(flags, cputype, name, \
michael@0 156 src_type, src_cnt, \
michael@0 157 dst_type, dst_cnt) \
michael@0 158 void \
michael@0 159 pixman_composite_##name##_asm_##cputype (int32_t w, \
michael@0 160 int32_t h, \
michael@0 161 dst_type *dst, \
michael@0 162 int32_t dst_stride, \
michael@0 163 src_type *src, \
michael@0 164 int32_t src_stride, \
michael@0 165 uint32_t mask); \
michael@0 166 \
michael@0 167 static void \
michael@0 168 cputype##_composite_##name (pixman_implementation_t *imp, \
michael@0 169 pixman_composite_info_t *info) \
michael@0 170 { \
michael@0 171 PIXMAN_COMPOSITE_ARGS (info); \
michael@0 172 dst_type *dst_line; \
michael@0 173 src_type *src_line; \
michael@0 174 int32_t dst_stride, src_stride; \
michael@0 175 uint32_t mask; \
michael@0 176 \
michael@0 177 mask = _pixman_image_get_solid ( \
michael@0 178 imp, mask_image, dest_image->bits.format); \
michael@0 179 \
michael@0 180 if ((flags & SKIP_ZERO_MASK) && mask == 0) \
michael@0 181 return; \
michael@0 182 \
michael@0 183 PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, dst_type, \
michael@0 184 dst_stride, dst_line, dst_cnt); \
michael@0 185 PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \
michael@0 186 src_stride, src_line, src_cnt); \
michael@0 187 \
michael@0 188 pixman_composite_##name##_asm_##cputype (width, height, \
michael@0 189 dst_line, dst_stride, \
michael@0 190 src_line, src_stride, \
michael@0 191 mask); \
michael@0 192 }
michael@0 193
michael@0 194 #define PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST(cputype, name, \
michael@0 195 src_type, src_cnt, \
michael@0 196 mask_type, mask_cnt, \
michael@0 197 dst_type, dst_cnt) \
michael@0 198 void \
michael@0 199 pixman_composite_##name##_asm_##cputype (int32_t w, \
michael@0 200 int32_t h, \
michael@0 201 dst_type *dst, \
michael@0 202 int32_t dst_stride, \
michael@0 203 src_type *src, \
michael@0 204 int32_t src_stride, \
michael@0 205 mask_type *mask, \
michael@0 206 int32_t mask_stride); \
michael@0 207 \
michael@0 208 static void \
michael@0 209 cputype##_composite_##name (pixman_implementation_t *imp, \
michael@0 210 pixman_composite_info_t *info) \
michael@0 211 { \
michael@0 212 PIXMAN_COMPOSITE_ARGS (info); \
michael@0 213 dst_type *dst_line; \
michael@0 214 src_type *src_line; \
michael@0 215 mask_type *mask_line; \
michael@0 216 int32_t dst_stride, src_stride, mask_stride; \
michael@0 217 \
michael@0 218 PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, dst_type, \
michael@0 219 dst_stride, dst_line, dst_cnt); \
michael@0 220 PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, src_type, \
michael@0 221 src_stride, src_line, src_cnt); \
michael@0 222 PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, mask_type, \
michael@0 223 mask_stride, mask_line, mask_cnt); \
michael@0 224 \
michael@0 225 pixman_composite_##name##_asm_##cputype (width, height, \
michael@0 226 dst_line, dst_stride, \
michael@0 227 src_line, src_stride, \
michael@0 228 mask_line, mask_stride); \
michael@0 229 }
michael@0 230
michael@0 231 #define PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_DST(cputype, name, op, \
michael@0 232 src_type, dst_type) \
michael@0 233 void \
michael@0 234 pixman_scaled_nearest_scanline_##name##_##op##_asm_##cputype ( \
michael@0 235 int32_t w, \
michael@0 236 dst_type * dst, \
michael@0 237 const src_type * src, \
michael@0 238 pixman_fixed_t vx, \
michael@0 239 pixman_fixed_t unit_x, \
michael@0 240 pixman_fixed_t max_vx); \
michael@0 241 \
michael@0 242 static force_inline void \
michael@0 243 scaled_nearest_scanline_##cputype##_##name##_##op (dst_type * pd, \
michael@0 244 const src_type * ps, \
michael@0 245 int32_t w, \
michael@0 246 pixman_fixed_t vx, \
michael@0 247 pixman_fixed_t unit_x, \
michael@0 248 pixman_fixed_t max_vx, \
michael@0 249 pixman_bool_t zero_src) \
michael@0 250 { \
michael@0 251 pixman_scaled_nearest_scanline_##name##_##op##_asm_##cputype (w, pd, ps, \
michael@0 252 vx, unit_x, \
michael@0 253 max_vx); \
michael@0 254 } \
michael@0 255 \
michael@0 256 FAST_NEAREST_MAINLOOP (cputype##_##name##_cover_##op, \
michael@0 257 scaled_nearest_scanline_##cputype##_##name##_##op, \
michael@0 258 src_type, dst_type, COVER) \
michael@0 259 FAST_NEAREST_MAINLOOP (cputype##_##name##_none_##op, \
michael@0 260 scaled_nearest_scanline_##cputype##_##name##_##op, \
michael@0 261 src_type, dst_type, NONE) \
michael@0 262 FAST_NEAREST_MAINLOOP (cputype##_##name##_pad_##op, \
michael@0 263 scaled_nearest_scanline_##cputype##_##name##_##op, \
michael@0 264 src_type, dst_type, PAD) \
michael@0 265 FAST_NEAREST_MAINLOOP (cputype##_##name##_normal_##op, \
michael@0 266 scaled_nearest_scanline_##cputype##_##name##_##op, \
michael@0 267 src_type, dst_type, NORMAL)
michael@0 268
michael@0 269 /* Provide entries for the fast path table */
michael@0 270 #define PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH(op,s,d,func) \
michael@0 271 SIMPLE_NEAREST_FAST_PATH_COVER (op,s,d,func), \
michael@0 272 SIMPLE_NEAREST_FAST_PATH_NONE (op,s,d,func), \
michael@0 273 SIMPLE_NEAREST_FAST_PATH_PAD (op,s,d,func), \
michael@0 274 SIMPLE_NEAREST_FAST_PATH_NORMAL (op,s,d,func)
michael@0 275
michael@0 276 #define PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_A8_DST(flags, cputype, name, op, \
michael@0 277 src_type, dst_type) \
michael@0 278 void \
michael@0 279 pixman_scaled_nearest_scanline_##name##_##op##_asm_##cputype ( \
michael@0 280 int32_t w, \
michael@0 281 dst_type * dst, \
michael@0 282 const src_type * src, \
michael@0 283 pixman_fixed_t vx, \
michael@0 284 pixman_fixed_t unit_x, \
michael@0 285 pixman_fixed_t max_vx, \
michael@0 286 const uint8_t * mask); \
michael@0 287 \
michael@0 288 static force_inline void \
michael@0 289 scaled_nearest_scanline_##cputype##_##name##_##op (const uint8_t * mask, \
michael@0 290 dst_type * pd, \
michael@0 291 const src_type * ps, \
michael@0 292 int32_t w, \
michael@0 293 pixman_fixed_t vx, \
michael@0 294 pixman_fixed_t unit_x, \
michael@0 295 pixman_fixed_t max_vx, \
michael@0 296 pixman_bool_t zero_src) \
michael@0 297 { \
michael@0 298 if ((flags & SKIP_ZERO_SRC) && zero_src) \
michael@0 299 return; \
michael@0 300 pixman_scaled_nearest_scanline_##name##_##op##_asm_##cputype (w, pd, ps, \
michael@0 301 vx, unit_x, \
michael@0 302 max_vx, \
michael@0 303 mask); \
michael@0 304 } \
michael@0 305 \
michael@0 306 FAST_NEAREST_MAINLOOP_COMMON (cputype##_##name##_cover_##op, \
michael@0 307 scaled_nearest_scanline_##cputype##_##name##_##op,\
michael@0 308 src_type, uint8_t, dst_type, COVER, TRUE, FALSE)\
michael@0 309 FAST_NEAREST_MAINLOOP_COMMON (cputype##_##name##_none_##op, \
michael@0 310 scaled_nearest_scanline_##cputype##_##name##_##op,\
michael@0 311 src_type, uint8_t, dst_type, NONE, TRUE, FALSE) \
michael@0 312 FAST_NEAREST_MAINLOOP_COMMON (cputype##_##name##_pad_##op, \
michael@0 313 scaled_nearest_scanline_##cputype##_##name##_##op,\
michael@0 314 src_type, uint8_t, dst_type, PAD, TRUE, FALSE) \
michael@0 315 FAST_NEAREST_MAINLOOP_COMMON (cputype##_##name##_normal_##op, \
michael@0 316 scaled_nearest_scanline_##cputype##_##name##_##op,\
michael@0 317 src_type, uint8_t, dst_type, NORMAL, TRUE, FALSE)
michael@0 318
michael@0 319 /* Provide entries for the fast path table */
michael@0 320 #define PIXMAN_ARM_SIMPLE_NEAREST_A8_MASK_FAST_PATH(op,s,d,func) \
michael@0 321 SIMPLE_NEAREST_A8_MASK_FAST_PATH_COVER (op,s,d,func), \
michael@0 322 SIMPLE_NEAREST_A8_MASK_FAST_PATH_NONE (op,s,d,func), \
michael@0 323 SIMPLE_NEAREST_A8_MASK_FAST_PATH_PAD (op,s,d,func), \
michael@0 324 SIMPLE_NEAREST_A8_MASK_FAST_PATH_NORMAL (op,s,d,func)
michael@0 325
michael@0 326 /*****************************************************************************/
michael@0 327
michael@0 328 #define PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST(flags, cputype, name, op, \
michael@0 329 src_type, dst_type) \
michael@0 330 void \
michael@0 331 pixman_scaled_bilinear_scanline_##name##_##op##_asm_##cputype ( \
michael@0 332 dst_type * dst, \
michael@0 333 const src_type * top, \
michael@0 334 const src_type * bottom, \
michael@0 335 int wt, \
michael@0 336 int wb, \
michael@0 337 pixman_fixed_t x, \
michael@0 338 pixman_fixed_t ux, \
michael@0 339 int width); \
michael@0 340 \
michael@0 341 static force_inline void \
michael@0 342 scaled_bilinear_scanline_##cputype##_##name##_##op ( \
michael@0 343 dst_type * dst, \
michael@0 344 const uint32_t * mask, \
michael@0 345 const src_type * src_top, \
michael@0 346 const src_type * src_bottom, \
michael@0 347 int32_t w, \
michael@0 348 int wt, \
michael@0 349 int wb, \
michael@0 350 pixman_fixed_t vx, \
michael@0 351 pixman_fixed_t unit_x, \
michael@0 352 pixman_fixed_t max_vx, \
michael@0 353 pixman_bool_t zero_src) \
michael@0 354 { \
michael@0 355 if ((flags & SKIP_ZERO_SRC) && zero_src) \
michael@0 356 return; \
michael@0 357 pixman_scaled_bilinear_scanline_##name##_##op##_asm_##cputype ( \
michael@0 358 dst, src_top, src_bottom, wt, wb, vx, unit_x, w); \
michael@0 359 } \
michael@0 360 \
michael@0 361 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_cover_##op, \
michael@0 362 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 363 NULL, src_type, uint32_t, dst_type, COVER, FLAG_NONE) \
michael@0 364 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_none_##op, \
michael@0 365 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 366 NULL, src_type, uint32_t, dst_type, NONE, FLAG_NONE) \
michael@0 367 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_pad_##op, \
michael@0 368 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 369 NULL, src_type, uint32_t, dst_type, PAD, FLAG_NONE) \
michael@0 370 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_normal_##op, \
michael@0 371 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 372 NULL, src_type, uint32_t, dst_type, NORMAL, \
michael@0 373 FLAG_NONE)
michael@0 374
michael@0 375
michael@0 376 #define PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST(flags, cputype, name, op, \
michael@0 377 src_type, dst_type) \
michael@0 378 void \
michael@0 379 pixman_scaled_bilinear_scanline_##name##_##op##_asm_##cputype ( \
michael@0 380 dst_type * dst, \
michael@0 381 const uint8_t * mask, \
michael@0 382 const src_type * top, \
michael@0 383 const src_type * bottom, \
michael@0 384 int wt, \
michael@0 385 int wb, \
michael@0 386 pixman_fixed_t x, \
michael@0 387 pixman_fixed_t ux, \
michael@0 388 int width); \
michael@0 389 \
michael@0 390 static force_inline void \
michael@0 391 scaled_bilinear_scanline_##cputype##_##name##_##op ( \
michael@0 392 dst_type * dst, \
michael@0 393 const uint8_t * mask, \
michael@0 394 const src_type * src_top, \
michael@0 395 const src_type * src_bottom, \
michael@0 396 int32_t w, \
michael@0 397 int wt, \
michael@0 398 int wb, \
michael@0 399 pixman_fixed_t vx, \
michael@0 400 pixman_fixed_t unit_x, \
michael@0 401 pixman_fixed_t max_vx, \
michael@0 402 pixman_bool_t zero_src) \
michael@0 403 { \
michael@0 404 if ((flags & SKIP_ZERO_SRC) && zero_src) \
michael@0 405 return; \
michael@0 406 pixman_scaled_bilinear_scanline_##name##_##op##_asm_##cputype ( \
michael@0 407 dst, mask, src_top, src_bottom, wt, wb, vx, unit_x, w); \
michael@0 408 } \
michael@0 409 \
michael@0 410 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_cover_##op, \
michael@0 411 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 412 NULL, src_type, uint8_t, dst_type, COVER, \
michael@0 413 FLAG_HAVE_NON_SOLID_MASK) \
michael@0 414 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_none_##op, \
michael@0 415 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 416 NULL, src_type, uint8_t, dst_type, NONE, \
michael@0 417 FLAG_HAVE_NON_SOLID_MASK) \
michael@0 418 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_pad_##op, \
michael@0 419 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 420 NULL, src_type, uint8_t, dst_type, PAD, \
michael@0 421 FLAG_HAVE_NON_SOLID_MASK) \
michael@0 422 FAST_BILINEAR_MAINLOOP_COMMON (cputype##_##name##_normal_##op, \
michael@0 423 scaled_bilinear_scanline_##cputype##_##name##_##op, \
michael@0 424 NULL, src_type, uint8_t, dst_type, NORMAL, \
michael@0 425 FLAG_HAVE_NON_SOLID_MASK)
michael@0 426
michael@0 427
michael@0 428 #endif

mercurial