私はどのようにrun the gcc preprocessorを知っています。 GCCは明らかにコードの静的解析/最適化を実行します。 2つの定数を追加するか、定数をシフトすると、 "a = constant < <"のままにするか、その操作を手動で実行してコードに "a = shifted_constant"を設定しても、結果のアセンブリコードは同じになります。 SHA256コードからこのスライスを考えるとGCCプリプロセッサPLUS静的解析?
、
A=0x6a09e667;
B=0xbb67ae85;
C=0x3c6ef372;
D=0xa54ff53a;
E=0x510e527f;
F=0x9b05688c;
G=0x1f83d9ab;
H=0x5be0cd19;
P(A, B, C, D, E, F, G, H, W[ 0], 0x428a2f98);
のgcc -Eを実行した後、私はマクロのネストされたマクロであるP-ラインについて
{ tmp = ((((E) >> (6)) | ((E) << (32-(6))))^(((E) >> (11))
| ((E) << (32-(11))))^(((E) >> (25)) | ((E) << (32-(25)))))
+ (G^(E & (F^G))) + 0x428a2f98 + W[ 0]; D += (tmp + H);
H += tmp + ((((A) >> (2)) | ((A) << (32-(2))))^(((A) >> (13))
| ((A) << (32-(13))))^(((A) >> (22)) | ((A) << (32-(22)))))
+ ((A & B) | (C & (A | B))); };
を取得します。だから、
うれしいですが、私は、定数が交換されているより多くの消化の結果を、持っていると思い、一定の算術演算が実行されているなど 私が代わりにこのような上記の何かを得た場合:
{ tmp = hex_constant1 + W[0]; D += (tmp + 0x5be0cd19); H += tmp + hex_constant2; };
それは私の好みよりはるかに重要です。表現を手動で計算するのは辛抱強くはありませんでしたが、基本的には2つの16進定数に変換する必要があります。
これを実行するためのツール/コマンドラインオプションはありますか?
プリプロセッサとコンパイラを混在させていませんか?プリプロセッサは、 'defined'(そして' includes'や他のマクロ)を置き換えるだけで、何らかの最適化を実行しません。それがコンパイラの仕事です。 – UnholySheep