/* Expands a palettized row into RGB format. */ int png_do_expand_palette_neon_rgb(png_structrp png_ptr, png_row_infop row_info, png_const_bytep row, png_bytepp ssp, png_bytepp ddp) { png_uint_32 row_width = row_info->width; png_const_bytep palette = (png_const_bytep)png_ptr->palette; const png_uint_32 pixels_per_chunk = 8; int i; if (row_width <= pixels_per_chunk) return 0; /* Seeking this back by 8 pixels x 3 bytes. */ *ddp = *ddp - ((pixels_per_chunk * sizeof(png_color)) - 1); for (i = 0; i < row_width; i += pixels_per_chunk) { uint8x8x3_t cur; png_bytep sp = *ssp - i, dp = *ddp - ((i << 1) + i); cur = vld3_dup_u8(palette + sizeof(png_color) * (*(sp - 7))); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 6)), cur, 1); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 5)), cur, 2); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 4)), cur, 3); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 3)), cur, 4); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 2)), cur, 5); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 1)), cur, 6); cur = vld3_lane_u8(palette + sizeof(png_color) * (*(sp - 0)), cur, 7); vst3_u8((void *)dp, cur); } if (i != row_width) { /* Remove the amount that wasn't processed. */ i -= pixels_per_chunk; } /* Decrement output pointers. */ *ssp = *ssp - i; *ddp = *ddp - ((i << 1) + i); return i; }
void test_vld3_dupu8 (void) { uint8x8x3_t out_uint8x8x3_t; out_uint8x8x3_t = vld3_dup_u8 (0); }