Size: a a a

pro.graphon (and gamedev)

2020 April 29

d

disba1ancer in pro.graphon (and gamedev)
насколько хорошо может соптимизтроваться такой код?
ovl.Offset += transfered;
if (ovl.Offset < transfered) ++ovl.OffsetHigh;

Поле OffsetHigh располагается сразу за Offset в одной структуре
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
disba1ancer
насколько хорошо может соптимизтроваться такой код?
ovl.Offset += transfered;
if (ovl.Offset < transfered) ++ovl.OffsetHigh;

Поле OffsetHigh располагается сразу за Offset в одной структуре
Ты уверен, что эти две строки стоят твоего времени оптимизации?)
Ты же рядом в файл ходишь
источник

d

disba1ancer in pro.graphon (and gamedev)
Sergey Skvortsov
Ты уверен, что эти две строки стоят твоего времени оптимизации?)
Ты же рядом в файл ходишь
да чисто из интереса
источник

d

disba1ancer in pro.graphon (and gamedev)
но вообще компиль соптимизировал if до простого условного джампа
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Ну они тупят тут
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
disba1ancer
но вообще компиль соптимизировал if до простого условного джампа
это как? lea, а потом jmp?
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Но не надо это оптимизировать пока не видишь хоть сколько-то в профайлере, вредно для твоего проекта
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Но в целом
ovl.OffsetHigh += (ovl.Offset < transfered);
лучше генерит код
источник

d

disba1ancer in pro.graphon (and gamedev)
Pavel Kazakov
это как? lea, а потом jmp?
джамп по переносу
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
если там cmp с вариациями, то это просто if и есть
источник

d

disba1ancer in pro.graphon (and gamedev)
Pavel Kazakov
если там cmp с вариациями, то это просто if и есть
там нет cmp
источник

d

disba1ancer in pro.graphon (and gamedev)
проверяется перенос предыдущего add
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
Sergey Skvortsov
Но не надо это оптимизировать пока не видишь хоть сколько-то в профайлере, вредно для твоего проекта
вот тут соглашусь)
источник

d

disba1ancer in pro.graphon (and gamedev)
ну в общем вот:
//ovl.Offset += transfered;
mov    %eax,%edx
add    0x10(%rbx),%edx
mov    %edx,0x10(%rbx)
//if (ovl.Offset < transfered) ++ovl.OffsetHigh;
jae    c24 <_ZN3dse2os2io14IOTarget_win324readEPcy+0x44>
addl   $0x1,0x14(%rbx)
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Sergey Skvortsov
Но в целом
ovl.OffsetHigh += (ovl.Offset < transfered);
лучше генерит код
.
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Сделай так, там add + adc, это выглядит максимально адекватно
источник

d

disba1ancer in pro.graphon (and gamedev)
Sergey Skvortsov
Сделай так, там add + adc, это выглядит максимально адекватно
да, но тут можно вообще оба offset поля расценивать как одно большое 64битное целое и делать соответствующие действия, но, возможно, компилятор это видит и считает что это учитывать не нужно
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Не видит, они тупят что-то (даже с правильным выравниванием)
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Но забей, иди логику пиши, это не стоит того
источник

d

disba1ancer in pro.graphon (and gamedev)
Sergey Skvortsov
Но забей, иди логику пиши, это не стоит того
мне просто интересно было, сможет компиль здесь или нет, вручную править я, разумеется, ничего не буду
источник