You copied the Doc URL to your clipboard.

NEON intrinsics for logical operations

These intrinsics provide bitwise logical operations.

Bitwise NOT

int8x8_t   vmvn_s8(int8x8_t a);      // VMVN d0,d0
int16x4_t  vmvn_s16(int16x4_t a);    // VMVN d0,d0
int32x2_t  vmvn_s32(int32x2_t a);    // VMVN d0,d0
uint8x8_t  vmvn_u8(uint8x8_t a);     // VMVN d0,d0
uint16x4_t vmvn_u16(uint16x4_t a);   // VMVN d0,d0
uint32x2_t vmvn_u32(uint32x2_t a);   // VMVN d0,d0
poly8x8_t  vmvn_p8(poly8x8_t a);     // VMVN d0,d0
int8x16_t  vmvnq_s8(int8x16_t a);    // VMVN q0,q0
int16x8_t  vmvnq_s16(int16x8_t a);   // VMVN q0,q0
int32x4_t  vmvnq_s32(int32x4_t a);   // VMVN q0,q0
uint8x16_t vmvnq_u8(uint8x16_t a);   // VMVN q0,q0
uint16x8_t vmvnq_u16(uint16x8_t a);  // VMVN q0,q0
uint32x4_t vmvnq_u32(uint32x4_t a);  // VMVN q0,q0
poly8x16_t vmvnq_p8(poly8x16_t a);   // VMVN q0,q0

Bitwise AND

int8x8_t   vand_s8(int8x8_t a, int8x8_t b);        // VAND d0,d0,d0
int16x4_t  vand_s16(int16x4_t a, int16x4_t b);     // VAND d0,d0,d0
int32x2_t  vand_s32(int32x2_t a, int32x2_t b);     // VAND d0,d0,d0
int64x1_t  vand_s64(int64x1_t a, int64x1_t b);     // VAND d0,d0,d0
uint8x8_t  vand_u8(uint8x8_t a, uint8x8_t b);      // VAND d0,d0,d0
uint16x4_t vand_u16(uint16x4_t a, uint16x4_t b);   // VAND d0,d0,d0
uint32x2_t vand_u32(uint32x2_t a, uint32x2_t b);   // VAND d0,d0,d0
uint64x1_t vand_u64(uint64x1_t a, uint64x1_t b);   // VAND d0,d0,d0
int8x16_t  vandq_s8(int8x16_t a, int8x16_t b);     // VAND q0,q0,q0
int16x8_t  vandq_s16(int16x8_t a, int16x8_t b);    // VAND q0,q0,q0
int32x4_t  vandq_s32(int32x4_t a, int32x4_t b);    // VAND q0,q0,q0
int64x2_t  vandq_s64(int64x2_t a, int64x2_t b);    // VAND q0,q0,q0
uint8x16_t vandq_u8(uint8x16_t a, uint8x16_t b);   // VAND q0,q0,q0
uint16x8_t vandq_u16(uint16x8_t a, uint16x8_t b);  // VAND q0,q0,q0
uint32x4_t vandq_u32(uint32x4_t a, uint32x4_t b);  // VAND q0,q0,q0
uint64x2_t vandq_u64(uint64x2_t a, uint64x2_t b);  // VAND q0,q0,q0

Bitwise OR

int8x8_t   vorr_s8(int8x8_t a, int8x8_t b);        // VORR d0,d0,d0
int16x4_t  vorr_s16(int16x4_t a, int16x4_t b);     // VORR d0,d0,d0
int32x2_t  vorr_s32(int32x2_t a, int32x2_t b);     // VORR d0,d0,d0
int64x1_t  vorr_s64(int64x1_t a, int64x1_t b);     // VORR d0,d0,d0
uint8x8_t  vorr_u8(uint8x8_t a, uint8x8_t b);      // VORR d0,d0,d0
uint16x4_t vorr_u16(uint16x4_t a, uint16x4_t b);   // VORR d0,d0,d0
uint32x2_t vorr_u32(uint32x2_t a, uint32x2_t b);   // VORR d0,d0,d0
uint64x1_t vorr_u64(uint64x1_t a, uint64x1_t b);   // VORR d0,d0,d0
int8x16_t  vorrq_s8(int8x16_t a, int8x16_t b);     // VORR q0,q0,q0
int16x8_t  vorrq_s16(int16x8_t a, int16x8_t b);    // VORR q0,q0,q0
int32x4_t  vorrq_s32(int32x4_t a, int32x4_t b);    // VORR q0,q0,q0
int64x2_t  vorrq_s64(int64x2_t a, int64x2_t b);    // VORR q0,q0,q0
uint8x16_t vorrq_u8(uint8x16_t a, uint8x16_t b);   // VORR q0,q0,q0
uint16x8_t vorrq_u16(uint16x8_t a, uint16x8_t b);  // VORR q0,q0,q0
uint32x4_t vorrq_u32(uint32x4_t a, uint32x4_t b);  // VORR q0,q0,q0
uint64x2_t vorrq_u64(uint64x2_t a, uint64x2_t b);  // VORR q0,q0,q0

Bitwise exclusive or (EOR or XOR)

int8x8_t   veor_s8(int8x8_t a, int8x8_t b);        // VEOR d0,d0,d0
int16x4_t  veor_s16(int16x4_t a, int16x4_t b);     // VEOR d0,d0,d0
int32x2_t  veor_s32(int32x2_t a, int32x2_t b);     // VEOR d0,d0,d0
int64x1_t  veor_s64(int64x1_t a, int64x1_t b);     // VEOR d0,d0,d0
uint8x8_t  veor_u8(uint8x8_t a, uint8x8_t b);      // VEOR d0,d0,d0
uint16x4_t veor_u16(uint16x4_t a, uint16x4_t b);   // VEOR d0,d0,d0
uint32x2_t veor_u32(uint32x2_t a, uint32x2_t b);   // VEOR d0,d0,d0
uint64x1_t veor_u64(uint64x1_t a, uint64x1_t b);   // VEOR d0,d0,d0
int8x16_t  veorq_s8(int8x16_t a, int8x16_t b);     // VEOR q0,q0,q0
int16x8_t  veorq_s16(int16x8_t a, int16x8_t b);    // VEOR q0,q0,q0
int32x4_t  veorq_s32(int32x4_t a, int32x4_t b);    // VEOR q0,q0,q0
int64x2_t  veorq_s64(int64x2_t a, int64x2_t b);    // VEOR q0,q0,q0
uint8x16_t veorq_u8(uint8x16_t a, uint8x16_t b);   // VEOR q0,q0,q0
uint16x8_t veorq_u16(uint16x8_t a, uint16x8_t b);  // VEOR q0,q0,q0
uint32x4_t veorq_u32(uint32x4_t a, uint32x4_t b);  // VEOR q0,q0,q0
uint64x2_t veorq_u64(uint64x2_t a, uint64x2_t b);  // VEOR q0,q0,q0

Bit Clear

int8x8_t   vbic_s8(int8x8_t a, int8x8_t b);        // VBIC d0,d0,d0
int16x4_t  vbic_s16(int16x4_t a, int16x4_t b);     // VBIC d0,d0,d0
int32x2_t  vbic_s32(int32x2_t a, int32x2_t b);     // VBIC d0,d0,d0
int64x1_t  vbic_s64(int64x1_t a, int64x1_t b);     // VBIC d0,d0,d0
uint8x8_t  vbic_u8(uint8x8_t a, uint8x8_t b);      // VBIC d0,d0,d0
uint16x4_t vbic_u16(uint16x4_t a, uint16x4_t b);   // VBIC d0,d0,d0
uint32x2_t vbic_u32(uint32x2_t a, uint32x2_t b);   // VBIC d0,d0,d0
uint64x1_t vbic_u64(uint64x1_t a, uint64x1_t b);   // VBIC d0,d0,d0
int8x16_t  vbicq_s8(int8x16_t a, int8x16_t b);     // VBIC q0,q0,q0
int16x8_t  vbicq_s16(int16x8_t a, int16x8_t b);    // VBIC q0,q0,q0
int32x4_t  vbicq_s32(int32x4_t a, int32x4_t b);    // VBIC q0,q0,q0
int64x2_t  vbicq_s64(int64x2_t a, int64x2_t b);    // VBIC q0,q0,q0
uint8x16_t vbicq_u8(uint8x16_t a, uint8x16_t b);   // VBIC q0,q0,q0
uint16x8_t vbicq_u16(uint16x8_t a, uint16x8_t b);  // VBIC q0,q0,q0
uint32x4_t vbicq_u32(uint32x4_t a, uint32x4_t b);  // VBIC q0,q0,q0
uint64x2_t vbicq_u64(uint64x2_t a, uint64x2_t b);  // VBIC q0,q0,q0

Bitwise OR complement

int8x8_t   vorn_s8(int8x8_t a, int8x8_t b);        // VORN d0,d0,d0
int16x4_t  vorn_s16(int16x4_t a, int16x4_t b);     // VORN d0,d0,d0
int32x2_t  vorn_s32(int32x2_t a, int32x2_t b);     // VORN d0,d0,d0
int64x1_t  vorn_s64(int64x1_t a, int64x1_t b);     // VORN d0,d0,d0
uint8x8_t  vorn_u8(uint8x8_t a, uint8x8_t b);      // VORN d0,d0,d0
uint16x4_t vorn_u16(uint16x4_t a, uint16x4_t b);   // VORN d0,d0,d0
uint32x2_t vorn_u32(uint32x2_t a, uint32x2_t b);   // VORN d0,d0,d0
uint64x1_t vorn_u64(uint64x1_t a, uint64x1_t b);   // VORN d0,d0,d0
int8x16_t  vornq_s8(int8x16_t a, int8x16_t b);     // VORN q0,q0,q0
int16x8_t  vornq_s16(int16x8_t a, int16x8_t b);    // VORN q0,q0,q0
int32x4_t  vornq_s32(int32x4_t a, int32x4_t b);    // VORN q0,q0,q0
int64x2_t  vornq_s64(int64x2_t a, int64x2_t b);    // VORN q0,q0,q0
uint8x16_t vornq_u8(uint8x16_t a, uint8x16_t b);   // VORN q0,q0,q0
uint16x8_t vornq_u16(uint16x8_t a, uint16x8_t b);  // VORN q0,q0,q0
uint32x4_t vornq_u32(uint32x4_t a, uint32x4_t b);  // VORN q0,q0,q0
uint64x2_t vornq_u64(uint64x2_t a, uint64x2_t b);  // VORN q0,q0,q0

Bitwise Select


This intrinsic can compile to any of VBSL/VBIF/VBIT depending on register allocation.

int8x8_t    vbsl_s8(uint8x8_t a, int8x8_t b, int8x8_t c);          // VBSL d0,d0,d0
int16x4_t   vbsl_s16(uint16x4_t a, int16x4_t b, int16x4_t c);      // VBSL d0,d0,d0
int32x2_t   vbsl_s32(uint32x2_t a, int32x2_t b, int32x2_t c);      // VBSL d0,d0,d0
int64x1_t   vbsl_s64(uint64x1_t a, int64x1_t b, int64x1_t c);      // VBSL d0,d0,d0
uint8x8_t   vbsl_u8(uint8x8_t a, uint8x8_t b, uint8x8_t c);        // VBSL d0,d0,d0
uint16x4_t  vbsl_u16(uint16x4_t a, uint16x4_t b, uint16x4_t c);    // VBSL d0,d0,d0
uint32x2_t  vbsl_u32(uint32x2_t a, uint32x2_t b, uint32x2_t c);    // VBSL d0,d0,d0
uint64x1_t  vbsl_u64(uint64x1_t a, uint64x1_t b, uint64x1_t c);    // VBSL d0,d0,d0
float32x2_t vbsl_f32(uint32x2_t a, float32x2_t b, float32x2_t c);  // VBSL d0,d0,d0
poly8x8_t   vbsl_p8(uint8x8_t a, poly8x8_t b, poly8x8_t c);        // VBSL d0,d0,d0
poly16x4_t  vbsl_p16(uint16x4_t a, poly16x4_t b, poly16x4_t c);    // VBSL d0,d0,d0
int8x16_t   vbslq_s8(uint8x16_t a, int8x16_t b, int8x16_t c);      // VBSL q0,q0,q0
int16x8_t   vbslq_s16(uint16x8_t a, int16x8_t b, int16x8_t c);     // VBSL q0,q0,q0
int32x4_t   vbslq_s32(uint32x4_t a, int32x4_t b, int32x4_t c);     // VBSL q0,q0,q0
int64x2_t   vbslq_s64(uint64x2_t a, int64x2_t b, int64x2_t c);     // VBSL q0,q0,q0
uint8x16_t  vbslq_u8(uint8x16_t a, uint8x16_t b, uint8x16_t c);    // VBSL q0,q0,q0
uint16x8_t  vbslq_u16(uint16x8_t a, uint16x8_t b, uint16x8_t c);   // VBSL q0,q0,q0
uint32x4_t  vbslq_u32(uint32x4_t a, uint32x4_t b, uint32x4_t c);   // VBSL q0,q0,q0
uint64x2_t  vbslq_u64(uint64x2_t a, uint64x2_t b, uint64x2_t c);   // VBSL q0,q0,q0
float32x4_t vbslq_f32(uint32x4_t a, float32x4_t b, float32x4_t c); // VBSL q0,q0,q0
poly8x16_t  vbslq_p8(uint8x16_t a, poly8x16_t b, poly8x16_t c);    // VBSL q0,q0,q0
poly16x8_t  vbslq_p16(uint16x8_t a, poly16x8_t b, poly16x8_t c);   // VBSL q0,q0,q0