Okay, so I've just begun messing with oprofile, WoW keeps crashing (been a problem since 1.1.2) so I don't have a ton of data yet. Only thing of interest so far is the following: Code: CPU: Core 2, speed 3000 MHz (estimated) Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000 samples % symbol name 81184 59.3533 DSOUND_MixToTemporary 36219 26.4796 convert_16_to_16 5827 4.2601 mix16 5497 4.0188 DSOUND_MixInBuffer 2484 1.8160 DSOUND_timer 1130 0.8261 norm16 789 0.5768 DSOUND_Calc3DBuffer convert_16_to_16 is: Code: static void convert_16_to_16 (const void *src, void *dst) { uint16_t *dest = dst; *dest = *(uint16_t*)src; } I'm not sure I understand why this is needed. Maybe inline it? I'll post more as I discover more.