Войти
ПрограммированиеФорумОбщее

Как преобразовать число к ближайшему максимальному числу степени двойки? (2 стр)

Страницы: 1 2
#15
3:16, 13 авг. 2009

Kloun, если тебя не пугает ассемблер, то вот:

__asm {
 mov eax, val
 dec eax
 mov ecx, -1
 bsr eax, ecx
 inc ecx
 mov res, ecx
 }

#16
8:51, 13 авг. 2009

vigor
по мойму ты чуток ошибся, разве вместо
>bsr eax, ecx
не должно быть
bsr ecx, eax
bsr ведь сканит второй операнд ))

#17
9:22, 13 авг. 2009

vigor
> Ну, если не гнаться за красивостями, то использование asm bsr всяко побыстрее
> будет

интересно, откуда берется вот это "всяко быстрей" у любителей асма?

#18
9:25, 13 авг. 2009

тем более что по приведенной ссылке уже сказано:
(On a Athlon™ XP 2100+ I've found the above shift-left and then OR code is as fast as using a single BSR assembly language instruction, which scans in reverse to find the highest set bit.)

#19
12:44, 13 авг. 2009

vigor
> bsr
эту инструкцию без асм-ставок никак нельзя вызывать???

#20
13:37, 13 авг. 2009

Kloun
>эту инструкцию без асм-ставок никак нельзя вызывать???
можно

#21
14:24, 13 авг. 2009

Конишуа
> можно
Блин.... в 2003ей студии не работает? ((((( нашел данное название - гдето внедрах winnt.h объявляется, но почемуто не работает всеравно - идентифер, говорит, не найден ((

#22
15:16, 13 авг. 2009

Kloun
> Блин.... в 2003ей студии не работает? ((((( нашел данное название - гдето
> внедрах winnt.h объявляется, но почемуто не работает всеравно - идентифер,
> говорит, не найден ((

так там оно реально определено только, если есть дефайн для AMD64. а для IX86 закоментарено ...
попробуй разкоментить, авось прокатит :) или попробуй наисвежайший platform SDK отдельно скачать и поставить.

#23
15:40, 13 авг. 2009

pentagra
> попробуй разкоментить, авось прокатит :) или попробуй наисвежайший platform SDK
> отдельно скачать и поставить.
ради этой фигни не буду заморачиватся ))) всеравно больше проектов на 2003 ей писть врядли буду

#24
17:47, 13 авг. 2009

Smouking
>по мойму ты чуток ошибся
ага, программирование на asm для gcc сказалось : )

Mega

>интересно, откуда берется вот это "всяко быстрей" у любителей асма?

в том коде слишком длинная цепочка зависимостей, которая, взятая отдельно, застопорит работу конвеера и будет выполняться медленнее, чем bsr. С другой стороны, при использовании в реальном коде вполне возможно, что инструкции из этой цепочки распараллелятся с другими командами, и все в итоге будет быстрее.

>тем более что по приведенной ссылке уже сказано:
>(On a Athlon™ XP 2100+ I've found the above shift-left and then OR code is as fast as using a single BSR assembly language >instruction, which scans in reverse to find the highest set bit.)
наверное, здесь как раз такой случай.

#25
21:15, 13 авг. 2009

vigor
> для gcc сказалось : )
а на нём что по другому это преобразуется?
Я просто не работал с тем компилятором, вот и спрашиваю, малоли пригодится. )

#26
0:17, 14 авг. 2009

Smouking

да, там принята другая нотация. Если в msvc

mov eax, ecx

означает "поместить значение регистра ecx в регистр eax", то в gcc

movl %eax, %ecx

означает все с точностью наоборот - "поместить значение регистра eax в регистр ecx". А возможностей ассемблерных вставок в gcc несравнимо больше, чем в msvc.

Попробуй поработать с этим компилятором, может понравится. Я перешел на gcc после того, как слез со студии.

#27
11:02, 14 авг. 2009

сенкс за разъяснение )

Страницы: 1 2
ПрограммированиеФорумОбщее

Тема в архиве.