12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #+build i386, amd64
- package simd_x86
- import "base:intrinsics"
- @(require_results, enable_target_feature="bmi")
- _andn_u32 :: #force_inline proc "c" (a, b: u32) -> u32 {
- return a &~ b
- }
- @(require_results, enable_target_feature="bmi")
- _andn_u64 :: #force_inline proc "c" (a, b: u64) -> u64 {
- return a &~ b
- }
- @(require_results, enable_target_feature="bmi")
- _bextr_u32 :: #force_inline proc "c" (a, start, len: u32) -> u32 {
- return bextr_u32(a, (start & 0xff) | (len << 8))
- }
- @(require_results, enable_target_feature="bmi")
- _bextr_u64 :: #force_inline proc "c" (a: u64, start, len: u32) -> u64 {
- return bextr_u64(a, cast(u64)((start & 0xff) | (len << 8)))
- }
- @(require_results, enable_target_feature="bmi")
- _bextr2_u32 :: #force_inline proc "c" (a, control: u32) -> u32 {
- return bextr_u32(a, control)
- }
- @(require_results, enable_target_feature="bmi")
- _bextr2_u64 :: #force_inline proc "c" (a, control: u64) -> u64 {
- return bextr_u64(a, control)
- }
- @(require_results, enable_target_feature="bmi")
- _blsi_u32 :: #force_inline proc "c" (a: u32) -> u32 {
- return a & -a
- }
- @(require_results, enable_target_feature="bmi")
- _blsi_u64 :: #force_inline proc "c" (a: u64) -> u64 {
- return a & -a
- }
- @(require_results, enable_target_feature="bmi")
- _blsmsk_u32 :: #force_inline proc "c" (a: u32) -> u32 {
- return a ~ (a-1)
- }
- @(require_results, enable_target_feature="bmi")
- _blsmsk_u64 :: #force_inline proc "c" (a: u64) -> u64 {
- return a ~ (a-1)
- }
- @(require_results, enable_target_feature="bmi")
- _blsr_u32 :: #force_inline proc "c" (a: u32) -> u32 {
- return a & (a-1)
- }
- @(require_results, enable_target_feature="bmi")
- _blsr_u64 :: #force_inline proc "c" (a: u64) -> u64 {
- return a & (a-1)
- }
- @(require_results, enable_target_feature = "bmi")
- _tzcnt_u16 :: #force_inline proc "c" (a: u16) -> u16 {
- return intrinsics.count_trailing_zeros(a)
- }
- @(require_results, enable_target_feature = "bmi")
- _tzcnt_u32 :: #force_inline proc "c" (a: u32) -> u32 {
- return intrinsics.count_trailing_zeros(a)
- }
- @(require_results, enable_target_feature = "bmi")
- _tzcnt_u64 :: #force_inline proc "c" (a: u64) -> u64 {
- return intrinsics.count_trailing_zeros(a)
- }
- @(private, default_calling_convention = "none")
- foreign _ {
- @(link_name = "llvm.x86.bmi.bextr.32")
- bextr_u32 :: proc(a, control: u32) -> u32 ---
- @(link_name = "llvm.x86.bmi.bextr.64")
- bextr_u64 :: proc(a, control: u64) -> u64 ---
- }
|