diff --git a/spec/simd.dd b/spec/simd.dd index e8c272125c..96ab4cfc3d 100644 --- a/spec/simd.dd +++ b/spec/simd.dd @@ -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).) @@ -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)) @@ -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.) @@ -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))