[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