On Thu, 2 Jul 2015 13:04:07 +0300 Oded Gabbay <[email protected]> wrote:
> This patch adds the following helper functions for reuse of code, > hiding BE/LE differences and maintainability. > > All of the functions were defined as static force_inline. > > Names were copied from pixman-sse2.c so conversion of fast-paths between > sse2 and vmx would be easier from now on. Therefore, I tried to keep the > input/output of the functions to be as close as possible to the sse2 > definitions. > > The functions are: > > - load_128_aligned : load 128-bit from a 16-byte aligned memory > address into a vector > > - load_128_unaligned : load 128-bit from memory into a vector, > without guarantee of alignment for the > source pointer > > - save_128_aligned : save 128-bit vector into a 16-byte aligned > memory address > > - create_mask_16_128 : take a 16-bit value and fill with it > a new vector > > - create_mask_1x32_128 : take a 32-bit pointer and fill a new > vector with the 32-bit value from that pointer > > - create_mask_32_128 : take a 32-bit value and fill with it > a new vector > > - unpack_32_1x128 : unpack 32-bit value into a vector > > - unpacklo_128_16x8 : unpack the eight low 8-bit values of a vector > > - unpackhi_128_16x8 : unpack the eight high 8-bit values of a vector > > - unpacklo_128_8x16 : unpack the four low 16-bit values of a vector > > - unpackhi_128_8x16 : unpack the four high 16-bit values of a vector > > - unpack_128_2x128 : unpack the eight low 8-bit values of a vector > into one vector and the eight high 8-bit > values into another vector > > - unpack_128_2x128_16 : unpack the four low 16-bit values of a vector > into one vector and the four high 16-bit > values into another vector > > - unpack_565_to_8888 : unpack an RGB_565 vector to 8888 vector > > - pack_1x128_32 : pack a vector and return the LSB 32-bit of it > > - pack_2x128_128 : pack two vectors into one and return it > > - negate_2x128 : xor two vectors with mask_00ff (separately) > > - is_opaque : returns whether all the pixels contained in > the vector are opaque > > - is_zero : returns whether the vector equals 0 > > - is_transparent : returns whether all the pixels > contained in the vector are transparent > > - expand_pixel_8_1x128 : expand an 8-bit pixel into lower 8 bytes of a > vector > > - expand_pixel_32_1x128 : expand a 32-bit pixel into lower 2 bytes of a > vector > > - expand_alpha_1x128 : expand alpha from vector and return the new > vector > > - expand_alpha_2x128 : expand alpha from one vector and another alpha > from a second vector > > - expand_alpha_rev_2x128 : expand a reversed alpha from one vector and > another reversed alpha from a second vector > > - pix_multiply_2x128 : do pix_multiply for two vectors (separately) > > - over_2x128 : perform over op. on two vectors > > - in_over_2x128 : perform in-over op. on two vectors > > Signed-off-by: Oded Gabbay <[email protected]> Acked-by: Siarhei Siamashka <[email protected]> Just one question about the code. There are some places where both big and little endian variants are identical but we still have an ifdef: > +static force_inline vector unsigned int > +expand_pixel_32_1x128 (uint32_t data) > +{ > + vector unsigned int vdata; > + > + vdata = unpack_32_1x128 (data); > + > +#ifdef WORDS_BIGENDIAN > + return vec_perm (vdata, vdata, > + (vector unsigned char)AVV ( > + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, > + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F)); > +#else > + return vec_perm (vdata, vdata, > + (vector unsigned char)AVV ( > + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, > + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F)); > +#endif Is this intentional? -- Best regards, Siarhei Siamashka _______________________________________________ Pixman mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pixman
