mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
91 lines
4.7 KiB
Text
91 lines
4.7 KiB
Text
Usage of vector types and operations on an unsupported `-mcpu=` will now error
|
|
|
|
Previously, the compiler accepted the following code as being supported by all
|
|
`-mcpu=` types on both OSX 32-bit and all 64-bit targets.
|
|
|
|
---
|
|
__vector(long[4]) x; // AVX type
|
|
x += 1; // AVX2 operation
|
|
---
|
|
|
|
In this release, all `__vector` types and operations now check the current CPU
|
|
being targeted for, and will issue an error if there is insufficient support.
|
|
|
|
This also allows for conditional compilation using `__traits(compiles)` to
|
|
probe which operations are supported at compile-time.
|
|
|
|
---
|
|
static if (__traits(compiles, long4))
|
|
{
|
|
// Compiled in if `-mcpu=avx` or higher
|
|
}
|
|
|
|
static if (__traits(compiles, { int4 x; x += 1; }))
|
|
{
|
|
// Compiled in if `-mcpu=baseline` or higher
|
|
}
|
|
|
|
static if (__traits(compiles, { int4 x; x *= 1; }))
|
|
{
|
|
// Compiled in if `-mcpu=avx` or higher
|
|
}
|
|
|
|
static if (__traits(compiles, { int8 x; x += 1; }))
|
|
{
|
|
// Compiled in if `-mcpu=avx2` or higher
|
|
}
|
|
---
|
|
|
|
The following tables describe what minimum `-mcpu=` level is required.
|
|
|
|
$(TABLE2 Minimum Required `-mcpu=` for 128-bit Vector Types
|
|
$(THEAD void16,byte16,ubyte16,short8,ushort8,int4,uint4,long2,ulong2,float4,double2)
|
|
$(TROW baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
)
|
|
|
|
$(TABLE2 Minimum Required `-mcpu=` for 128-bit Vector Operators,
|
|
$(THEAD Operator,byte16,ubyte16,short8,ushort8,int4,uint4,long2,ulong2,float4,double2)
|
|
$(TROW +,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
$(TROW -,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
$(TROW *,$(NDASH),$(NDASH),baseline,baseline,avx,avx,$(NDASH),$(NDASH),baseline,baseline)
|
|
$(TROW /,$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),baseline,baseline)
|
|
$(TROW $(CODE_AMP),baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW |,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW $(D ^),baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW +=,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
$(TROW -=,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
$(TROW *=,$(NDASH),$(NDASH),baseline,baseline,avx,avx,$(NDASH),$(NDASH),baseline,baseline)
|
|
$(TROW /=,$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),baseline,baseline)
|
|
$(TROW $(CODE_AMP)=,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW |=,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW $(D ^=),baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW $(I unary)$(D ~),baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,$(NDASH),$(NDASH))
|
|
$(TROW $(I unary)+,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
$(TROW $(I unary)-,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
)
|
|
|
|
$(TABLE2 Minimum Required `-mcpu=` for 256-bit Vector Types
|
|
$(THEAD void32,byte32,ubyte32,short16,ushort16,int8,uint8,long4,ulong4,float8,double4)
|
|
$(TROW avx,avx,avx,avx,avx,avx,avx,avx,avx,avx,avx)
|
|
)
|
|
|
|
$(TABLE2 Minimum Required `-mcpu=` for 256-bit Vector Operators,
|
|
$(THEAD Operator,byte32,ubyte32,short16,ushort16,int8,uint8,long4,ulong4,float8,double4)
|
|
$(TROW +,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx,avx)
|
|
$(TROW -,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx,avx)
|
|
$(TROW *,$(NDASH),$(NDASH),avx2,avx2,avx2,avx2,$(NDASH),$(NDASH),avx,avx)
|
|
$(TROW /,$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),avx,avx)
|
|
$(TROW $(CODE_AMP),avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW |,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW $(D ^),avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW +=,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx,avx)
|
|
$(TROW -=,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx,avx)
|
|
$(TROW *=,$(NDASH),$(NDASH),avx2,avx2,avx2,avx2,$(NDASH),$(NDASH),avx,avx)
|
|
$(TROW /=,$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),$(NDASH),avx,avx)
|
|
$(TROW $(CODE_AMP)=,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW |=,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW $(D ^=),avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW $(I unary)$(D ~),avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,$(NDASH),$(NDASH))
|
|
$(TROW $(I unary)+,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline,baseline)
|
|
$(TROW $(I unary)-,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx2,avx,avx)
|
|
)
|