rust-lang/rust

[docs inaccurate] Not all the `addcarry` intrinsics are marked with the appropriate required CPU feature

Lokathor opened this issue · 3 comments

The following functions use the adx CPU feature but in their docs they aren't marked as such:

  • core::arch::x86::_addcarry_u32
  • core::arch::x86_64::_addcarry_u32
  • core::arch::x86_64::_addcarry_u64
  • core::arch::x86::_subborrow_u32
  • core::arch::x86_64::_subborrow_u32
  • core::arch::x86_64::_subborrow_u64

This issue has been assigned to @creativcoder via this comment.

Are you sure these require the adx feature? Their definitions in core::arch doesn't seem to enable the feature, and I don't think it's "implicitly" required either (in the sense that not having it will lead to errors or super slow software emulation when using the intrinics). These intrinsics are supposed to map to the much older and ubiquitous adc instruction, the newer adx instruction family is just sometimes preferable and therefore may be used instead, at the compiler's discretion, if it's available. But these intrinsics ought to work without the adx target feature, too.

Ah, I understand the distinction now. I'll close this up.