Форум: "Media";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Внизвыравнивание 16 байт для SSE Найти похожие ветки
← →
ZSOmega (2005-10-03 08:21) [0]Подскажите как выполнить выравнивание данных по границе 16 байт, для SSE
← →
MBo © (2005-10-03 08:52) [1]выделить чуть больше места, данные располагать с округленного вверх на 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;
← →
MBo © (2005-10-03 09:25) [2]Пардон, ByteSize * 16 - не надо умножать, эта строчка, конечно, должна быть такой:
GetMem(RealPtr, ByteSize + 15);
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.013 c