![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выравнивание 16 байт для SSE
ZSOmega © (2005-10-03 08:21:00)Подскажите как выполнить выравнивание данных по границе 16 байт, для SSE
MBo (2005-10-03 09:25:00) [1]Пардон, ByteSize * 16 - не надо умножать, эта строчка, конечно, должна быть такой:
GetMem(RealPtr, ByteSize + 15);
MBo (2005-10-03 08:52:00) [2]выделить чуть больше места, данные располагать с округленного вверх на 16 байт адреса. Например, такой набросок:
function GetMemPad16(ByteSize: Integer; var RealPtr: Pointer): Pointer;
begin
GetMem(RealPtr, ByteSize * 16 + 15);
Result := Pointer((DWord(RealPtr) + $F) and $FFFFFFF0);
end;
procedure TForm1.Button1Click(Sender: TObject);
type
TDoubleArray = array[Word] of Double;
PDoubleArray = ^TDoubleArray;
var
PData: PDoubleArray;
RealPtr: Pointer;
begin
PData := GetMemPad16(256 * SizeOf(Double), RealPtr);
Memo1.Lines.Add(IntToHex(DWord(RealPtr), 8));
Memo1.Lines.Add(IntToHex(DWord(PData), 8));
//.....PData[0]:=3.14;
FreeMem(RealPtr);
end;