12 Kasım 2016 Cumartesi

gcc extension - __builtin_unreachable

Giriş
Bu bir gcc extension. Derleyiciye bir değişkenin sadece belli bir aralıkta olacağını belirtmek için kullanılır.

Şöyle yaparız.
#define assume(cond) do { if (!(cond)) __builtin_unreachable(); } while (0)

int func(int x){
  assume(x >=0 && x <= 10);

    if ( x > 11 ){
      return 2;
    }else{
      return 17;
    }
}
Böylece derleyiciye x'in [0-10] arasında olacağını bildiririz. Yani hep else kısmı çalışacaktır. Bu durumda şu kod üretilir.
func(int):
    mov     eax, 17
    ret

Hiç yorum yok:

Yorum Gönder