今日のLLVM - フィボナッチ数列

Posted by nanki Fri, 25 Dec 2009 01:35:00 GMT

LLVM言語にて、フィボナッチ数列。

@str = internal constant [4 x i8] c"%d\0A\00"

define void @main() nounwind {
init:
  br label %loop
loop:
  %i = phi i32 [0, %init], [%i.next, %loop]
  %fib = call i32 @fib(i32 %i)

  call i32 @printf( i8* getelementptr ([4 x i8]* @str, i32 0,i32 0), i32 %fib)

  %i.next = add i32 %i, 1

  %cond = icmp ult i32 %i.next, 30
  br i1 %cond, label %loop, label %exit

exit:
  ret void
}

define i32 @fib(i32 %n) nounwind {
  %cond = icmp ult i32 %n, 2
  br i1 %cond, label %c1, label %c2

c1:
  ret i32 1
c2:
  %n1 = sub i32 %n, 1
  %n2 = sub i32 %n, 2

  %fib1 = call i32 @fib(i32 %n1)
  %fib2 = call i32 @fib(i32 %n2)

  %r = add i32 %fib1, %fib2
  ret i32 %r
}

declare i32 @printf(i8*, ...) nounwind
𐄡 llvm-as fib.ll -o - | lli
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040

便利。

Posted in  | Tags  | no comments | no trackbacks

termtterのパスワードにMacのキーチェーンを使う

Posted by nanki Sat, 19 Dec 2009 09:15:00 GMT

termtter では、パスワードをファイルに保存したくない、という理由から?デフォルトでは毎回パスワードを聞くようになっている。

Macではsecurityコマンドというのでキーチェーンにアクセスできるそうなので、それを使ってみる。

標準エラー出力にパスワードを吐くのでpopen3を使う。

# ~/.termtter/config
def password_from_keychain(user)
  require 'open3'
  _, _, err = Open3.popen3("/usr/bin/security find-internet-password -s twitter.com -a #{user} -r http -g")

  if /^password: "(.*)"$/ === err.gets                                                  
    $1
  else
    nil
  end
end

config.user_name = 'your_account'
config.password = password_from_keychain(config.user_name)
参考:

Posted in  | Tags  | no comments | no trackbacks