Small Vectors Proposal

Oskar Linde oskar.lindeREM at OVEgmail.com
Tue Jan 30 10:10:35 PST 2007


Mikola Lysenko wrote:
[snip]
> 1. Additional primitive types
> 
> byte2, byte3, byte4, short2, short3, short4, int2, int3, int4, long2, 
> long3, long4, cent2, cent3, cent4, ubyte2, ubyte3, ubyte4, ushort2, 
> ushort3, ushort4, uint2, uint3, uint4, ulong2, ulong3, ulong4, ucent2, 
> ucent3, ucent4
> float2, float3, float4, double2, double3, double4, real2, real3, real4
> ifloat2, ifloat3, ifloat4, idouble2, idouble3, idouble4, ireal2, ireal3, 
> ireal4
> cfloat2, cfloat3, cfloat4, cdouble2, cdouble3, cdouble4, creal2, creal3, 
> creal4

I think the arguing makes much sense, but as the proposal adds 57(!) new 
domain specific primitive types to the D language specification, I 
believe it is way too heavy.

For discussion, here is a not very thought out counter proposal:

1. Make the D 2.0 static array pass-by-value instead of it's 
inconsistent and strange pseudo-reference/value type heritage from C. 
(Pass by reference could be retained for extern(C) functions only).

2. Define ABIs for SSE2, SSE3, etc platforms so that small static arrays 
can be allocated and passed in SIMD registers.

3. Implement vector operations for static arrays.

Advantages:

* The code would automatically be platform independent. On a non 
SIMD-able platform, float[4], byte[8], and so on would all be well 
defined and work identically to the way they do on SIMD platforms.

* Future platforms would not require changes to the language 
specification. float[8] could suddenly become SIMD-able for instance.

* Minor changes to the language specification. Mostly ABI changes.

A much worse, but less radical proposal, would be to revive the C 
"register" keyword. Instead of:

float4 x;

you get:

register float[4] x;

/Oskar



More information about the Digitalmars-d mailing list