タグ

gccに関するxxxxxeeeeeのブックマーク (11)

  • GCCのインラインアセンブラの書き方 for x86 - OSのようなもの

    試行錯誤してインラインアセンブラのチュートリアルが完成した。 やったぞ,なんだか分からないけど俺はやったんだ! GAS構文の概要 まず,GAS のシンタックスについて見ていく。GAS は標準で AT&T 記法を使用しているが,.intel_syntax ディレクティブにより intel 記法を使うこともできる。忌々しい AT&T 記法とはおさらばだ! intel 記法を使うには,アセンブラファイルの先頭に次の行を置く。 .intel_syntax noprefix また,C ファイルから作成される GAS を intel 記法で出力させる(又は,インラインアセンブラで intel 記法を使う場合)には GCC にこんなオプションを加えてやる: gcc -masm=intel ... intel 記法が手に入りテンションが上がってきたところで,さっそく構文の説明を始めることにしよう。一応注意

    GCCのインラインアセンブラの書き方 for x86 - OSのようなもの
    xxxxxeeeee
    xxxxxeeeee 2012/12/31
    gccのinline assembleの方法
  • Jonathan Wakely - Re: Installing with non-standard prefix fails - please help

    xxxxxeeeee
    xxxxxeeeee 2012/10/18
    コンパイル中にgmp, mpfr, mpcが見えていないといけない。LD_LIBRARY_PATH追記かそもそも--disable-sharedでビルドしてstaticリンクがお勧めらしい。rpath埋め込めよ…
  • GCCの組込みアトミック命令の使い方 | Everyday Deadlock

    ちょっと使うことがあったので、備忘録的にGCCの組込みアトミック命令の使い方についてまとめておきます。 前提知識 マルチスレッドプログラムにおいて、共有データを更新する際の定石は spin lock や mutex でデータを保護することです。 これらの道具は多くの場面において十分便利なのですが、例えば共有データが1個の int 変数のみであり、更に高頻度で更新が行われるといった場合にはやや同期のコストが高くついてしまいます。 そのような場合には、アトミック命令を用いることで同期オーバーヘッドを抑えることができます。 アトミック命令とは、複数のスレッドから実行されても、個々の命令が一つ一つ順番に適用されてゆくことが保証されている命令のことです。 (より正確には、個々の命令がとある順番で一つ一つ適用された時と同じ結果を得られることが保証されている命令のことです) 例えば、とある変数 X の値

  • gccのコマンドラインオプションの並び順 - yukke.org Diary

    Objective-Cの勉強をしていて、gccでいざコンパイルと思ったら、リンクの段階でエラーが出るでる。調べてみたら、gccのコマンドラインオプションには順番があって、リンカ(ld)に関するオプションである-lや-Lは、後ろに付ける必要があるとのこと。 どうやらリンカは、オブジェクトファイルのシンボル名解決をするとき、不明なシンボル名があると、「その場所以降」からシンボル名見つけて解決する動作をするからのようです。 ×: $ gcc -o foo -lobjc foo.m ◯: $ gcc -o foo foo.m -lobjc

    gccのコマンドラインオプションの並び順 - yukke.org Diary
  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

    xxxxxeeeee
    xxxxxeeeee 2011/11/22
    gccとVisual C++の違いを吸収する/and, orキーワードとかトライグラフとかびっくり
  • C++ のシンボルをデマングルする - bkブログ

    C++ のシンボルをデマングルする C++ コンパイラはシンボルが一意の名前を持つように名前マングル (name mangling) と呼ばれる処理を行います。記事では GNU の開発環境で C++ のシンボルをデマングル (demangle) する方法を紹介します。 マングルの方法はコンパイラ依存です。同じコンパイラでもバージョンによってマングルの方法が異なることがあります。たとえば GCC 3.x では int foo(int) を _Z3fooi に、 int foo(const char*) を _Z3fooPKc のようにマングルしますが、 GCC 2.95 ではそれぞれ foo__FPCc, foo__Fi となります。 コマンドラインからデマングル C++ のオブジェクトファイルに nm をかけると、デフォルトではマングルされた読みづらい形式でシンボルが出力されます。 %

  • 卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...

    今回のお題は char 幅じゃなくて word 幅の memset 、つまりプロトタイプだと void* memset64(void* destination, uint64_t image, int num_words); をどれだけ高速に行うかという話。なぜ高速化するかというと、塗りつぶす領域がけっこうでかいから。 候補 1: REP STOSvoid* memset64(void* d, uint64_t i, int n) { asm("cld; rep stosq;" :: "D"(d), "a"(i), "c"(n) : "memory"); return d; } 最近の CPU はクソ賢い。そのため、下手に手で loop unrolling するよりも、逆に CPU に「ここはループなんだぞおおお~」というのを明示的に指示してあげたほうが CPU 側が勝手かつ不気味に最適な

    卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...
    xxxxxeeeee
    xxxxxeeeee 2011/08/05
    memsetの速度について
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    xxxxxeeeee
    xxxxxeeeee 2011/08/04
    long longは32bit上で遅い
  • GCC Hacks

    Loading… Flash Player 9 (or above) is needed to view presentations. We have detected that you do not have it on your computer. To install it, go here. GCC Hacks - Presentation Transcript GCC Hacks Open Source Conference 北海道 さっぽろ産業振興センター 産業振興棟 2F ルーム C 16:00 ~ 2008.06.28 ( 土 ) 講師 : 若槻俊宏 (@alohakun) こんにちは こんなニッチな テーマのセミナー に来てくださり ありがとう ございます いきなりで すいませんが ... 一応の想定客層 ( 予告版より ) プログラミング言語 C がそれなりにわかる!

    xxxxxeeeee
    xxxxxeeeee 2011/05/03
    GCCの改造・フロントエンド自作
  • GCC Inline Assembler

    "asm"と"__asm__"は、基的には同じであるが、"__asm__"は使用している言語の予約語/関数等とぶつかる場合使用します。またはANSI C互換のコードをつくっている場合、"asm"キーワードが使用できなくなるので"__asm__"を使います。 /* keyword asm と同じ関数*/ function asm(void){ } /* asmが使用できないので__asm__を使用 */ function inline(){ __asm__("asm code"); }

    xxxxxeeeee
    xxxxxeeeee 2011/01/19
    gccのインラインアセンブラ
  • main() の前に関数を呼ぶ - bkブログ

    main() の前に関数を呼ぶ C/C++ のプログラムで、main() の前に関数を暗黙的に呼びたいときがあります。ここでは GCC の拡張を使った方法と、C++ のコンストラクタを使った方法を紹介したいと思います。 GCC では main() の前に呼ばれる関数を __attribute__((constructor)) という拡張機能を使って定義できます。たとえば、次のプログラムでは main() の前に foo() が呼び出されます。 #include <stdio.h> __attribute__((constructor)) void foo() { printf("hello, before main\n"); } int main (int argc, char **argv) { printf("hello, world\n"); return 0; } 実行結果は以下の

    xxxxxeeeee
    xxxxxeeeee 2011/01/18
    main関数より先に呼ばれるコード
  • 1