herumi / xbyak

a JIT assembler for x86(IA-32)/x64(AMD64, x86-64) MMX/SSE/SSE2/SSE3/SSSE3/SSE4/FPU/AVX/AVX2/AVX-512 by C++ header
BSD 3-Clause "New" or "Revised" License
2.03k stars 275 forks source link

fix nop() #56

Closed deepprog closed 7 years ago

deepprog commented 7 years ago

nop() 下記のfor文は 2417 for (size_t i = 0; i < len; i++) { 2418 db(seq[i]); 2419 }

db(seq, len); 1行に書き換えができます。

あと要望なのですが、 dbのcodeを可変引数で受け取る変更はできますか?

例 db(0x90) ;db(0x90) ;db(0x90) ; を db(0x90, 0x90, 0x90); と書き換えたい よろしくお願いします。

herumi commented 7 years ago

db(seq, len); 1行に書き換えができます。

ありがとうございます。修正しておきます。

dbのcodeを可変引数で受け取る変更はできますか?

もちろん可能ですが、そんなに頻繁に必要なケースがあるでしょうか。 正直なところそれほど手間も変わらない感じですがいかがでしょう。

deepprog commented 7 years ago

どちらでも手間は変わらないとは思います。 ASMの表記と少しでも近付けたくて要望しました。

可変長引数のdb()の考えましたが難しくて、 代わりに引数16個まで対応する db()を作成しました。 現状は引数16個分で十分間に合うのですが、 こちらを取り入れてはもらえますか。

void db(int code1, int code2, int code3 =-1, int code4=-1, int code5 =-1, int code6 =-1, int code7 =-1, int code8 =-1, int code9 =-1, int code10 =-1, int code11 =-1, int code12 =-1, int code13 =-1, int code14 =-1, int code15 =-1,int code16 =-1){ db(code1); db(code2); if(code3 != -1) db(code3); if(code4 != -1) db(code4); if(code5 != -1) db(code5); if(code6 != -1) db(code6); if(code7 != -1) db(code7); if(code8 != -1) db(code8); if(code9 != -1) db(code9); if(code10 != -1) db(code10); if(code11 != -1) db(code11); if(code12 != -1) db(code12); if(code13 != -1) db(code13); if(code14 != -1) db(code14); if(code15 != -1) db(code15); if(code16 != -1) db(code16); return; }

herumi commented 7 years ago

うーん、特に今それを入れたいモチベーションがあまりないので申し訳ないですが今回は無しでお願いします(もしかしたら将来気が変わっていれるかもしれませんが)。

それを入れると、vectorやiteratorにも対応したいとかなんか不必要に増えそうで。

実装としては

  template<class... Tail>
  void db(int x, Tail... tail)
  {
    db(x);
    db(tail...);
  }

とすれば望みのものができると思います。

deepprog commented 7 years ago

要望の検討 ありがとうございました。 可変長引数の実装を使わせて頂きます。

herumi commented 7 years ago

失念していましたが、既にvoid db(uint64 code, size_t codeSize)というメソッドがあったのでそれと間違えないようにしないといけないですね。