ToDo:
typedef struct { unsigned long long a: 1; unsigned long long ll: 50; unsigned int r; } S;
に対して
S s; s.ll = 0x123456789aULL;
がこうなる。 こう長くなっちゃうと 最適化しないコンパイラの方が読みにくいとおもう
8048459: 48 b8 9a 78 56 34 12 mov $0x123456789a,%rax 8048460: 00 00 00 8048463: 48 c7 c1 9a 78 56 34 mov $0x3456789a,%rcx 804846a: 48 89 ca mov %rcx,%rdx 804846d: 89 55 ec mov %edx,-0x14(%rbp) 8048470: 48 89 c2 mov %rax,%rdx 8048473: 89 4d e8 mov %ecx,-0x18(%rbp) 8048476: 8b 4d ec mov -0x14(%rbp),%ecx 8048479: 48 89 55 e0 mov %rdx,-0x20(%rbp) 804847d: 8b 55 e8 mov -0x18(%rbp),%edx 8048480: 48 8b 4d e0 mov -0x20(%rbp),%rcx 8048484: 48 89 45 d8 mov %rax,-0x28(%rbp) 8048488: 48 b8 ff ff 03 00 00 mov $0x3ffff,%rax 804848f: 00 00 00 8048492: 48 21 c1 and %rax,%rcx 8048495: 48 89 c8 mov %rcx,%rax 8048498: 48 c1 e0 01 shl $0x1,%rax 804849c: 48 8b 4d f0 mov -0x10(%rbp),%rcx 80484a0: 48 ba 01 00 f8 ff ff mov $0xfffffffffff80001,%rdx 80484a7: ff ff ff 80484aa: 48 21 d1 and %rdx,%rcx 80484ad: 48 89 c2 mov %rax,%rdx 80484b0: 48 89 c8 mov %rcx,%rax 80484b3: 48 09 c2 or %rax,%rdx 80484b6: 48 89 d0 mov %rdx,%rax 80484b9: 48 89 45 f0 mov %rax,-0x10(%rbp)
(00:20)
8048459: 48 b8 9a 78 56 34 12 mov $0x123456789a,%rax 8048460: 00 00 00 8048463: 48 c7 c1 9a 78 56 34 mov $0x3456789a,%rcx 804846a: 48 89 ca mov %rcx,%rdx 804846d: 89 55 ec mov %edx,-0x14(%rbp) // 32, 0x3456789a 8048470: 48 89 c2 mov %rax,%rdx 8048473: 89 4d e8 mov %ecx,-0x18(%rbp) // 32, 0x3456789a 8048476: 8b 4d ec mov -0x14(%rbp),%ecx 8048479: 48 89 55 e0 mov %rdx,-0x20(%rbp) // 64, 0x123456789a // uint32 edx = 0x3456789a; 804847d: 8b 55 e8 mov -0x18(%rbp),%edx // uint64 rcx = 0x123456789a; 8048480: 48 8b 4d e0 mov -0x20(%rbp),%rcx 8048484: 48 89 45 d8 mov %rax,-0x28(%rbp) // 64, 0x123456789a 8048488: 48 b8 ff ff 03 00 00 mov $0x3ffff,%rax 804848f: 00 00 00 // uint64 rcx = 0x3ffff & 0x123456789a; // 18bit from LSB 8048492: 48 21 c1 and %rax,%rcx 8048495: 48 89 c8 mov %rcx,%rax // uint64 rax = (0x3ffff & 0x123456789a) << 1; 8048498: 48 c1 e0 01 shl $0x1,%rax 804849c: 48 8b 4d f0 mov -0x10(%rbp),%rcx 80484a0: 48 ba 01 00 f8 ff ff mov $0xfffffffffff80001,%rdx 80484a7: ff ff ff 80484aa: 48 21 d1 and %rdx,%rcx 80484ad: 48 89 c2 mov %rax,%rdx 80484b0: 48 89 c8 mov %rcx,%rax 80484b3: 48 09 c2 or %rax,%rdx 80484b6: 48 89 d0 mov %rdx,%rax 80484b9: 48 89 45 f0 mov %rax,-0x10(%rbp)
なるほどね。 bitmask が根本的に間違ってるよ。 OK 一見 fix できてる。 つかたぶんこれ x86 でも動くな。
(01:13)
> cat bitfield_ll2.c #include <stdio.h> int main() { struct sbf2 { long long f1 : 3; } st2; st2.f1 = 3; printf("%lld\n", st2.f1); } > gcc bitfield_ll2.c && ./a.out 3 > gcc -m32 bitfield_ll2.c && ./a.out -18650500345888765
GCC ってこのへんどうなの…
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7018
うーん int より小さいものに long long 使うなってか。
(02:28)
http://code.google.com/p/jaikuengine/
opensource すか。
177348 642108 6749045 total
web service の OSS 化って珍しい気もするな。 OpenPNE とかあるか。
一見だからどうした感は否めないけど、 OpenPNE とかみたいにプラグインとかつくれるんなら なんかコミュニティごとに立てるとかできたりするんかいな。 ちなみに OpenPNE に本当にプラグインがあるかは知りません
(03:04)
http://d.hatena.ne.jp/kazuhooku/20090216/1234771983
さすがに 24 はうざいかなあ… とループ書いてみたけど sscanf の方が良い気もした。
#include <stdio.h> #include <stdlib.h> #include <assert.h> int main() { int i; char* buf = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24"; unsigned hits[24]; char* p; for (p = buf, i = 0;; i++) { hits[i] = strtol(p, &p, 10); if (!*p) break; assert(*p == ','); p++; } assert(i == 23); for (i = 0; i < 24; i++) { assert(i+1 == hits[i]); } }
要は assert がうざいのだけど、 strtok は微妙だし strtok_r も標準じゃないしなぁとかいう。 やっぱ split/join は必要なんだよなぁ。
(10:30)
#include <stdio.h> int A = 1; #define A 1+A #define B(x) x int main() { printf("%d\n", B(A)); }
で TCC が 3 とか出力しやがってこまる。 おそらく、 B(A) => B(1+A) => 1+A => 1+1+A の順番で展開されてそうに思える。
でも K&R にある
#define cat(x, y) x ## y cat(cat(1,2), 3)
とかいう例でちゃんとコンパイルコケるってことは 外からやってるのかなぁ。
(11:18)
前 | 2009年 3月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5021837.htm?info=viagra buy viagra :O