src/dpdk/lib/librte_net/net_crc_neon.c
static inline uint64x2_t
crcr32_folding_round(uint64x2_t data_block, uint64x2_t precomp,
	uint64x2_t fold)
{
	uint64x2_t tmp0 = vreinterpretq_u64_p128(vmull_p64(
			vgetq_lane_p64(vreinterpretq_p64_u64(fold), 1),
			vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 0)));

	uint64x2_t tmp1 = vreinterpretq_u64_p128(vmull_p64(
			vgetq_lane_p64(vreinterpretq_p64_u64(fold), 0),
			vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 1)));

	return veorq_u64(tmp1, veorq_u64(data_block, tmp0));
}
/**
 * @brief Performs one folding round
 *
 * Logically function operates as follows:
 *     DATA = READ_NEXT_16BYTES();
 *     F1 = LSB8(FOLD)
 *     F2 = MSB8(FOLD)
 *     T1 = CLMUL(F1, RK1)
 *     T2 = CLMUL(F2, RK2)
 *     FOLD = XOR(T1, T2, DATA)
 *
 * @param data_block 16 byte data block
 * @param precomp precomputed rk1 constant
 * @param fold running 16 byte folded data
 *
 * @return New 16 byte folded data
 */


@param data_block 16 byte data block
@param precomp precomputed rk1 constant
@param fold running 16 byte folded data

@return New 16 byte folded data
@param data_block 16 byte data block @param precomp precomputed rk1 constant @param fold running 16 byte folded data @return New 16 byte folded data
static inline uint64x2_t
crcr32_folding_round(uint64x2_t data_block, uint64x2_t precomp,
	uint64x2_t fold)
{
	uint64x2_t tmp0 = vreinterpretq_u64_p128(vmull_p64(
			vgetq_lane_p64(vreinterpretq_p64_u64(fold), 1),
			vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 0)));
	uint64x2_t tmp1 = vreinterpretq_u64_p128(vmull_p64(
			vgetq_lane_p64(vreinterpretq_p64_u64(fold), 0),
			vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 1)));
	return veorq_u64(tmp1, veorq_u64(data_block, tmp0));
}
static inline uint64x2_t crcr32_folding_round ( uint64x2_t data_block , uint64x2_t precomp , uint64x2_t fold ) { uint64x2_t tmp0 = vreinterpretq_u64_p128 ( vmull_p64 ( vgetq_lane_p64 ( vreinterpretq_p64_u64 ( fold ) , 1 ) , vgetq_lane_p64 ( vreinterpretq_p64_u64 ( precomp ) , 0 ) ) ) ; uint64x2_t tmp1 = vreinterpretq_u64_p128 ( vmull_p64 ( vgetq_lane_p64 ( vreinterpretq_p64_u64 ( fold ) , 0 ) , vgetq_lane_p64 ( vreinterpretq_p64_u64 ( precomp ) , 1 ) ) ) ; return veorq_u64 ( tmp1 , veorq_u64 ( data_block , tmp0 ) ) ; }
@brief Performs one folding round
 Logically function operates as follows:
     DATA = READ_NEXT_16BYTES();
     F1 = LSB8(FOLD)
     F2 = MSB8(FOLD)
     T1 = CLMUL(F1, RK1)
     T2 = CLMUL(F2, RK2)
     FOLD = XOR(T1, T2, DATA)
@brief Performs one folding round Logically function operates as follows : DATA = READ_NEXT_16BYTES () ; F1 = LSB8 ( FOLD ) F2 = MSB8 ( FOLD ) T1 = CLMUL ( F1 RK1 ) T2 = CLMUL ( F2 RK2 ) FOLD = XOR ( T1 T2 DATA )