Skip to content

spec/simd.dd: Clarify whether a vector type or intrisinc requires AVX or AVX2 support #2834

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 38 additions & 27 deletions spec/simd.dd
Original file line number Diff line number Diff line change
Expand Up @@ -167,18 +167,21 @@ $(H2 $(LNAME2 x86_64_vec, X86 And X86$(UNDERSCORE)64 Vector Extension Implementa
$(TROW ulong2, 2 $(D ulong)s, $(D unsigned long __attribute__((vector_size(16)))))
$(TROW float4, 4 $(D float)s, $(D float __attribute__((vector_size(16)))))
$(TROW double2, 2 $(D double)s, $(D double __attribute__((vector_size(16)))))
$(TROW void32, 32 bytes of untyped data, $(I no equivalent))
$(TROW byte32, 32 $(D byte)s, $(D signed char __attribute__((vector_size(32)))))
$(TROW ubyte32, 32 $(D ubyte)s, $(D unsigned char __attribute__((vector_size(32)))))
$(TROW short16, 16 $(D short)s, $(D short __attribute__((vector_size(32)))))
$(TROW ushort16, 16 $(D ushort)s, $(D ushort __attribute__((vector_size(32)))))
$(TROW int8, 8 $(D int)s, $(D int __attribute__((vector_size(32)))))
$(TROW uint8, 8 $(D uint)s, $(D unsigned __attribute__((vector_size(32)))))
$(TROW long4, 4 $(D long)s, $(D long __attribute__((vector_size(32)))))
$(TROW ulong4, 4 $(D ulong)s, $(D unsigned long __attribute__((vector_size(32)))))
$(TROW float8, 8 $(D float)s, $(D float __attribute__((vector_size(32)))))
$(TROW double4, 4 $(D double)s, $(D double __attribute__((vector_size(32)))))
$(TROW void32, 32 bytes of untyped data $(AVX), $(I no equivalent))
$(TROW byte32, 32 $(D byte)s $(AVX), $(D signed char __attribute__((vector_size(32)))))
$(TROW ubyte32, 32 $(D ubyte)s $(AVX), $(D unsigned char __attribute__((vector_size(32)))))
$(TROW short16, 16 $(D short)s $(AVX), $(D short __attribute__((vector_size(32)))))
$(TROW ushort16, 16 $(D ushort)s $(AVX), $(D ushort __attribute__((vector_size(32)))))
$(TROW int8, 8 $(D int)s $(AVX), $(D int __attribute__((vector_size(32)))))
$(TROW uint8, 8 $(D uint)s $(AVX), $(D unsigned __attribute__((vector_size(32)))))
$(TROW long4, 4 $(D long)s $(AVX), $(D long __attribute__((vector_size(32)))))
$(TROW ulong4, 4 $(D ulong)s $(AVX), $(D unsigned long __attribute__((vector_size(32)))))
$(TROW float8, 8 $(D float)s $(AVX), $(D float __attribute__((vector_size(32)))))
$(TROW double4, 4 $(D double)s $(AVX), $(D double __attribute__((vector_size(32)))))
)
$(BR)
$(AVX) Only supported on $(D D_AVX) targets
$(BR)$(BR)

$(P Note: for 32 bit gcc, it's $(D long long) instead of $(D long).)

Expand All @@ -187,14 +190,14 @@ $(H2 $(LNAME2 x86_64_vec, X86 And X86$(UNDERSCORE)64 Vector Extension Implementa
$(TROW =,$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW +,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW -,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW *,$(N),$(N),$(N),$(Y),$(Y),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW *,$(N),$(N),$(N),$(Y),$(Y),$(AVX),$(AVX),$(N),$(N),$(Y),$(Y))
$(TROW /,$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW $(CODE_AMP),$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW |,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW $(D ^),$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW +=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW -=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW *=,$(N),$(N),$(N),$(Y),$(Y),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW *=,$(N),$(N),$(N),$(Y),$(Y),$(AVX),$(AVX),$(N),$(N),$(Y),$(Y))
$(TROW /=,$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW $(CODE_AMP)=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW |=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
Expand All @@ -203,28 +206,34 @@ $(H2 $(LNAME2 x86_64_vec, X86 And X86$(UNDERSCORE)64 Vector Extension Implementa
$(TROW $(I unary)+,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW $(I unary)-,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
)
$(BR)
$(AVX) Only supported on $(D D_AVX) targets
$(BR)$(BR)

$(TABLE2 Supported 256-bit Vector Operators,
$(THEAD Operator,void32,byte32,ubyte32,short16,ushort16,int8,uint8,long4,ulong4,float8,double4)
$(TROW =,$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW +,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW -,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW *,$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW +,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(Y),$(Y))
$(TROW -,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(Y),$(Y))
$(TROW *,$(N),$(N),$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N),$(Y),$(Y))
$(TROW /,$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW $(CODE_AMP),$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW |,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW $(D ^),$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW +=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW -=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW *=,$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW $(CODE_AMP),$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW |,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW $(D ^),$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW +=,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(Y),$(Y))
$(TROW -=,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(Y),$(Y))
$(TROW *=,$(N),$(N),$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N),$(Y),$(Y))
$(TROW /=,$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(N),$(Y),$(Y))
$(TROW $(CODE_AMP)=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW |=,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW $(D ^=),$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW $(I unary)$(D ~),$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(N),$(N))
$(TROW $(CODE_AMP)=,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW |=,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW $(D ^=),$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW $(I unary)$(D ~),$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(N),$(N))
$(TROW $(I unary)+,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW $(I unary)-,$(N),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y),$(Y))
$(TROW $(I unary)-,$(N),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(AVX2),$(Y),$(Y))
)
$(BR)
$(AVX2) Only supported on $(D D_AVX2) targets
$(BR)$(BR)

$(P Operators not listed are not supported at all.)

Expand All @@ -241,4 +250,6 @@ Macros:
TITLE=Vector Extensions
Y=$(TIMES)
N=$(NDASH)
AVX=$(DAGGER)
AVX2=$(DAGGER)
CORE_SIMD=$(LINK2 $(ROOT_DIR)phobos/core_simd.html, $(D core.simd))