Size: a a a

pro.graphon (and gamedev)

2020 April 29

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Не смог)
источник

d

disba1ancer in pro.graphon (and gamedev)
Sergey Skvortsov
Не смог)
ну не то чтобы совсем, но не смог
источник

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Ну условный переход на такое — это не смог
источник

d

disba1ancer in pro.graphon (and gamedev)
Sergey Skvortsov
Ну условный переход на такое — это не смог
смысле не смог?
источник

d

disba1ancer in pro.graphon (and gamedev)
там после ифа сразу jae
источник

d

disba1ancer in pro.graphon (and gamedev)
оно указывает за пределы этого фрагмента когда
источник

d

disba1ancer in pro.graphon (and gamedev)
т.е. если нет переноса выходим из этого куска
источник

SS

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

d

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

d

disba1ancer in pro.graphon (and gamedev)
disba1ancer
ну в общем вот:
//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)
@Ioann_V что скажешь?
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
disba1ancer
там после ифа сразу jae
http://faydoc.tripod.com/cpu/jae.htm
это условный джамп и есть, к сожалению, а в чем он плох? -- это шанс конвейер дропнуть, если условие провалится (а оно должно провалиться, иначе бы можно было значение вычислить и не делать условного)
источник

d

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

d

disba1ancer in pro.graphon (and gamedev)
но это действительно не критичный участок кода
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
disba1ancer
а эта штука действительно лучше генерит, но выглядит менее выразительно
классический трейдофф: или читаемость, или экстремальное быстродействие
источник

d

disba1ancer in pro.graphon (and gamedev)
разбираю чисто из интереса
источник

d

disba1ancer in pro.graphon (and gamedev)
Pavel Kazakov
классический трейдофф: или читаемость, или экстремальное быстродействие
мне больше интересно от чего компилятор в таком случае начинает лучше оптимайзить
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
сомневаться в сгенеренном коде хорошо и правильно -- многое можешь запомнить и на практике закрепить) всё ок
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
disba1ancer
мне больше интересно от чего компилятор в таком случае начинает лучше оптимайзить
если тебе хочется упороться, посмотри как выглядит твой код в intermediate representation в LLVM :D и может что-то больше поймешь
источник

d

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

SS

Sergey Skvortsov in pro.graphon (and gamedev)
Можно
источник