Найдено 130 результатов
- 24.10.2022 12:37:52
- Форум: Free Pascal Compiler
- Тема: Ошибка в генерации ассембленого кода?
- Ответы: 7
- Просмотры: 6422
- 20.10.2022 09:35:19
- Форум: Free Pascal Compiler
- Тема: Ошибка в генерации ассембленого кода?
- Ответы: 7
- Просмотры: 6422
Re: Ошибка в генерации ассембленого кода?
Я об этом и говорю... Просто я был по началу уверен, что это сам что-то глобально в ассемблере не знаю..iskander писал(а):Очень похоже на глюк компилятора.
- 20.10.2022 07:22:51
- Форум: Free Pascal Compiler
- Тема: Ошибка в генерации ассембленого кода?
- Ответы: 7
- Просмотры: 6422
Re: Ошибка в генерации ассембленого кода?
Наверно нужен хоть какой-то компилируемый кусочек кода.
Выше как раз и есть уже скомпилированный кусок кода. так фрс интерпретирует вообще в любом месте именно эту, с другими все нормально, команду косвенной адресации...
К примеру...
program project1; //x32
{$mode objfpc}{$H+}
uses {$IFDEF UNIX ...
Выше как раз и есть уже скомпилированный кусок кода. так фрс интерпретирует вообще в любом месте именно эту, с другими все нормально, команду косвенной адресации...
К примеру...
program project1; //x32
{$mode objfpc}{$H+}
uses {$IFDEF UNIX ...
- 19.10.2022 07:26:13
- Форум: Free Pascal Compiler
- Тема: Ошибка в генерации ассембленого кода?
- Ответы: 7
- Просмотры: 6422
Ошибка в генерации ассембленого кода?
; [326] AND Len,3
%LINE 326+0
and eax,3
; [327] JZ @Exit
%LINE 327+0
jz ..@j44_1
..@j45_1:
; [329] MOVD XMM0, [P1+EAX*4]
%LINE 329+0
movd xmm0,[edx+eax*4]
; [330] MOVD XMM0, [P1+Len*4]
%LINE 330+0
movd xmm0,[eax+edx*4]
То есть MOVD XMM0, [P1+EAX*4] <> MOVD XMM0, [P1+Len*4] , хотя это ...
%LINE 326+0
and eax,3
; [327] JZ @Exit
%LINE 327+0
jz ..@j44_1
..@j45_1:
; [329] MOVD XMM0, [P1+EAX*4]
%LINE 329+0
movd xmm0,[edx+eax*4]
; [330] MOVD XMM0, [P1+Len*4]
%LINE 330+0
movd xmm0,[eax+edx*4]
То есть MOVD XMM0, [P1+EAX*4] <> MOVD XMM0, [P1+Len*4] , хотя это ...
- 04.10.2022 12:37:14
- Форум: Free Pascal Compiler
- Тема: О производительности ассемблерных вставок...
- Ответы: 16
- Просмотры: 11967
Re: О производительности ассемблерных вставок...
И при этом код ниже все равно быстрее на длину shortstring и цикл в 5000000
На моей машине
Swap1: 905
Swap2: 873
for i := 0 to 5000000 do Data.Swap1(sizeof(shortstring),sh1,sh2);875
for i := 0 to 5000000 do Data.Swap2(sizeof(shortstring),sh1,sh2);844
Ассемблер все таки победил! Ура. Мир ...
На моей машине
Swap1: 905
Swap2: 873
for i := 0 to 5000000 do Data.Swap1(sizeof(shortstring),sh1,sh2);875
for i := 0 to 5000000 do Data.Swap2(sizeof(shortstring),sh1,sh2);844
Ассемблер все таки победил! Ура. Мир ...
- 04.10.2022 11:21:17
- Форум: Free Pascal Compiler
- Тема: О производительности ассемблерных вставок...
- Ответы: 16
- Просмотры: 11967
Re: О производительности ассемблерных вставок...
Результаты 5000000 прогонов на sizeof(shortstring) байт
то.
Добавлено спустя 16 часов 29 минут 57 секунд:
Хех, совсем забыл, что согласно Windows x64 ABI, RBX не относится к изменяемым регистрам. Забавно, что оно при этом не падало.
В итоге Swap3 должна выглядеть как-то так:
При том то вы ...
то.
Добавлено спустя 16 часов 29 минут 57 секунд:
Хех, совсем забыл, что согласно Windows x64 ABI, RBX не относится к изменяемым регистрам. Забавно, что оно при этом не падало.
В итоге Swap3 должна выглядеть как-то так:
При том то вы ...
- 03.10.2022 10:47:20
- Форум: Free Pascal Compiler
- Тема: О производительности ассемблерных вставок...
- Ответы: 16
- Просмотры: 11967
Re: О производительности ассемблерных вставок...
ассемблеровский код медленнее. В - значит "внимательность" )Alex2013 писал(а):??? Народ не понял в чем прикол!![]()
В начале топикастер как-то странно удивляется, что ассемблеровский код быстрее.
- 03.10.2022 00:51:29
- Форум: Free Pascal Compiler
- Тема: О производительности ассемблерных вставок...
- Ответы: 16
- Просмотры: 11967
О производительности ассемблерных вставок...
Задача : побайтовый обмен в массиве, квадратно-гнездовым способом.... Да, я знаю и использую avx, и да, он быстрее, но это не о нем...
procedure Swap1(Len: ptrUInt; P1, P2: Pointer); nostackframe; inline;
assembler;
asm
DEC RCX
@L:
MOV AL,[RDX+RCX]
MOV BL,[R8+RCX]
MOV [RDX+RCX],BL
MOV [R8 ...
procedure Swap1(Len: ptrUInt; P1, P2: Pointer); nostackframe; inline;
assembler;
asm
DEC RCX
@L:
MOV AL,[RDX+RCX]
MOV BL,[R8+RCX]
MOV [RDX+RCX],BL
MOV [R8 ...
- 01.10.2022 16:57:08
- Форум: Free Pascal Compiler
- Тема: Параметрические макросы...
- Ответы: 2
- Просмотры: 3531
Параметрические макросы...
Изучал код компилятора и нашел вот такое в trees.pas...
macro put_short(s, w)
begin
{put_byte(s, (byte)((w) & 0xff));}
s.pending_buf^[s.pending] := byte((w) and $ff);
inc(s.pending);
{put_byte(s, (byte)((word)(w) >> 8));}
s.pending_buf^[s.pending] := byte(word(w) shr 8);;
inc(s.pending ...
macro put_short(s, w)
begin
{put_byte(s, (byte)((w) & 0xff));}
s.pending_buf^[s.pending] := byte((w) and $ff);
inc(s.pending);
{put_byte(s, (byte)((word)(w) >> 8));}
s.pending_buf^[s.pending] := byte(word(w) shr 8);;
inc(s.pending ...
- 28.09.2022 18:16:23
- Форум: Free Pascal Compiler
- Тема: Ка правильно написать энумератор по записи...
- Ответы: 7
- Просмотры: 6180
Re: Ка правильно написать энумератор по записи...
Согласен, стало гораздо лучше, но почему энумератор непременно должен быть вложенной структурой?
Все очень просто.
Из-за ошибки в FPC, которую никак не правят уже почти год, использование в записи Initialize/Finalize и энумератора просто невозможно одновременно ибо энумератор тоже вызывает ...
Все очень просто.
Из-за ошибки в FPC, которую никак не правят уже почти год, использование в записи Initialize/Finalize и энумератора просто невозможно одновременно ибо энумератор тоже вызывает ...
- 28.09.2022 17:29:59
- Форум: Free Pascal Compiler
- Тема: Ка правильно написать энумератор по записи...
- Ответы: 7
- Просмотры: 6180
Re: Ка правильно написать энумератор по записи...
...
Рабочий вариант....
Воля ваша, конечно, но на всякий случай гляньте вот на этот баг .
Правится вложенной структурой в записи.
То есть примерно так.. это для энумератора по адресу...
TDyn = record
.......
procedure Z; inline;
procedure Done;
class operator Initialize(var aRec: TDyn ...
Рабочий вариант....
Воля ваша, конечно, но на всякий случай гляньте вот на этот баг .
Правится вложенной структурой в записи.
То есть примерно так.. это для энумератора по адресу...
TDyn = record
.......
procedure Z; inline;
procedure Done;
class operator Initialize(var aRec: TDyn ...
- 25.09.2022 08:05:09
- Форум: Free Pascal Compiler
- Тема: Ка правильно написать энумератор по записи...
- Ответы: 7
- Просмотры: 6180
Re: Ка правильно написать энумератор по записи...
Как минимум ваш первых вариант компилируется до конца, но все равно хрень полная.
Как выяснилось в function TDyn.MoveNext: boolean; не определены (там мусор) любые переменные, TDyn.... Как это - я вот прямо сейчас в шоке. Такое чувство, что при этом неявно создается ещё один экземпляр записи..... Не ...
Как выяснилось в function TDyn.MoveNext: boolean; не определены (там мусор) любые переменные, TDyn.... Как это - я вот прямо сейчас в шоке. Такое чувство, что при этом неявно создается ещё один экземпляр записи..... Не ...
- 24.09.2022 10:48:32
- Форум: Free Pascal Compiler
- Тема: Ка правильно написать энумератор по записи...
- Ответы: 7
- Просмотры: 6180
Ка правильно написать энумератор по записи...
Написал для цикла нечто следующее и оно компилируется...
TDyn = record
FCurrent: sizeInt;
...........
class operator Initialize(var aRec: TDyn);
class operator Finalize(var aRec: TDyn);
function MoveNext: boolean; inline;
property Current: sizeInt read FCurrent;
class operator enumerator(i ...
TDyn = record
FCurrent: sizeInt;
...........
class operator Initialize(var aRec: TDyn);
class operator Finalize(var aRec: TDyn);
function MoveNext: boolean; inline;
property Current: sizeInt read FCurrent;
class operator enumerator(i ...
- 08.09.2022 12:09:16
- Форум: Free Pascal Compiler
- Тема: О производительности динамических массивов...
- Ответы: 38
- Просмотры: 24513
Re: О производительности динамических массивов...
попробуйте проверить это предположение для строк, например.
зачем проверять если из определения и для них не надо...
Pchar - нулевой маркер часть самой строки.
Для всех остальных длина строки явно указывается в начале строки и все что лишнее отбрасывается при приведении типа...
Так что вообще ...
зачем проверять если из определения и для них не надо...
Pchar - нулевой маркер часть самой строки.
Для всех остальных длина строки явно указывается в начале строки и все что лишнее отбрасывается при приведении типа...
Так что вообще ...
- 07.09.2022 15:25:50
- Форум: Free Pascal Compiler
- Тема: О производительности динамических массивов...
- Ответы: 38
- Просмотры: 24513
Re: О производительности динамических массивов...
GetMem не вызываете FillCha
А зачем? Сначала обнулять, и только потом заполнять данными - бессмысленная и по моему ненужная вещь. Поэтому я выше и написал что " перераспределения памяти у массива медленнее"
Если чисто распределение памяти для данных, как в первом тесте показано - так вообще GetMem ...
А зачем? Сначала обнулять, и только потом заполнять данными - бессмысленная и по моему ненужная вещь. Поэтому я выше и написал что " перераспределения памяти у массива медленнее"
Если чисто распределение памяти для данных, как в первом тесте показано - так вообще GetMem ...
