Size: a a a

pro.graphon (and gamedev)

2020 April 29

SS

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

I

Ioann_V 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)
а чо тут? Что с чем сравнивается?
источник

d

disba1ancer in pro.graphon (and gamedev)
Ioann_V
а чо тут? Что с чем сравнивается?
увеличение оффсета на переменную transfered, оффсет состоит из двух полей в одной структура расположенных друг за другом Offset и OffsetHigh
источник

d

disba1ancer in pro.graphon (and gamedev)
все три — DWORD
источник

I

Ioann_V in pro.graphon (and gamedev)
Так, а в чем оптимизон должен быть? Ну в общем, я не смотрел кейс, но ты закинь мне все чо есть к этому куску
источник

I

Ioann_V in pro.graphon (and gamedev)
я скажу, как лучше
источник

d

disba1ancer in pro.graphon (and gamedev)
Ioann_V
Так, а в чем оптимизон должен быть? Ну в общем, я не смотрел кейс, но ты закинь мне все чо есть к этому куску
в том что Offset и OffsetHigh можно трактовать как одну большую переменную и просто прибавить к ней transfered
источник

I

Ioann_V in pro.graphon (and gamedev)
disba1ancer
в том что Offset и OffsetHigh можно трактовать как одну большую переменную и просто прибавить к ней transfered
ну, это верно
источник

I

Ioann_V in pro.graphon (and gamedev)
так и нужно
источник

d

disba1ancer in pro.graphon (and gamedev)
но у меня компилятор максимум смог вот в это:
//ovl.Offset += transfered;
mov    %eax,%edx
add    0x10(%rbx),%edx
//ovl.OffsetHigh += (ovl.Offset < transfered);
adcl   $0x0,0x14(%rbx)
//ovl.Offset += transfered; это инструкция что в начале
mov    %edx,0x10(%rbx)
источник

d

disba1ancer in pro.graphon (and gamedev)
источник

I

Ioann_V in pro.graphon (and gamedev)
disba1ancer
но у меня компилятор максимум смог вот в это:
//ovl.Offset += transfered;
mov    %eax,%edx
add    0x10(%rbx),%edx
//ovl.OffsetHigh += (ovl.Offset < transfered);
adcl   $0x0,0x14(%rbx)
//ovl.Offset += transfered; это инструкция что в начале
mov    %edx,0x10(%rbx)
а size of DWORD == 4?
источник

d

disba1ancer in pro.graphon (and gamedev)
Ioann_V
а size of DWORD == 4?
да
источник

I

Ioann_V in pro.graphon (and gamedev)
ну, неправильно смог, точнее не оптимизированно смог
источник

I

Ioann_V in pro.graphon (and gamedev)
а компиль то какой? msvc?
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
Ioann_V
а size of DWORD == 4?
там еще дальше есть qword и double-quad (xmm регистры) :) так что есть куда переполняться
источник

I

Ioann_V in pro.graphon (and gamedev)
сборка 64?
источник

d

disba1ancer in pro.graphon (and gamedev)
Ioann_V
а компиль то какой? msvc?
gcc
источник

d

disba1ancer in pro.graphon (and gamedev)
Ioann_V
сборка 64?
да
источник

I

Ioann_V in pro.graphon (and gamedev)
Можешь тоже самое на годболте проделать?
источник