-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Tracking Issue for stdarch_s390x
#135681
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
The new machines IBM z17 and IBM LinuxONE Emperor 5 were recently announced. These machines implement the Support for the new architecture level also comes with a new revision of the vector intrinsics (implemented across GCC, LLVM, and the IBM compilers). It would be good to update the Rust implementation to match. The new Generic cleanupWhile reviewing the new changes, we noticed a number of inconsistencies and deficiencies in the existing intrinsics, which were cleaned up as part of the new revision. Specifically:
and deprecated those intrinsics:
and deprecated the existing intrinsics:
Support for 128-bit integer vector typesOne main feature of the
Note that since the vector length is only 128 bits, these vector types only contain a single element. They are still useful as they use a different ABI (passed in vector registers and not in memory), and it seems cleaner to consistently use "vector" types with the vector intrinsics. Note that many operations on these types can actually be performed with prior versions of the ISA, so the types have been made available unconditionally. Many existing intrinsics have been extended to support the new types:
Some other intrinsics also now support the new types, but only when the
Finally, a number of existing intrinsics already operated on 128-bit integer types, but used
and replaced by the following new intrinsics:
and new overloads of existing intrinsics:
Other new ISA capabilitiesIn addition to the above, the new ISA provides an extended set of new multiplication operations on 64-bit and 128-bit
Finally, there are a few completely new intrinsics to support new operations (with
|
Feature gate:
#![feature(stdarch_s390x)]
This is a tracking issue for the s390x (aka SystemZ) intrinsics in
core::arch::s390x
.Public API
Everything in
core::arch::s390x
.Missing instructions
based on the clang vecintrin.h (roungly similar to the linkable GCC vecintrin.h).
__lcbb
s390x: another batch of intrinsics stdarch#1738vec_any_eq
s390x: final batch of intrinsics stdarch#1743vec_any_ge
s390x: final batch of intrinsics stdarch#1743vec_any_gt
s390x: final batch of intrinsics stdarch#1743vec_any_le
s390x: final batch of intrinsics stdarch#1743vec_any_lt
s390x: final batch of intrinsics stdarch#1743vec_any_ne
s390x: final batch of intrinsics stdarch#1743vec_any_nge
s390x: final batch of intrinsics stdarch#1743vec_any_ngt
s390x: final batch of intrinsics stdarch#1743vec_any_nle
s390x: final batch of intrinsics stdarch#1743vec_any_nlt
s390x: final batch of intrinsics stdarch#1743vec_all_eq
s390x: final batch of intrinsics stdarch#1743vec_all_ge
s390x: final batch of intrinsics stdarch#1743vec_all_gt
s390x: final batch of intrinsics stdarch#1743vec_all_le
s390x: final batch of intrinsics stdarch#1743vec_all_lt
s390x: final batch of intrinsics stdarch#1743vec_all_ne
s390x: final batch of intrinsics stdarch#1743vec_all_nge
s390x: final batch of intrinsics stdarch#1743vec_all_ngt
s390x: final batch of intrinsics stdarch#1743vec_all_nle
s390x: final batch of intrinsics stdarch#1743vec_all_nlt
s390x: final batch of intrinsics stdarch#1743vec_all_nan
s390x: final batch of intrinsics stdarch#1743vec_all_numeric
s390x: final batch of intrinsics stdarch#1743vec_any_nan
s390x: final batch of intrinsics stdarch#1743vec_any_numeric
s390x: final batch of intrinsics stdarch#1743vec_genmask
s390x: add more intrinsics stdarch#1728vec_genmasks_8
s390x: add more intrinsics stdarch#1728vec_genmasks_16
s390x: add more intrinsics stdarch#1728vec_genmasks_32
s390x: add more intrinsics stdarch#1728vec_genmasks_64
s390x: add more intrinsics stdarch#1728vec_splat_u8
s390x: add more intrinsics stdarch#1728vec_splat_s8
s390x: add more intrinsics stdarch#1728vec_splat_u16
s390x: add more intrinsics stdarch#1728vec_splat_s16
s390x: add more intrinsics stdarch#1728vec_splat_u32
s390x: add more intrinsics stdarch#1728vec_splat_s32
s390x: add more intrinsics stdarch#1728vec_splat_u64
s390x: add more intrinsics stdarch#1728vec_splat_s64
s390x: add more intrinsics stdarch#1728vec_checksum
s390x: another batch of intrinsics stdarch#1738vec_gfmsum_128
s390x: another batch of intrinsics stdarch#1738vec_gfmsum_accum_128
s390x: another batch of intrinsics stdarch#1738vec_ceil
S390x float rounding stdarch#1712vec_roundp
S390x float rounding stdarch#1712vec_floor
S390x float rounding stdarch#1712vec_roundm
S390x float rounding stdarch#1712vec_trunc
S390x float rounding stdarch#1712vec_roundz
S390x float rounding stdarch#1712vec_rint
S390x float rounding stdarch#1712vec_roundc
S390x float rounding stdarch#1712vec_round
S390x float rounding stdarch#1712vec_doublee
s390x: final batch of intrinsics stdarch#1743vec_floate
s390x: final batch of intrinsics stdarch#1743vec_abs
s390x
: addvec_sub
,vec_mul
,vec_min
,vec_max
,vec_abs
andvec_splats
stdarch#1704vec_add_u128
s390x: another batch of intrinsics stdarch#1738vec_addc_u128
s390x: another batch of intrinsics stdarch#1738vec_adde_u128
s390x: another batch of intrinsics stdarch#1738vec_addec_u128
s390x: another batch of intrinsics stdarch#1738vec_and
S390x vector bitwise operations stdarch#1709vec_andc
S390x vector bitwise operations stdarch#1709vec_avg
s390x: another batch of intrinsics stdarch#1738vec_bperm_u128
s390x: final batch of intrinsics stdarch#1743vec_cmpeq
s390x: final batch of intrinsics stdarch#1743vec_cmpeq_idx
s390x: final batch of intrinsics stdarch#1743vec_cmpeq_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmpeq_or_0_idx
s390x: final batch of intrinsics stdarch#1743vec_cmpeq_or_0_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmpge
s390x: final batch of intrinsics stdarch#1743vec_cmpgt
s390x: final batch of intrinsics stdarch#1743vec_cmple
s390x: final batch of intrinsics stdarch#1743vec_cmplt
s390x: final batch of intrinsics stdarch#1743vec_cmpne_idx
s390x: final batch of intrinsics stdarch#1743vec_cmpne_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmpne_or_0_idx
s390x: final batch of intrinsics stdarch#1743vec_cmpne_or_0_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmpnrg
s390x: final batch of intrinsics stdarch#1743vec_cmpnrg_cc
s390x: final batch of intrinsics stdarch#1743vec_cmpnrg_idx
s390x: final batch of intrinsics stdarch#1743vec_cmpnrg_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmpnrg_or_0_idx
s390x: final batch of intrinsics stdarch#1743vec_cmpnrg_or_0_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmprg
s390x: final batch of intrinsics stdarch#1743vec_cmprg_cc
s390x: final batch of intrinsics stdarch#1743vec_cmprg_idx
s390x: final batch of intrinsics stdarch#1743vec_cmprg_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cmprg_or_0_idx
s390x: final batch of intrinsics stdarch#1743vec_cmprg_or_0_idx_cc
s390x: final batch of intrinsics stdarch#1743vec_cntlz
S390x vector bitwise operations stdarch#1709vec_cnttz
S390x vector bitwise operations stdarch#1709vec_cp_until_zero
s390x: final batch of intrinsics stdarch#1743vec_cp_until_zero_cc
s390x: final batch of intrinsics stdarch#1743vec_double
s390x: final batch of intrinsics stdarch#1743vec_eqv
S390x vector bitwise operations stdarch#1709vec_extend_s64
s390x: final batch of intrinsics stdarch#1743vec_find_any_eq
s390x: add more intrinsics stdarch#1728vec_find_any_eq_cc
s390x: add more intrinsics stdarch#1728vec_find_any_eq_idx
s390x: add more intrinsics stdarch#1728vec_find_any_eq_idx_cc
s390x: add more intrinsics stdarch#1728vec_find_any_eq_or_0_idx
s390x: add more intrinsics stdarch#1728vec_find_any_eq_or_0_idx_cc
s390x: add more intrinsics stdarch#1728vec_find_any_ne
s390x: add more intrinsics stdarch#1728vec_find_any_ne_cc
s390x: add more intrinsics stdarch#1728vec_find_any_ne_idx
s390x: add more intrinsics stdarch#1728vec_find_any_ne_idx_cc
s390x: add more intrinsics stdarch#1728vec_find_any_ne_or_0_idx
s390x: add more intrinsics stdarch#1728vec_find_any_ne_or_0_idx_cc
s390x: add more intrinsics stdarch#1728vec_float
s390x: final batch of intrinsics stdarch#1743vec_fp_test_data_class
s390x: final batch of intrinsics stdarch#1743vec_gather_element
s390x: final batch of intrinsics stdarch#1743vec_gfmsum
s390x: another batch of intrinsics stdarch#1738vec_gfmsum_accum
s390x: another batch of intrinsics stdarch#1738vec_load_bndry
s390x: another batch of intrinsics stdarch#1738vec_load_len
s390x: another batch of intrinsics stdarch#1738vec_load_len_r
s390x: another batch of intrinsics stdarch#1738vec_load_pair
s390x: another batch of intrinsics stdarch#1738vec_madd
s390x: another batch of intrinsics stdarch#1738vec_max
s390x
: addvec_sub
,vec_mul
,vec_min
,vec_max
,vec_abs
andvec_splats
stdarch#1704vec_meadd
s390x: final batch of intrinsics stdarch#1743vec_mergeh
s390x: add more intrinsics stdarch#1728vec_mergel
s390x: add more intrinsics stdarch#1728vec_mhadd
s390x: final batch of intrinsics stdarch#1743vec_min
s390x
: addvec_sub
,vec_mul
,vec_min
,vec_max
,vec_abs
andvec_splats
stdarch#1704vec_mladd
s390x: final batch of intrinsics stdarch#1743vec_moadd
s390x: final batch of intrinsics stdarch#1743vec_msub
s390x: another batch of intrinsics stdarch#1738vec_msum_u128
s390x: final batch of intrinsics stdarch#1743vec_mule
s390x: another batch of intrinsics stdarch#1738vec_mulh
s390x: final batch of intrinsics stdarch#1743vec_mulo
s390x: final batch of intrinsics stdarch#1743vec_nabs
s390x: add more intrinsics stdarch#1728vec_nand
S390x vector bitwise operations stdarch#1709vec_nmadd
s390x: another batch of intrinsics stdarch#1738vec_nmsub
s390x: another batch of intrinsics stdarch#1738vec_nor
S390x vector bitwise operations stdarch#1709vec_or
S390x vector bitwise operations stdarch#1709vec_orc
S390x vector bitwise operations stdarch#1709vec_pack
s390x: another batch of intrinsics stdarch#1738vec_packs
s390x: another batch of intrinsics stdarch#1738vec_packs_cc
s390x: another batch of intrinsics stdarch#1738vec_packsu
s390x: another batch of intrinsics stdarch#1738vec_packsu_cc
s390x: another batch of intrinsics stdarch#1738vec_perm
s390x: add more intrinsics stdarch#1728vec_popcnt
S390x vector bitwise operations stdarch#1709vec_revb
s390x: add more intrinsics stdarch#1728vec_reve
s390x: add more intrinsics stdarch#1728vec_rl
s390x: add more intrinsics stdarch#1728vec_rl_mask
s390x: add more intrinsics stdarch#1728vec_rli
s390x: add more intrinsics stdarch#1728vec_scatter_element
s390x: final batch of intrinsics stdarch#1743vec_search_string_cc
s390x: final batch of intrinsics stdarch#1743vec_search_string_until_zero_cc
s390x: final batch of intrinsics stdarch#1743vec_sel
s390x: final batch of intrinsics stdarch#1743vec_signed
s390x: final batch of intrinsics stdarch#1743vec_slb
s390x: add more intrinsics stdarch#1728vec_sld
s390x: final batch of intrinsics stdarch#1743vec_sldb
s390x: final batch of intrinsics stdarch#1743vec_sldw
s390x: final batch of intrinsics stdarch#1743vec_sll
s390x: add more intrinsics stdarch#1728vec_splat
s390x: add more intrinsics stdarch#1728vec_splats
s390x
: addvec_sub
,vec_mul
,vec_min
,vec_max
,vec_abs
andvec_splats
stdarch#1704vec_sqrt
s390x: add more intrinsics stdarch#1728vec_srab
s390x: add more intrinsics stdarch#1728vec_sral
s390x: add more intrinsics stdarch#1728vec_srb
s390x: add more intrinsics stdarch#1728vec_srdb
s390x: final batch of intrinsics stdarch#1743vec_srl
s390x: add more intrinsics stdarch#1728vec_store_len
s390x: another batch of intrinsics stdarch#1738vec_store_len_r
s390x: another batch of intrinsics stdarch#1738vec_sub_u128
s390x: add more intrinsics stdarch#1728vec_subc_u128
s390x: add more intrinsics stdarch#1728vec_sube_u128
s390x: add more intrinsics stdarch#1728vec_subec_u128
s390x: add more intrinsics stdarch#1728vec_sum2
s390x: add more intrinsics stdarch#1728vec_sum4
s390x: add more intrinsics stdarch#1728vec_sum_u128
s390x: add more intrinsics stdarch#1728vec_test_mask
s390x: final batch of intrinsics stdarch#1743vec_unpackh
s390x: another batch of intrinsics stdarch#1738vec_unpackl
s390x: another batch of intrinsics stdarch#1738vec_unsigned
s390x: final batch of intrinsics stdarch#1743vec_xl
s390x: another batch of intrinsics stdarch#1738vec_xor
S390x vector bitwise operations stdarch#1709vec_xst
s390x: another batch of intrinsics stdarch#1738blocked on #137447
vec_promote
addvec_extract
,vec_insert
,vec_promote
andvec_insert_and_zero
stdarch#1772vec_extract
addvec_extract
,vec_insert
,vec_promote
andvec_insert_and_zero
stdarch#1772vec_insert
addvec_extract
,vec_insert
,vec_promote
andvec_insert_and_zero
stdarch#1772vec_insert_and_zero
addvec_extract
,vec_insert
,vec_promote
andvec_insert_and_zero
stdarch#1772from
nnp-assist
, current qemu traps on thesevec_extend_to_fp32_hi
vec_extend_to_fp32_lo
vec_round_from_fp32
vec_convert_to_fp16
vec_convert_from_fp16
deprecated functions
vec_ctd
vec_ctd_s64
vec_ctd_u64
vec_ctsl
vec_ctul
vec_ld2f
vec_st2f
vec_xstd2
vec_xstw4
vec_xld2
vec_xlw4
vec_permi
Steps / History
Unresolved Questions
@rustbot label O-SystemZ
general s390x vector/intrinsics progress is tracked at #130869
cc @taiki-e
Footnotes
https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html ↩
The text was updated successfully, but these errors were encountered: