Ассемблерная вставка

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ассемблерная вставка

Сообщение Сквозняк » 07.12.2012 15:25:10

При компиляции на платформе Linux x86_64 лазарус ругался на push edi и pop edi. В ассемблере пока :mrgreen: плаваю, поэтому интересует вопрос, работоспособным получился патч или нет.

Код: Выделить всё
procedure FillSmallInt(p : PSmallInt; count : Integer; v : SmallInt); register;
// EAX contains p
// EDX contains count
// ECX contains v
var                //патч
zz : PSmallInt;    //патч
asm
//  push edi       //было
   push zz          //патч
  // mov edi, p   //было
   mov zz, p       //патч
   mov ax, cx     // expand v to 32 bits
   shl eax, 16
   mov ax, cx
   mov ecx, edx   // the "odd" case is handled by issueing a lone stosw
   shr ecx, 1
   test dl, 1
   jz @even_nb
   stosw
   or ecx, ecx
   je @fill_done
@even_nb:
   rep stosd
@fill_done:
//  pop edi       //было
   pop zz          //патч
end;
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Ассемблерная вставка

Сообщение Sergei I. Gorelkin » 07.12.2012 16:07:51

Этот код и до патча был неработоспособен, не столько из-за push edi (его достаточно заменить на push rdi), сколько из-за того, что в x86_64-linux аргументы будут находится в rdi, rsi, rdx, а в x86_64-win64 - в rcx,rdx,r8.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Ассемблерная вставка

Сообщение Сквозняк » 07.12.2012 16:31:12

А её можно без ассемблера переписать, пусть и с потерей скорости?
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Ассемблерная вставка

Сообщение Sergei I. Gorelkin » 07.12.2012 16:58:26

Если я ничего не упускаю из вида, вместо нее можно использовать процедуру FillWord, ничего не переписывая.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Ассемблерная вставка

Сообщение Сквозняк » 07.12.2012 17:19:45

Учитывая, что и с глючащей ассемблерной вставкой бенчмарки GLScene как-то работали, то хуже быть не должно.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 247

Рейтинг@Mail.ru