Nouzui ага gcc... не violate (http://www.rambler.ru/dict/scripts/go.cgi?btnG=%CD%E0%E9%F2%E8%21&query=violate&where=enru&start=0&count=15) а volatile http://www.rambler.ru/dict/scripts/go.cgi?query=volatile&where=enru выдержка из GCC UG http://gcc.gnu.org/onlinedocs/ Код (Text): ...Note that if all the output operands you specify are for this purpose (and hence unused), you will then also need to specify volatile for the asm construct, as described below, to prevent GCC from deleting the asm statement as unused....
Nouzui Которые идут с текущим компилятором. Vicual C++ - Reference - C/C++ Languages к примеру. Просто с каждой новой версией идут новые фичи, иногда полезно знать и использовать их. Для vc ничего не означает, о gcc не знал даже, что он так самонадеян. Асм-вставки точно нет, а вот с оптимизацией функций, имеющих вставки эти, у оптимизатора иногда начинаются проблемы: либо не хочет, либо не может. Ustus Ты имеешь ввиду VC8? Не знаю, не очень-то он соптимизировал следующее (только заинлайнил ): Код (Text): int foo(int a) { __asm { mov eax,[a] add eax,16 mov [a],eax mov eax,[a] mov [a],eax mov eax,[a] } return a; } /// ; int __cdecl main(int argc,const char **argv,const char *envp) _main proc near ; CODE XREF: ___tmainCRTStartup+15Ap argc = dword ptr 4 mov eax, [esp+argc] mov [esp+argc], eax mov eax, [esp+argc] add eax, 10h mov [esp+argc], eax mov eax, [esp+argc] mov [esp+argc], eax mov eax, [esp+argc] mov eax, [esp+argc] retn _main endp
в смысле? msdn, что ли? в 2003 emit'а нет ну, это не оптимизация.. он вообще вроде может заинлайнить любую функцию, если она меньше определенного размера и еще при каких-то условиях или что-то в этом роде..
IceStudent Про volatile: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.4 При использовании асм-вставок и оптимизации (-O3), у GCC часто сносит крышу (чем старше версия, тем чаще сносит). Поэтому, чтоб не отказываться вообще от оптимизации из-за асм вставок, можно сперва попробовать volatile, а если не поможет - тогда уже отключить оптимизацию.
Quantum А gcc поддерживает управление компилятором из сорцов? Что-то вроде #pragma optimize в vc? Nouzui Ну как это нет? __asm _emit 0xCC The _emit Pseudoinstruction. И у нас проходили.
два подчеркивания - это такой дурацкий стиль M$ =) всякие _emit, _stdcall, _cdecl, _asm и другие ключевые слова обычно используются с одним подчеркиванием..
реальны код из моего древнейшего проджекта: Код (Text): _asm{ jmp short $+5 mov eax, 0310F0000h } это RDTSC