Direct Internal Functions (GNU Compiler Collection (GCC) Internals)

#### 13.2.1 Direct Internal Functions ¶

‘`IFN_CRC`’ ¶

  The `IFN_CRC` internal function directly maps to the `crc` instruction pattern.

‘`IFN_CRC_REV`’ ¶

  The `IFN_CRC_REV` internal function directly maps to the `crc_rev` instruction pattern.

‘`IFN_MASK_LOAD`’ ¶

  The `IFN_MASK_LOAD` internal function maps directly to the `maskload` instruction pattern (see maskloadmn). For a vector type `v` (with `TYPE_MODE` m), a mask type `p` (with `TYPE_MODE` n), and pointer type `aliasptr`, the signature of the internal function is:

      v IFN_MASK_LOAD (v *addr, aliasptr cookie, p mask, v elseval)

  a call to this internal function with lhs r maps to `maskloadmn` with the following operands array: `[r, addr, mask, elseval]`. `cookie`’s type (`aliasptr`) is a pointer type used for type-based alias analysis, and its value gives the alignment of the load in bits.

‘`IFN_LOAD_LANES`’ ¶

  The `IFN_LOAD_LANES` internal function directly maps to the `vec_load_lanes` instruction pattern.

‘`IFN_MASK_LOAD_LANES`’ ¶

  The `IFN_MASK_LOAD_LANES` internal function directly maps to the `vec_mask_load_lanes` instruction pattern.

‘`IFN_MASK_LEN_LOAD_LANES`’ ¶

  The `IFN_MASK_LEN_LOAD_LANES` internal function directly maps to the `vec_mask_len_load_lanes` instruction pattern.

‘`IFN_GATHER_LOAD`’ ¶

  The `IFN_GATHER_LOAD` internal function directly maps to the `gather_load` instruction pattern.

‘`IFN_MASK_GATHER_LOAD`’ ¶

  The `IFN_MASK_GATHER_LOAD` internal function directly maps to the `mask_gather_load` instruction pattern.

‘`IFN_MASK_LEN_GATHER_LOAD`’ ¶

  The `IFN_MASK_LEN_GATHER_LOAD` internal function directly maps to the `mask_len_gather_load` instruction pattern.

‘`IFN_MASK_LEN_STRIDED_LOAD`’ ¶

  The `IFN_MASK_LEN_STRIDED_LOAD` internal function directly maps to the `mask_len_strided_load` instruction pattern.

‘`IFN_LEN_LOAD`’ ¶

  The `IFN_LEN_LOAD` internal function directly maps to the `len_load` instruction pattern.

‘`IFN_MASK_LEN_LOAD`’ ¶

  The `IFN_MASK_LEN_LOAD` internal function directly maps to the `mask_len_load` instruction pattern.

‘`IFN_SCATTER_STORE`’ ¶

  The `IFN_SCATTER_STORE` internal function directly maps to the `scatter_store` instruction pattern.

‘`IFN_MASK_SCATTER_STORE`’ ¶

  The `IFN_MASK_SCATTER_STORE` internal function directly maps to the `mask_scatter_store` instruction pattern.

‘`IFN_MASK_LEN_SCATTER_STORE`’ ¶

  The `IFN_MASK_LEN_SCATTER_STORE` internal function directly maps to the `mask_len_scatter_store` instruction pattern.

‘`IFN_MASK_LEN_STRIDED_STORE`’ ¶

  The `IFN_MASK_LEN_STRIDED_STORE` internal function directly maps to the `mask_len_strided_store` instruction pattern.

‘`IFN_MASK_STORE`’ ¶

  The `IFN_MASK_STORE` internal function directly maps to the `maskstore` instruction pattern.

‘`IFN_STORE_LANES`’ ¶

  The `IFN_STORE_LANES` internal function directly maps to the `vec_store_lanes` instruction pattern.

‘`IFN_MASK_STORE_LANES`’ ¶

  The `IFN_MASK_STORE_LANES` internal function directly maps to the `vec_mask_store_lanes` instruction pattern.

‘`IFN_MASK_LEN_STORE_LANES`’ ¶

  The `IFN_MASK_LEN_STORE_LANES` internal function directly maps to the `vec_mask_len_store_lanes` instruction pattern.

‘`IFN_VCOND_MASK`’ ¶

  The `IFN_VCOND_MASK` internal function directly maps to the `vcond_mask` instruction pattern.

‘`IFN_VCOND_MASK_LEN`’ ¶

  The `IFN_VCOND_MASK_LEN` internal function directly maps to the `vcond_mask_len` instruction pattern.

‘`IFN_VEC_SET`’ ¶

  The `IFN_VEC_SET` internal function directly maps to the `vec_set` instruction pattern.

‘`IFN_VEC_EXTRACT`’ ¶

  The `IFN_VEC_EXTRACT` internal function directly maps to the `vec_extract` instruction pattern.

‘`IFN_LEN_STORE`’ ¶

  The `IFN_LEN_STORE` internal function directly maps to the `len_store` instruction pattern.

‘`IFN_MASK_LEN_STORE`’ ¶

  The `IFN_MASK_LEN_STORE` internal function directly maps to the `mask_len_store` instruction pattern.

‘`IFN_WHILE_ULT`’ ¶

  The `IFN_WHILE_ULT` internal function directly maps to the `while_ult` instruction pattern.

‘`IFN_SELECT_VL`’ ¶

  The `IFN_SELECT_VL` internal function directly maps to the `select_vl` instruction pattern.

‘`IFN_CHECK_RAW_PTRS`’ ¶

  The `IFN_CHECK_RAW_PTRS` internal function directly maps to the `check_raw_ptrs` instruction pattern.

‘`IFN_CHECK_WAR_PTRS`’ ¶

  The `IFN_CHECK_WAR_PTRS` internal function directly maps to the `check_war_ptrs` instruction pattern.

‘`IFN_VEC_SHL_INSERT`’ ¶

  The `IFN_VEC_SHL_INSERT` internal function directly maps to the `vec_shl_insert` instruction pattern.

‘`IFN_DIV_POW2`’ ¶

  The `IFN_DIV_POW2` internal function directly maps to the `sdiv_pow2` instruction pattern.

‘`IFN_FMS`’ ¶

  The `IFN_FMS` internal function directly maps to the `fms` instruction pattern.

‘`IFN_FNMA`’ ¶

  The `IFN_FNMA` internal function directly maps to the `fnma` instruction pattern.

‘`IFN_FNMS`’ ¶

  The `IFN_FNMS` internal function directly maps to the `fnms` instruction pattern.

‘`IFN_COND_SQRT`’ ¶

  The `IFN_COND_SQRT` internal function directly maps to the `cond_sqrt` instruction pattern.

‘`IFN_COND_LEN_SQRT`’ ¶

  The `IFN_COND_LEN_SQRT` internal function directly maps to the `cond_len_sqrt` instruction pattern.

‘`IFN_COND_CEIL`’ ¶

  The `IFN_COND_CEIL` internal function directly maps to the `cond_ceil` instruction pattern.

‘`IFN_COND_LEN_CEIL`’ ¶

  The `IFN_COND_LEN_CEIL` internal function directly maps to the `cond_len_ceil` instruction pattern.

‘`IFN_COND_FLOOR`’ ¶

  The `IFN_COND_FLOOR` internal function directly maps to the `cond_floor` instruction pattern.

‘`IFN_COND_LEN_FLOOR`’ ¶

  The `IFN_COND_LEN_FLOOR` internal function directly maps to the `cond_len_floor` instruction pattern.

‘`IFN_COND_ROUND`’ ¶

  The `IFN_COND_ROUND` internal function directly maps to the `cond_round` instruction pattern.

‘`IFN_COND_LEN_ROUND`’ ¶

  The `IFN_COND_LEN_ROUND` internal function directly maps to the `cond_len_round` instruction pattern.

‘`IFN_COND_RINT`’ ¶

  The `IFN_COND_RINT` internal function directly maps to the `cond_rint` instruction pattern.

‘`IFN_COND_LEN_RINT`’ ¶

  The `IFN_COND_LEN_RINT` internal function directly maps to the `cond_len_rint` instruction pattern.

‘`IFN_COND_ADD`’ ¶

  The `IFN_COND_ADD` internal function directly maps to the `cond_add` instruction pattern.

‘`IFN_COND_LEN_ADD`’ ¶

  The `IFN_COND_LEN_ADD` internal function directly maps to the `cond_len_add` instruction pattern.

‘`IFN_COND_SUB`’ ¶

  The `IFN_COND_SUB` internal function directly maps to the `cond_sub` instruction pattern.

‘`IFN_COND_LEN_SUB`’ ¶

  The `IFN_COND_LEN_SUB` internal function directly maps to the `cond_len_sub` instruction pattern.

‘`IFN_COND_MUL`’ ¶

  The `IFN_COND_MUL` internal function directly maps to the `cond_smul` instruction pattern.

‘`IFN_COND_LEN_MUL`’ ¶

  The `IFN_COND_LEN_MUL` internal function directly maps to the `cond_len_smul` instruction pattern.

‘`IFN_COND_RDIV`’ ¶

  The `IFN_COND_RDIV` internal function directly maps to the `cond_sdiv` instruction pattern.

‘`IFN_COND_LEN_RDIV`’ ¶

  The `IFN_COND_LEN_RDIV` internal function directly maps to the `cond_len_sdiv` instruction pattern.

‘`IFN_COND_COPYSIGN`’ ¶

  The `IFN_COND_COPYSIGN` internal function directly maps to the `cond_copysign` instruction pattern.

‘`IFN_COND_LEN_COPYSIGN`’ ¶

  The `IFN_COND_LEN_COPYSIGN` internal function directly maps to the `cond_len_copysign` instruction pattern.

‘`IFN_COND_FMIN`’ ¶

  The `IFN_COND_FMIN` internal function directly maps to the `cond_fmin` instruction pattern.

‘`IFN_COND_LEN_FMIN`’ ¶

  The `IFN_COND_LEN_FMIN` internal function directly maps to the `cond_len_fmin` instruction pattern.

‘`IFN_COND_FMAX`’ ¶

  The `IFN_COND_FMAX` internal function directly maps to the `cond_fmax` instruction pattern.

‘`IFN_COND_LEN_FMAX`’ ¶

  The `IFN_COND_LEN_FMAX` internal function directly maps to the `cond_len_fmax` instruction pattern.

‘`IFN_COND_AND`’ ¶

  The `IFN_COND_AND` internal function directly maps to the `cond_and` instruction pattern.

‘`IFN_COND_LEN_AND`’ ¶

  The `IFN_COND_LEN_AND` internal function directly maps to the `cond_len_and` instruction pattern.

‘`IFN_COND_IOR`’ ¶

  The `IFN_COND_IOR` internal function directly maps to the `cond_ior` instruction pattern.

‘`IFN_COND_LEN_IOR`’ ¶

  The `IFN_COND_LEN_IOR` internal function directly maps to the `cond_len_ior` instruction pattern.

‘`IFN_COND_XOR`’ ¶

  The `IFN_COND_XOR` internal function directly maps to the `cond_xor` instruction pattern.

‘`IFN_COND_LEN_XOR`’ ¶

  The `IFN_COND_LEN_XOR` internal function directly maps to the `cond_len_xor` instruction pattern.

‘`IFN_COND_SHL`’ ¶

  The `IFN_COND_SHL` internal function directly maps to the `cond_ashl` instruction pattern.

‘`IFN_COND_LEN_SHL`’ ¶

  The `IFN_COND_LEN_SHL` internal function directly maps to the `cond_len_ashl` instruction pattern.

‘`IFN_COND_FMA`’ ¶

  The `IFN_COND_FMA` internal function directly maps to the `cond_fma` instruction pattern.

‘`IFN_COND_LEN_FMA`’ ¶

  The `IFN_COND_LEN_FMA` internal function directly maps to the `cond_len_fma` instruction pattern.

‘`IFN_COND_FMS`’ ¶

  The `IFN_COND_FMS` internal function directly maps to the `cond_fms` instruction pattern.

‘`IFN_COND_LEN_FMS`’ ¶

  The `IFN_COND_LEN_FMS` internal function directly maps to the `cond_len_fms` instruction pattern.

‘`IFN_COND_FNMA`’ ¶

  The `IFN_COND_FNMA` internal function directly maps to the `cond_fnma` instruction pattern.

‘`IFN_COND_LEN_FNMA`’ ¶

  The `IFN_COND_LEN_FNMA` internal function directly maps to the `cond_len_fnma` instruction pattern.

‘`IFN_COND_FNMS`’ ¶

  The `IFN_COND_FNMS` internal function directly maps to the `cond_fnms` instruction pattern.

‘`IFN_COND_LEN_FNMS`’ ¶

  The `IFN_COND_LEN_FNMS` internal function directly maps to the `cond_len_fnms` instruction pattern.

‘`IFN_COND_NEG`’ ¶

  The `IFN_COND_NEG` internal function directly maps to the `cond_neg` instruction pattern.

‘`IFN_COND_LEN_NEG`’ ¶

  The `IFN_COND_LEN_NEG` internal function directly maps to the `cond_len_neg` instruction pattern.

‘`IFN_COND_NOT`’ ¶

  The `IFN_COND_NOT` internal function directly maps to the `cond_one_cmpl` instruction pattern.

‘`IFN_COND_LEN_NOT`’ ¶

  The `IFN_COND_LEN_NOT` internal function directly maps to the `cond_len_one_cmpl` instruction pattern.

‘`IFN_RSQRT`’ ¶

  The `IFN_RSQRT` internal function directly maps to the `rsqrt` instruction pattern.

‘`IFN_REDUC_PLUS`’ ¶

  The `IFN_REDUC_PLUS` internal function directly maps to the `reduc_plus_scal` instruction pattern.

‘`IFN_REDUC_FMAX`’ ¶

  The `IFN_REDUC_FMAX` internal function directly maps to the `reduc_fmax_scal` instruction pattern.

‘`IFN_REDUC_FMIN`’ ¶

  The `IFN_REDUC_FMIN` internal function directly maps to the `reduc_fmin_scal` instruction pattern.

‘`IFN_REDUC_AND`’ ¶

  The `IFN_REDUC_AND` internal function directly maps to the `reduc_and_scal` instruction pattern.

‘`IFN_REDUC_IOR`’ ¶

  The `IFN_REDUC_IOR` internal function directly maps to the `reduc_ior_scal` instruction pattern.

‘`IFN_REDUC_XOR`’ ¶

  The `IFN_REDUC_XOR` internal function directly maps to the `reduc_xor_scal` instruction pattern.

‘`IFN_REDUC_SBOOL_AND`’ ¶

  The `IFN_REDUC_SBOOL_AND` internal function directly maps to the `reduc_sbool_and_scal` instruction pattern.

‘`IFN_REDUC_SBOOL_IOR`’ ¶

  The `IFN_REDUC_SBOOL_IOR` internal function directly maps to the `reduc_sbool_ior_scal` instruction pattern.

‘`IFN_REDUC_SBOOL_XOR`’ ¶

  The `IFN_REDUC_SBOOL_XOR` internal function directly maps to the `reduc_sbool_xor_scal` instruction pattern.

‘`IFN_EXTRACT_LAST`’ ¶

  The `IFN_EXTRACT_LAST` internal function directly maps to the `extract_last` instruction pattern.

‘`IFN_FOLD_EXTRACT_LAST`’ ¶

  The `IFN_FOLD_EXTRACT_LAST` internal function directly maps to the `fold_extract_last` instruction pattern.

‘`IFN_LEN_FOLD_EXTRACT_LAST`’ ¶

  The `IFN_LEN_FOLD_EXTRACT_LAST` internal function directly maps to the `len_fold_extract_last` instruction pattern.

‘`IFN_FOLD_LEFT_PLUS`’ ¶

  The `IFN_FOLD_LEFT_PLUS` internal function directly maps to the `fold_left_plus` instruction pattern.

‘`IFN_MASK_FOLD_LEFT_PLUS`’ ¶

  The `IFN_MASK_FOLD_LEFT_PLUS` internal function directly maps to the `mask_fold_left_plus` instruction pattern.

‘`IFN_MASK_LEN_FOLD_LEFT_PLUS`’ ¶

  The `IFN_MASK_LEN_FOLD_LEFT_PLUS` internal function directly maps to the `mask_len_fold_left_plus` instruction pattern.

‘`IFN_XORSIGN`’ ¶

  The `IFN_XORSIGN` internal function directly maps to the `xorsign` instruction pattern.

‘`IFN_COMPLEX_ADD_ROT90`’ ¶

  The `IFN_COMPLEX_ADD_ROT90` internal function directly maps to the `cadd90` instruction pattern.

‘`IFN_COMPLEX_ADD_ROT270`’ ¶

  The `IFN_COMPLEX_ADD_ROT270` internal function directly maps to the `cadd270` instruction pattern.

‘`IFN_COMPLEX_MUL`’ ¶

  The `IFN_COMPLEX_MUL` internal function directly maps to the `cmul` instruction pattern.

‘`IFN_COMPLEX_MUL_CONJ`’ ¶

  The `IFN_COMPLEX_MUL_CONJ` internal function directly maps to the `cmul_conj` instruction pattern.

‘`IFN_VEC_ADDSUB`’ ¶

  The `IFN_VEC_ADDSUB` internal function directly maps to the `vec_addsub` instruction pattern.

‘`IFN_VEC_TRUNC_ADD_HIGH`’ ¶

  The `IFN_VEC_TRUNC_ADD_HIGH` internal function directly maps to the `vec_trunc_add_high` instruction pattern.

‘`IFN_VEC_FMADDSUB`’ ¶

  The `IFN_VEC_FMADDSUB` internal function directly maps to the `vec_fmaddsub` instruction pattern.

‘`IFN_VEC_FMSUBADD`’ ¶

  The `IFN_VEC_FMSUBADD` internal function directly maps to the `vec_fmsubadd` instruction pattern.

‘`IFN_COMPLEX_FMA`’ ¶

  The `IFN_COMPLEX_FMA` internal function directly maps to the `cmla` instruction pattern.

‘`IFN_COMPLEX_FMA_CONJ`’ ¶

  The `IFN_COMPLEX_FMA_CONJ` internal function directly maps to the `cmla_conj` instruction pattern.

‘`IFN_COMPLEX_FMS`’ ¶

  The `IFN_COMPLEX_FMS` internal function directly maps to the `cmls` instruction pattern.

‘`IFN_COMPLEX_FMS_CONJ`’ ¶

  The `IFN_COMPLEX_FMS_CONJ` internal function directly maps to the `cmls_conj` instruction pattern.

‘`IFN_BIT_ANDN`’ ¶

  The `IFN_BIT_ANDN` internal function directly maps to the `andn` instruction pattern.

‘`IFN_BIT_IORN`’ ¶

  The `IFN_BIT_IORN` internal function directly maps to the `iorn` instruction pattern.

‘`IFN_ABD`’ ¶

  The `IFN_ABD` internal function directly maps to the `sabd` and `uabd` instruction patterns, depending on the sign of the first argument.

‘`IFN_AVG_FLOOR`’ ¶

  The `IFN_AVG_FLOOR` internal function directly maps to the `savg_floor` and `uavg_floor` instruction patterns, depending on the sign of the first argument.

‘`IFN_AVG_CEIL`’ ¶

  The `IFN_AVG_CEIL` internal function directly maps to the `savg_ceil` and `uavg_ceil` instruction patterns, depending on the sign of the first argument.

‘`IFN_MULH`’ ¶

  The `IFN_MULH` internal function directly maps to the `smul_highpart` and `umul_highpart` instruction patterns, depending on the sign of the first argument.

‘`IFN_MULHS`’ ¶

  The `IFN_MULHS` internal function directly maps to the `smulhs` and `umulhs` instruction patterns, depending on the sign of the first argument.

‘`IFN_MULHRS`’ ¶

  The `IFN_MULHRS` internal function directly maps to the `smulhrs` and `umulhrs` instruction patterns, depending on the sign of the first argument.

‘`IFN_SAT_ADD`’ ¶

  The `IFN_SAT_ADD` internal function directly maps to the `ssadd` and `usadd` instruction patterns, depending on the sign of the first argument.

‘`IFN_SAT_SUB`’ ¶

  The `IFN_SAT_SUB` internal function directly maps to the `sssub` and `ussub` instruction patterns, depending on the sign of the first argument.

‘`IFN_SAT_MUL`’ ¶

  The `IFN_SAT_MUL` internal function directly maps to the `ssmul` and `usmul` instruction patterns, depending on the sign of the first argument.

‘`IFN_SAT_TRUNC`’ ¶

  The `IFN_SAT_TRUNC` internal function directly maps to the `sstrunc` and `ustrunc` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_DIV`’ ¶

  The `IFN_COND_DIV` internal function directly maps to the `cond_sdiv` and `cond_udiv` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_LEN_DIV`’ ¶

  The `IFN_COND_LEN_DIV` internal function directly maps to the `cond_len_sdiv` and `cond_len_udiv` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_MOD`’ ¶

  The `IFN_COND_MOD` internal function directly maps to the `cond_smod` and `cond_umod` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_LEN_MOD`’ ¶

  The `IFN_COND_LEN_MOD` internal function directly maps to the `cond_len_smod` and `cond_len_umod` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_MIN`’ ¶

  The `IFN_COND_MIN` internal function directly maps to the `cond_smin` and `cond_umin` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_LEN_MIN`’ ¶

  The `IFN_COND_LEN_MIN` internal function directly maps to the `cond_len_smin` and `cond_len_umin` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_MAX`’ ¶

  The `IFN_COND_MAX` internal function directly maps to the `cond_smax` and `cond_umax` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_LEN_MAX`’ ¶

  The `IFN_COND_LEN_MAX` internal function directly maps to the `cond_len_smax` and `cond_len_umax` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_SHR`’ ¶

  The `IFN_COND_SHR` internal function directly maps to the `cond_ashr` and `cond_lshr` instruction patterns, depending on the sign of the first argument.

‘`IFN_COND_LEN_SHR`’ ¶

  The `IFN_COND_LEN_SHR` internal function directly maps to the `cond_len_ashr` and `cond_len_lshr` instruction patterns, depending on the sign of the first argument.

‘`IFN_REDUC_MAX`’ ¶

  The `IFN_REDUC_MAX` internal function directly maps to the `reduc_smax_scal` and `reduc_umax_scal` instruction patterns, depending on the sign of the first argument.

‘`IFN_REDUC_MIN`’ ¶

  The `IFN_REDUC_MIN` internal function directly maps to the `reduc_smin_scal` and `reduc_umin_scal` instruction patterns, depending on the sign of the first argument.

‘`IFN_VEC_WIDEN_PLUS`’ ¶

  The `IFN_VEC_WIDEN_PLUS` set of internal functions directly map to the `vec_widen_sadd` and `vec_widen_uadd` instruction patterns, depending on the sign of the first argument. The `IFN_VEC_WIDEN_PLUS_LO` and `IFN_VEC_WIDEN_PLUS_HI` work on the low and high parts of a vector, the `IFN_VEC_WIDEN_PLUS_EVEN` and `IFN_VEC_WIDEN_PLUS_ODD` functions work on the even and odd elements of a vector.

‘`IFN_VEC_WIDEN_MINUS`’ ¶

  The `IFN_VEC_WIDEN_MINUS` set of internal functions directly map to the `vec_widen_ssub` and `vec_widen_usub` instruction patterns, depending on the sign of the first argument. The `IFN_VEC_WIDEN_MINUS_LO` and `IFN_VEC_WIDEN_MINUS_HI` work on the low and high parts of a vector, the `IFN_VEC_WIDEN_MINUS_EVEN` and `IFN_VEC_WIDEN_MINUS_ODD` functions work on the even and odd elements of a vector.

‘`IFN_VEC_WIDEN_ABD`’ ¶

  The `IFN_VEC_WIDEN_ABD` set of internal functions directly map to the `vec_widen_sabd` and `vec_widen_uabd` instruction patterns, depending on the sign of the first argument. The `IFN_VEC_WIDEN_ABD_LO` and `IFN_VEC_WIDEN_ABD_HI` work on the low and high parts of a vector, the `IFN_VEC_WIDEN_ABD_EVEN` and `IFN_VEC_WIDEN_ABD_ODD` functions work on the even and odd elements of a vector.