Mercurial > hg > CbC > old > device
diff test/bitfield.c @ 336:d488b72254fb
bit-field done.
author | kono |
---|---|
date | Fri, 25 Jun 2004 03:56:48 +0900 |
parents | |
children | 7fe7ce0a791f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/bitfield.c Fri Jun 25 03:56:48 2004 +0900 @@ -0,0 +1,539 @@ + + +typedef union { + struct _PTE { + unsigned long v:1; + unsigned long vsid:24; + unsigned long h:1; + unsigned long api:6; + unsigned long rpn:20; + + unsigned long :3; + unsigned long r:1; + unsigned long c:1; + unsigned long w:1; + unsigned long i:1; + unsigned long m:1; + unsigned long g:1; + unsigned long :1; + unsigned long pp:2; + } pte; + struct { + unsigned char v:1; + signed long vsid:24; + unsigned long h:1; + signed char api:6; + signed long rpn:20; + + signed long :3; + unsigned long r:1; + unsigned long c:1; + unsigned long w:1; + unsigned long i:1; + unsigned long m:1; + unsigned long g:1; + unsigned long :1; + signed long pp:2; + } sg; + unsigned long u[2]; +} PTE; + +PTE g; + +main() +{ + PTE a,*p; + int i = 0; + int j = 0; + + a.pte.rpn = 55; + j = a.pte.rpn; +printf("% 3d: %d\n",i++,j); + a.pte.c = 1; + j = a.pte.c; +printf("% 3d: %d\n",i++,j); + a.pte.pp = -1; + j = a.pte.pp; +printf("% 3d: %d\n",i++,j); + a.sg.pp = -1; + j = a.sg.pp; +printf("% 3d: %d\n",i++,j); + + p = &g; + + g.u[0]=0; + g.u[1]=0; + +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. v = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. vsid = -1; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. h = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. api = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. rpn = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.pte. r = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. c = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. w = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. i = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. m = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. g = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. pp = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.u[0]=-1; + g.u[1]=-1; + +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. v = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. vsid = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. h = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. api = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. rpn = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.pte. r = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. c = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. w = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. i = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. m = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. g = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. pp = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.u[0]=-1; + g.u[1]=-1; + +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. v = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. vsid = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. h = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. api = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. rpn = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.pte. r = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. c = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. w = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. i = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. m = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. g = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. pp = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.u[0]=-1; + g.u[1]=-1; + +for(i=0;i<0x200;i++) { +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. v = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. vsid = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. h = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. api = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. rpn = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.pte. r = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. c = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. w = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. i = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. m = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. g = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.pte. pp = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); +} + + g = a; + + printf("%d %d %d\n",a.pte.pp,g.pte.pp,p->pte.pp); + main2(); + main5(); + return 0; +} + +main2() +{ + int i = 0; + + g.u[0]=0; + g.u[1]=0; + +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. v = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. vsid = -1; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. h = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. api = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. rpn = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.sg. r = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. c = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. w = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. i = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. m = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. g = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. pp = 3; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.u[0]=-1; + g.u[1]=-1; + +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. v = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. vsid = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. h = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. api = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. rpn = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.sg. r = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. c = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. w = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. i = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. m = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. g = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. pp = 0; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.u[0]=-1; + g.u[1]=-1; + +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. v = 0x55; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. vsid = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. h = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. api = 0x55; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. rpn = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.sg. r = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. c = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. w = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. i = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. m = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. g = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. pp = 0x5555555; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.u[0]=-1; + g.u[1]=-1; + +for(i=-0x100;i<0x100;i++) { +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. v = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. vsid = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. h = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. api = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. rpn = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + + g.sg. r = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. c = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. w = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. i = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. m = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. g = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); + g.sg. pp = i; +printf("% 3d: 0x%08x%08x\n",i++,g.u[0],g.u[1]); +} + +// printf("size of %d\n",sizeof(g.sg.pp)); no size of for bit-field + +} + +// int :12 bit-field cannot be a return value; +// main3( int a:8 ) bit-field cannot be an argument; +main3( int a ) +{ + // int b:9; // nor local variable + int b; + + + g.pte.rpn--; + g.pte.rpn++; + --g.pte.rpn; + ++g.pte.rpn; + g.pte.rpn += 3; + g.pte.rpn -= 3; + g.pte.rpn *= 3; + g.pte.rpn /= 3; + g.pte.rpn %= 3; + g.pte.rpn |= 3; + g.pte.rpn &= 3; + g.pte.rpn ^= 3; + + return --b; +} + + + + +union ll1 { + int a[8]; + struct { + char a:4; + long long v:33; + long long w:33; + long long x:33; + } b; +} ll1; + +union ll0 { + int a[8]; + struct { + char a:4; + long long v:48; + long long w:48; + long long x:48; + } b; +} ll0; + + +union ll { + int a[8]; + struct { + char a:4; + long long v:56; + long long w:56; + long long x:56; + } b; +} ll; + +union cc { + int a; + struct { + char a:1; + char b:4; + char c:7; + char d:4; + char e:4; + char f:4; + } b; +} cc; + +union ii { + int a; + struct { + int a:1; + int b:4; + int c:4; + int d:4; + int e:4; + int f:4; + } b; +} ii; + +int m1 = -1; +int p1 = 1; +int zero = 0; + +main5() +{ + ii.b.a = -1; + printf("00:%d\n",ii.b.a); + + ll1.b.v = m1; + printf("01:%llx\n",ll1.b.v); + printf("02:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll1.a[0],ll1.a[1],ll1.a[2],ll1.a[3], + ll1.a[4],ll1.a[5],ll1.a[6],ll1.a[7] + ); + ll1.b.v = zero; + ll1.b.w = m1; + printf("02:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll1.a[0],ll1.a[1],ll1.a[2],ll1.a[3], + ll1.a[4],ll1.a[5],ll1.a[6],ll1.a[7] + ); + ll1.b.w = zero; + ll1.b.x = m1; + printf("02:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll1.a[0],ll1.a[1],ll1.a[2],ll1.a[3], + ll1.a[4],ll1.a[5],ll1.a[6],ll1.a[7] + ); + + ll0.b.v = m1; + printf("01:%llx\n",ll0.b.v); + printf("02:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll0.a[0],ll0.a[1],ll0.a[2],ll0.a[3], + ll0.a[4],ll0.a[5],ll0.a[6],ll0.a[7] + ); + ll0.b.v = zero; + ll0.b.w = m1; + printf("02:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll0.a[0],ll0.a[1],ll0.a[2],ll0.a[3], + ll0.a[4],ll0.a[5],ll0.a[6],ll0.a[7] + ); + ll0.b.w = zero; + ll0.b.x = m1; + printf("02:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll0.a[0],ll0.a[1],ll0.a[2],ll0.a[3], + ll0.a[4],ll0.a[5],ll0.a[6],ll0.a[7] + ); + + ll.b.v = m1; + printf("1:%llx\n",ll.b.v); + printf("2:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll.a[0],ll.a[1],ll.a[2],ll.a[3], + ll.a[4],ll.a[5],ll.a[6],ll.a[7] + ); + ll.b.v = zero; + ll.b.w = m1; + printf("2:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll.a[0],ll.a[1],ll.a[2],ll.a[3], + ll.a[4],ll.a[5],ll.a[6],ll.a[7] + ); + ll.b.w = zero; + ll.b.x = m1; + printf("2:%08x %08x %08x %08x %08x %08x %08x %08x\n", + ll.a[0],ll.a[1],ll.a[2],ll.a[3], + ll.a[4],ll.a[5],ll.a[6],ll.a[7] + ); + + printf("char a:1; char b:4; char c:7; char d:4; char e:4; char f:4;\n"); + cc.b.a = m1; + printf("a:%08x\n",cc.a); + cc.b.b = m1; + printf("b:%08x\n",cc.a); + cc.b.c = m1; + printf("c:%08x\n",cc.a); + cc.b.d = m1; + printf("d:%08x\n",cc.a); + cc.b.e = m1; + printf("e:%08x\n",cc.a); + cc.b.f = m1; + printf("f:%08x\n",cc.a); + printf("3:%d %d\n",cc.b.c,cc.b.d); + cc.a = m1; + printf("f:%08x\n",cc.a); + cc.b.a = zero; + printf("a:%08x\n",cc.a); + cc.b.b = zero; + printf("b:%08x\n",cc.a); + cc.b.c = zero; + printf("c:%08x\n",cc.a); + cc.b.d = zero; + printf("d:%08x\n",cc.a); + cc.b.e = zero; + printf("e:%08x\n",cc.a); + cc.b.f = zero; + printf("f:%08x\n",cc.a); + printf("3:%d %d\n",cc.b.c,cc.b.d); + cc.a = zero; + printf("f:%08x\n",cc.a); + cc.b.a = p1; + printf("a:%08x\n",cc.a); + cc.b.b = p1; + printf("b:%08x\n",cc.a); + cc.b.c = p1; + printf("c:%08x\n",cc.a); + cc.b.d = p1; + printf("d:%08x\n",cc.a); + cc.b.e = p1; + printf("e:%08x\n",cc.a); + cc.b.f = p1; + printf("f:%08x\n",cc.a); + printf("3:%d %d\n",cc.b.c,cc.b.d); + cc.a = m1; + printf("f:%08x\n",cc.a); + cc.b.a = p1; + printf("a:%08x\n",cc.a); + cc.b.b = p1; + printf("b:%08x\n",cc.a); + cc.b.c = p1; + printf("c:%08x\n",cc.a); + cc.b.d = p1; + printf("d:%08x\n",cc.a); + cc.b.e = p1; + printf("e:%08x\n",cc.a); + cc.b.f = p1; + printf("f:%08x\n",cc.a); + printf("3:%d %d\n",cc.b.c,cc.b.d); + + ii.b.a = m1; + printf("6:%08x\n",ii.a); + ii.b.d = m1; + printf("6:%08x\n",ii.a); + printf("5:%d %d\n",ii.b.a,ii.b.d); +} + +