Wymuszenie NOP

0

Pytanie z czystej ciekawości, edukacyjne :)

Czy jest możliwość wymuszenia na kompilatorze aby w określonym miejscu wstawił asmowe NOPy bez używania wstawek __asm?
Np.:

void func( uint32_t var ) {
  std::puts( "Loop..." );
  // 4xNOP
  for ( uint32_t i = 0; i < var; ++i ) {
    // coś tam coś tam
  }
}
0

Czyli bez wstawek assemblerowych nie ma możliwości? Jak rozumiem wszelkie optymalizacje nie gmerają w __asm { ... } ?

1

Na optymalizacje nie ma ogólnego standardu - więc nigdy nie wiesz jaki szlag cię trafi. ;)

0

Czy jest możliwość wymuszenia na kompilatorze aby w określonym miejscu wstawił asmowe NOPy bez używania wstawek __asm?

Nie.
Po co?

0

Poszukaj źródeł BogoMips.

0

A po co ci tam te NOPy?
Do optymalizacji możesz użyć intrinsicsów.

4
Proxima napisał(a):

A po co ci tam te NOPy?
Do optymalizacji możesz użyć intrinsicsów.

O! to jest dobry trop.
Ale trzeba pamiętać, że są specyficzne dla architektury i dla kompilatora.

// Windows, Visual C++

#include <intrin.h>

int main()
{
  __nop();
}

Ale nadal nie widzę zastosowania ;)

0

Gdzieś czytałem, że może zadziałać średnik. Możesz spróbować i zobaczyć co się stanie. Np:

 
int main()
{
  cout << "Hello";
  ; //tu może się pojawić NOP
  return 0;
}
0

Gdyby nie fakt, że zapomniałem się zalogować przy zakładaniu tematu to zaptaszkowałbym post Azariena. Intrinsic'i dają rade, nawet na Release. Chociaż jakiś tam alignment jest, bo kompilator od MS obcina NOPy tak, aby kolejna instrukcja była pod parzystym adresem. Ale nie zagłębiałem się bardziej bo w sumie to mi to na plaster potrzebne :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1