Very simple SIMD programming

Iain Buclaw ibuclaw at ubuntu.com
Thu Oct 25 03:38:13 PDT 2012


On 25 October 2012 09:36, Manu <turkeyman at gmail.com> wrote:
> On 25 October 2012 02:18, Iain Buclaw <ibuclaw at ubuntu.com> wrote:
>>
>> On 25 October 2012 00:16, Manu <turkeyman at gmail.com> wrote:
>> > On 25 October 2012 02:01, Iain Buclaw <ibuclaw at ubuntu.com> wrote:
>> >>
>> >> On 24 October 2012 23:46, Manu <turkeyman at gmail.com> wrote:
>> >>
>> >> > Let's consider your example above for instance, I would rewrite
>> >> > (given
>> >> > existing syntax):
>> >> >
>> >> > // vector length of context = 1; current_mask = T
>> >> > int4 v = [0,3,4,1];
>> >> > int4 w = 3; // [3,3,3,3] via broadcast
>> >> > uint4 m = maskLess(v, w); // [T,F,F,T] (T == ones, F == zeroes)
>> >> > v += int4(1); // [1,4,5,2]
>> >> >
>> >> > // the if block is trivially rewritten:
>> >> > int4 trueSide = v + int4(2);
>> >> > int4 falseSize = v + int4(3);
>> >> > v = select(m, trueSide, falseSide); // [3,7,8,4]
>> >> >
>> >> >
>> >>
>> >> This should work....
>> >>
>> >> int4 trueSide = v + 2;
>> >> int4 falseSide = v + 3;
>> >
>> >
>> > Probably, just wasn't sure.
>>
>> The idea with vectors is that they support the same operations that D
>> array operations support. :-)
>
>
> I tried to have indexing banned... I presume indexing works? :(

You can't index directly, no.  Only through .array[] property, which
isn't an lvalue.

Regards
-- 
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';


More information about the Digitalmars-d mailing list