Shibuya.lisp Tech Talk #4 LT発表資料 「さあ家に帰ったらSchemeのコード書いてみよう」
気付いたら Ruby 使ってる!
Lisp が生かされる部分
これは挑戦と見た!(違
というわけで Ruby で CPUID。
要 RXbyak 最新版( http://github.com/shuyo/cpp/tree/master/rxbyak/ )。
require 'RXbyak' def get_cpuid(reg) rx = RXbyak.new rx.push :ebx rx.mov :eax, [:esp, 8] rx.cpuid rx.mov :eax, reg rx.pop :ebx rx.ret rx end ca = get_cpuid(:eax) cb = get_cpuid(:ebx) cc = get_cpuid(:ecx) cd = get_cpuid(:edx) result = [] eax = -0x7ffffffe # 80000002h result << ca.int_call(eax) << cb.int_call(eax) << cc.int_call(eax) << cd.int_call(eax) eax = -0x7ffffffd # 80000003h result << ca.int_call(eax) << cb.int_call(eax) << cc.int_call(eax) << cd.int_call(eax) eax = -0x7ffffffc # 80000004h result << ca.int_call(eax) << cb.int_call(eax) << cc.int_call(eax) << cd.int_call(eax) puts result.pack('l12')
$ ruby cpuid.rb Quad-Core AMD Opteron(tm) Processor 2378
ま、まだ配列が扱えないから 32bit×4 を一度に返せないんだ……