Skip to content

Commit

Permalink
[primitives,neon] add android replacement functions
Browse files Browse the repository at this point in the history
armeabiv7a does not support vuzp1q_u8 and vuzp2q_u8, add some
replacement functions to allow compilation.
  • Loading branch information
akallabeth committed Jan 8, 2025
1 parent f7d612b commit d17cb22
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions libfreerdp/primitives/neon/prim_YUV_neon.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,56 @@
#if defined(NEON_INTRINSICS_ENABLED)
#include <arm_neon.h>

#ifndef vuzp1q_u8
/* Read even numbered bytes and interleave */
static inline uint8x16_t vuzp1q_u8(uint8x16_t a, uint8x16_t b)
{
uint8x16_t rc = a;
rc = vsetq_lane_u8(vgetq_lane_u8(a, 0), rc, 0);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 0), rc, 1);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 2), rc, 2);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 2), rc, 3);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 4), rc, 4);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 4), rc, 5);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 6), rc, 6);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 6), rc, 7);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 8), rc, 8);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 8), rc, 9);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 10), rc, 10);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 10), rc, 11);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 12), rc, 12);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 12), rc, 13);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 14), rc, 14);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 14), rc, 15);
return rc;
}
#endif

#ifndef vuzp2q_u8
/* Read odd numbered bytes and interleave */
static inline uint8x16_t vuzp2q_u8(uint8x16_t a, uint8x16_t b)
{
uint8x16_t rc = a;
rc = vsetq_lane_u8(vgetq_lane_u8(a, 1), rc, 0);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 1), rc, 1);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 3), rc, 2);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 3), rc, 3);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 5), rc, 4);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 5), rc, 5);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 7), rc, 6);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 7), rc, 7);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 9), rc, 8);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 9), rc, 9);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 11), rc, 10);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 11), rc, 11);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 13), rc, 12);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 13), rc, 13);
rc = vsetq_lane_u8(vgetq_lane_u8(a, 15), rc, 14);
rc = vsetq_lane_u8(vgetq_lane_u8(b, 15), rc, 15);
return rc;
}
#endif

static primitives_t* generic = NULL;

static INLINE uint8x8_t neon_YUV2R_single(uint16x8_t C, int16x8_t D, int16x8_t E)
Expand Down

0 comments on commit d17cb22

Please sign in to comment.