[fpc-devel] State of SSE/AVX intrinsics

J. Gareth Moreton gareth at moreton-family.com
Tue Apr 21 11:24:06 CEST 2020


In that instance, I think it's because TIntArray is not a record type 
(it's essentially a smart pointer) and so RECORDMIN doesn't apply to 
it.  I do agree though that having an 'align' attribute of some kind 
will make life a lot easier since you don't have to play around with 
multiple preprocessor directives that are very hard to get correct.

Gareth aka. Kit

On 21/04/2020 09:29, denisgolovan wrote:
>>  From tests/test/cg/tvectorcall1.pp
>>
>> {$PUSH}
>> {$CODEALIGN RECORDMIN=16}
>> {$PACKRECORDS C}
>> type
>> TM128 = record
>> case Byte of
>> 0: (M128_F32: array[0..3] of Single);
>> 1: (M128_F64: array[0..1] of Double);
>> end;
>> {$POP}
>>
>> (This declaration mimics how __m128 is defined in Microsoft Visual C++)
>>
>> Gareth aka. Kit
> And even this solution does not support dynamic arrays with scalars, right?
>
> {$PUSH}
> {$CODEALIGN RECORDMIN=32}
> {$PACKRECORDS C}
> type
>     TIntArray = array of Integer;
>     {$POP}
>
> var v:TIntArray;
>
> begin
>     SetLength(v,100);
>     Writeln(NativeInt(Pointer(v)) and 31); // writes 16 instead of 0
> end.
>
>
> -- Regards,
> Denis Golovan
>

-- 
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus



More information about the fpc-devel mailing list