169 похожих чатов

Function ExpMinus1(const X: Double): Double; type m128 = record

Hi, Lo : UInt64
end align 16;
const
CExp : array[3..6] of UInt64 =
( $3fc5555555554855, $3fa5555555553b54,
$3f811112b12b282f, $3f56c16e86e89028 );
C64 : Double = 64.0;
C1of2 : Double= 1/2;
C1of64 : Double = 1/64;
CLogEof2 : UInt64= $3fe62e42fefa39ef; // Ln(2);
CZero : Double = 0.0;
C1 : Double = 1.0;
CSignBitPD: m128 = (Hi:$8000000000000000; Lo:$8000000000000000);
asm
.PARAMS 1
.SAVENV XMM6
.SAVENV XMM7

MOVSD [RBP+050H],XMM0
MOVZX EAX, WORD PTR [RBP+056H]

MOVAPD XMM2, CSignBitPD
MOVAPS XMM4, XMM2
XORPD XMM5, XMM5 // Zero
MOVAPS XMM6, XMM0
ANDNPD XMM2, XMM0 // Abs(X) : XMM2 := (Not XMM2) and XMM0

UCOMISD xmm0, xmm5 // 0.0
JPE @@01
JZ @@Zero

@@01:
AND EAX, 07FF0H // Is X Denormal ?
JZ @@Exit
CMP AX, 07FF0H
JE @@UseEXP
COMISD XMM2, CLogEof2
JC @@ExpMinusOne

@@UseEXP:
MOVSD XMM7, C1
CALL Exp
SUBSD XMM0, XMM7
JMP @@Exit

@@Zero:
MOVAPS XMM0, XMM5 // 0.0
JMP @@Exit

@@ExpMinusOne:
ANDPD XMM4, XMM6 // XMM4 has sign bit.

MOVSD XMM7, C1of2
ORPD XMM7, XMM4

MULSD XMM6, C64
ADDSD XMM6, XMM7
CVTTSD2SI EAX, XMM6

LEA RDX, [CExp]
CVTSI2SD XMM7, EAX
MOVSXD RAX, EAX
ADD RAX, RAX
LEA RCX, [ExpM1Iof64 + 400H]
LEA RCX, [RCX + RAX * 8]

MULSD XMM7, C1of64
MOVSD XMM4, QWORD PTR [rdx]
MOVSD XMM5, QWORD PTR [rdx + 08H]
SUBSD XMM0, XMM7
MOVAPS XMM1, XMM0
MULSD XMM0, XMM0
MOVSD XMM6, QWORD PTR [rdx + 10H]
MOVSD XMM7, QWORD PTR [rdx + 18H]
MOVSD XMM2,[C1of2]

MULSD XMM7, XMM0
MULSD XMM6, XMM0
ADDSD XMM7, XMM5
ADDSD XMM6, XMM4

MOVSD XMM3, [RCX]
MOVSD xmm5, [RCX+08h]

MULSD XMM7, XMM0
MULSD XMM6, XMM1
ADDSD XMM7, XMM6
ADDSD XMM7, XMM2
MULSD XMM7, XMM0

ADDSD XMM5, XMM7
MOVAPS XMM2, XMM1
ADDSD XMM2, XMM7
MOVAPS XMM0, XMM3
MULSD XMM0, XMM2
ADDSD XMM0, XMM5
ADDSD XMM0, XMM1
ADDSD XMM0, XMM3
@@Exit:
end;

4 ответов

5 просмотров
Handatros- Автор вопроса

что-то вы меня путаете, господа :) MULSD — Multiply Scalar Double-Precision Floating-Point Value

Handatros
что-то вы меня путаете, господа :) MULSD — Multip...

SSE-операции используются для обслуживания младшего числа: Single или Double. SIMD - когда ты обрабатываешь несколько значений.

Dmitry Mozulyov
SSE-операции используются для обслуживания младшег...

Ну ты уж SSE совсем от SIMD не отделяй. Есть векторные SSE операции, есть скалярные.

Eugene Krasnikov (ᴊɪɴ x)
Ну ты уж SSE совсем от SIMD не отделяй. Есть векто...

Если векторную операцию применить над регистром, который вычитал одно значение, а результат сохранился тоже в одно значение - не всё ли равно: векторная операция или скалярная? Это детали.

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
TCodePointer = record cp: CodePointer; name: string; cnt: Integer; next: TCodePointerArray; // этот тип ещё неизвестен end; TCodePointerArray = array of ...
notme
9
Привет ) есть такой кусок кода, он считывает ini файл. my $conf = Config::IniFiles->new( -file => $ini_file ); if (!$conf) { $self->my_die('cannot_read_cfg', ...
Kolya lastname
7
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
13
здравствуйте, братья, кто-нибудь знает, как работать с Swift.com или Swift.net?
Ozzy
6
why html and css is not standard? i mean why different browser has their own engine and styles and how them work to show result to end user?
Mr Thieves
5
Ну тогда у меня вопрос... ) А вот в Delphi 7, к примеру, это что не решаемая задача была бы? (дженериков то ещё нету) Эта: https://t.me/Delphi_Lazarus/319568
notme
5
@wit01d How are you? What are you studying these days, curious man ?
Sahand 🏔️
6
Карта сайта