タグ

アセンブラに関するmoozのブックマーク (13)

  • 卜部昌平のあまり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 幅の...
  • TCC とか x86-64 とかの話 - 兼雑記

    を会社でしたのでそのスライドを置いておきます。 http://shinh.skr.jp/slide/tcc64/000.html いつかこういうのまとめたいなあと思っていたのですが、特に後半とか色々グダグダになったり、記憶が消し飛んでて何に苦労したか忘れていたりと、まぁ色々適当になってしまって残念です。 脳なんて揮発メモリなんだから、なんかやったら記録残すってのは大事だなあという。

    TCC とか x86-64 とかの話 - 兼雑記
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

    Code Archive Skip to content Google About Google Privacy Terms

  • Xbyak - x86 JIT assembler -

    Xbyak - x86, x64 JIT assembler - .frame(English) .frame(x86の究極の最適化手法?) Xbyak(カイビャック)はx86(IA32), x64(AMD64, x86-64)のマシン語命令を生成するC++のクラスライブラリです. プログラム実行時に動的にアセンブルすることが可能なため, 柔軟な最適化(動的コード生成)が可能となります(利用シーン:量子化の高速化, 式の計算). 暗号ライブラリに使って高速な実装をしてみた(very fast etaT pairing for Core 2 Duo) ヘッダファイルオンリー xbyak.hをインクルードするだけですぐ利用することができます(32bit, 64bit両対応). Windows Xp(32bit, 64bit), Vista/Linux(32bit, 64bit)/Intel

    mooz
    mooz 2010/09/07
    "Xbyak(カイビャック)はx86(IA32), x64(AMD64, x86-64)のマシン語命令を生成するC++のクラスライブラリです. プログラム実行時に動的にアセンブルすることが可能なため, 柔軟な最適化(動的コード生成)が可能となります"
  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

    mooz
    mooz 2010/05/04
    素晴らしく力が入っており分かりやすい.
  • oklab -

    最近ではコンピューター、ウェブ、モバイルでゲームを楽しめるようになりました。これらのゲームプログラミングについて学びましょう。 ゲームプログラミングの特徴 ゲームプログラミングは比較的新しいジャンルです。 ゲーム開発に使用される言語は、C#、C++JavaScriptSwiftRubyです。ゲームでは通常のアプリケーションと異なり複雑なビジュアルを操作するパフォーマンスと速度が要求されますので、プログラム言語もそれに特化している言語がおすすめです。 ゲームプログラミングは今後も人気の職種です。習得してステップアップを目指しましょう。 Oracle PLのプログラミング言語について学びましょう。 Oracle PLの特徴 SQL、T-SQLと同様にOracle PLもデータベースを処理するための言語です。違いとしてはOracle PLは世界最大のデータベースのひとつであるOracle

  • Assembly Programming Linux

    はじめに. アセンブラを使って Linux のプログラミングで遊んでみます.アセンブラには NASM を使用して,カーネルを直接利用することにします. いまさらアセンブラでプログラムを作成することは,時代錯誤と感じる人も 多いかもしれません.「アセンブラでプログラミングなんて職人芸でしょう」 と思うかもしれません. 20年前では趣味のプログラミングは BASIC か アセンブラしか選択肢がありません でしたが,今ではPerl, Ruby からアセンブラまでの間に非常に多くの言語があって, アセンブラは普通では不要な最下層の知識となっていると思います. 10BaseT のツイストペアケーブルのインピーダンスを気にする人はほとんどいない ようなものでしょうか? アセンブリ言語の学習で最も困難なのは,最近では書籍が見つからないこと かもしれません. …と書いていましたが、また増えてきているようで

    mooz
    mooz 2009/02/12
    FPU を使った浮動小数点演算の説明など
  • advanced optimization FPU

    FPUレジスタは通常の汎用レジスタと違って8個まで値を格納できるスタック形式です. スタックトップをstと書き, 以下st(1),st(2),...st(7)と表記します. スタック形式なので, 通常はメモリから直接st(i) (i>0) に読み込むことは出来ません. メモリの値を一端stにpush (読み込み) してからst(i)に移します. 9個以上pushすると例外が発生するので注意します. 不要になった値はstから順にpopして消去します. レジスタの値をメモリに書き込む時も同様で, 通常はstの値だけしか書き込めません. 尚, 汎用レジスタと違ってFPU命令には即値モードはありません. 全てアドレスを指定して値のやり取りをします.

  • プログラムはどう動くのか? 〜 ELFの黒魔術をかいまみる

  • 目指せプログラマー!

    目指せプログラマー!にようこそ。 当サイトはこちらに引っ越しました。 お手数をおかけしますが、上記サイトへご移動くださいませ。

  • 【インフォシーク】Infoseek : 楽天が運営するポータルサイト

    日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。

  • ホワット・ア・ワンダフル・ワールド GAS から目覚める僕らのプログラミング

    GAS ってのは,GNU ASsembler のことで,Debian/GNU Linux では as とかいうコマンドです.gcc の裏では,こいつが .S ファイルからオブジェクトファイルを作ってくれて,リンカが libc とかと o ファイルをくっつけてくれて,実行可能ファイル a.out ができるわけですな. というわけで,さっそく gasの2つの例 を参考にしつつ (というかまんま.変えたのは文字列の中身だけ) 書いた,素朴すぎる hello, gas ! .text message: .ascii "hello, gas!\n" .align 4 .globl entryPoint entryPoint : movl $4, %eax movl $1, %ebx movl $message, %ecx movl $12, %edx int $0x80 movl $1, %eax

  • アセンブリ言語の教科書 第3章 GDBの使い方。 - ボクノス

    アセンブリでprintfデバッグは辛すぎなのでのGDBデバッグについて学ぶ。 アセンブリでも-gオプションが使える。 % gcc -g -o hello hello.s % gdb hello (gdb) l 1 .text 2 .global main 3 4 main: mov $1, %eax 5 mov $0xFFFF, %ax 6 mov $0b101010, %ah 7 mov $0, %eax 8 retアセンブリの場合、ステップの扱いが違う。また、表示も便利なオプションを発見した。C言語と違う部分だけメモ。 $eaxでレジスタの参照が出来る。 %ではないので混乱しそう。 si(stepi) ステップ実行 sすると飛んでく。注意。 ni(nexti) ステップアウト call先へは飛ばない。 p/x $eax(print) %eaxを16進数で表示 display/t $ea

    アセンブリ言語の教科書 第3章 GDBの使い方。 - ボクノス
  • 1