//Предпологаю что A и B не выравняны никак и являються 8-ми байтными областями памяти //Т.к. непомню calling conversion x86 пишу под х64: //[RCX] - адрес А; [RDX] - адрес B; [RAX] - Result (нижние 32 бита) Function Dist(Const A, B: Int32_Vec2): Int32; Assembler; NoStackFrame; Asm CVTDQ2PD XMM0, [RCX] CVTDQ2PD XMM1, [RDX] SUBPD XMM0, XMM1 //DPPD XMM0, XMM0, 000110001b //Заменим на то что ниже (а вот теперь уже достаточно SSE2) MULPD XMM0, XMM0 MOVAPD XMM1, XMM0 UNPCKHPD XMM1, XMM1 ADDSD XMM0, XMM1 SQRTSD XMM0, XMM0 CVTSD2SI EAX, XMM0 End;
Bishop
> выравняны
конечно, весь пост заслуживает внимания с точки зрения альтернативного взгляда на грамматику, но это слово особенно доставило
извини, ТС, по сабжу сказать нечего
Suslik
Я писал это с больной головой еще и ночью, потом копировал пост просто. Думаю суть кода понятна несмотря на грамм-ошибки
я бы табличку завел
rAmpArk
> я бы табличку завел
Четырехмерную?
Iskander
> Четырехмерную?
И с логарифмической шкалой, чтобы один поиск индекса занимал больше, чем вся моя функция 12угольника.
Bishop
SSE-вариант по скорости заметно (раза в 2) сливает приближённым, использующим чисто целочисленные возможности чистого ЦПУ.
Мне кажется, что просто разыменование указателя сильно его тормозит.
Тема в архиве.