- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
#ifdef _WIN32
#define BEGIN_ASM
#define END_ASM
#define _DB(a) __asm _emit a
#define _STR(a) a
#else
#define BEGIN_ASM asm (
#define END_ASM );
#define _DB(a) ".byte "#a";"
#define _STR(a) a" \n\t"
#endif
#define PARAMETERS_ESP_VOID_VOID_VOID BEGIN_ASM _STR(_DB(0x8B) _DB(0x44) _DB(0x24) _DB(0x04)) _STR(_DB(0x8B) _DB(0x54) _DB(0x24) _DB(0x08)) \
_STR(_DB(0x8B) _DB(0x4C) _DB(0x24) _DB(0x0C)) END_ASM
#define SAVE_3_PARAMETERS BEGIN_ASM _STR(_DB(0x89) _DB(0x44) _DB(0x24) _DB(0xE4)) _STR(_DB(0x89) _DB(0x54) _DB(0x24) _DB(0xEC)) \
_STR(_DB(0x89) _DB(0x4C) _DB(0x24) _DB(0xE8)) END_ASM
#define LOAD_3_PARAMETERS BEGIN_ASM _STR(_DB(0x8B) _DB(0x44) _DB(0x24) _DB(0xE4)) _STR(_DB(0x8B) _DB(0x54) _DB(0x24) _DB(0xEC)) \
_STR(_DB(0x8B) _DB(0x4C) _DB(0x24) _DB(0xE8)) END_ASM
int rdtc()
{
_asm RDTSC
}
#pragma optimize( "gtp", on )
#define VECTORP2DADDFPU \
BEGIN_ASM \
_STR(_DB(0xD9) _DB(0x00)) \
_STR(_DB(0xD8) _DB(0x02)) \
_STR(_DB(0xD9) _DB(0x19)) \
_STR(_DB(0xD9) _DB(0x40) _DB(0x04)) \
_STR(_DB(0xD8) _DB(0x42) _DB(0x04)) \
_STR(_DB(0xD9) _DB(0x59) _DB(0x04)) \
END_ASM
void __stdcall __VectorP2DAddFPU() {
VECTORP2DADDFPU;
}
// для даной функции компилятор сам зделает так чтобы использовались другие регистры процессора в место eax edx ecx и сохранения не понадобится
#define Vector2DAdd(x,y,z) _asm lea eax,x _asm lea edx,y _asm lea ecx,z _asm call __VectorP2DAddFPU;
void __stdcall _VectorP2DAddFPU(void *,void *,void *) {
// сохранение в данном случае вызывается в ручную так как сам компилятор этого не зделает что приведет к не предвиденниму результату или к подению
SAVE_3_PARAMETERS;
PARAMETERS_ESP_VOID_VOID_VOID;
VECTORP2DADDFPU;
LOAD_3_PARAMETERS;
}
CPPGovno 18.09.2011 11:51 # +2
TheHamstertamer 18.09.2011 13:12 # +9
CPPGovno 18.09.2011 13:20 # +1
3.14159265 18.09.2011 14:10 # +9
CPPGovno 18.09.2011 18:24 # +1
rat4 18.09.2011 15:10 # +3
TheHamstertamer 18.09.2011 15:42 # 0
Lure Of Chaos 18.09.2011 16:10 # +1
TheHamstertamer 18.09.2011 16:30 # +5
guest 20.09.2011 00:10 # 0
CPPGovno 20.09.2011 05:57 # +1
TarasB 18.09.2011 16:29 # +2
Ну специфика у игростроя такая, байтоёбская, что поделаешь...
AxisPod 19.09.2011 07:40 # +7
3.14159265 19.09.2011 08:46 # +2
CPPGovno 19.09.2011 09:33 # +1
Teddy_Brown 19.09.2011 16:47 # −4
CPPGovno 19.09.2011 23:17 # +2
>я вроде вкурсе этого, но тем неменее люблю факты, а пока ковырялся в асме скармливая его компилятору натыкаюсь на всякого рода противоречия, в основном они косаются не оптимизированного кода, после чего я скармливаю этот код оптимизатору, который выдает мне уже машшиный код, который я вставляю макросами без всяких директив оптимизации, после чего разница между кодом который написал я в макросе и тем который создает компилятор, неповериш, исчезает.
CPPGovno 20.09.2011 05:57 # +1
C_Plus_Plus_Govno 20.09.2011 16:32 # +3
CKrestKrestGovno 20.09.2011 16:33 # 0