(意図したとおり)さまざまなアーキテクチャ用に生成されたオペコードの違いを確認できるスクリプトがあります(特にx86と x86_64の x87 命令に関心があります)。
#!/usr/bin/env bash
cat - <<__EOF> a.cpp
int main()
{
double const x(1.0);
asm volatile ("fldl (%0)" : : "a" (&x));
return 0;
}
__EOF
EXEC_STR='g++ a.cpp -c -O0 -o /dev/null -m${BITNESS} -mfpmath=387 -Wa,-adhlns="${BITNESS}.lst"'
FILTER_STR='awk "/\/APP/, /\/NO_APP/" ${BITNESS}.lst | cut -f 2- > ${BITNESS}_.lst'
BITNESS=32 bash -c "${EXEC_STR} && ${FILTER_STR}"
BITNESS=64 bash -c "${EXEC_STR} && ${FILTER_STR}"
diff -w -B 32_.lst 64_.lst
出力:
3c3
< fldl (%eax)
---
> fldl (%rax)
ただしcut -f 2-
、最初の列を切り取るだけでなく、オペコードを含む列も切り取ります (これは望ましくありません)。
目的の結果を得る他の方法はありますか? そして、テキストを除外する方法は?