1e93f7393Sniklas /* Test program to test bit field operations */ 2e93f7393Sniklas 3e93f7393Sniklas /* For non-ANSI compilers, use plain ints for the signed bit fields. However, 4e93f7393Sniklas whether they actually end up signed or not is implementation defined, so 5e93f7393Sniklas this may cause some tests to fail. But at least we can still compile 6e93f7393Sniklas the test program and run the tests... */ 7e93f7393Sniklas 8*b725ae77Skettenis #if !defined(__STDC__) && !defined(__cplusplus) 9e93f7393Sniklas #define signed /**/ 10e93f7393Sniklas #endif 11e93f7393Sniklas 12e93f7393Sniklas struct fields 13e93f7393Sniklas { 14e93f7393Sniklas unsigned char uc ; 15e93f7393Sniklas signed int s1 : 1; 16e93f7393Sniklas unsigned int u1 : 1; 17e93f7393Sniklas signed int s2 : 2; 18e93f7393Sniklas unsigned int u2 : 2; 19e93f7393Sniklas signed int s3 : 3; 20e93f7393Sniklas unsigned int u3 : 3; 21e93f7393Sniklas signed int s9 : 9; 22e93f7393Sniklas unsigned int u9 : 9; 23e93f7393Sniklas signed char sc ; 24e93f7393Sniklas } flags; 25e93f7393Sniklas break1()26e93f7393Sniklasvoid break1 () 27e93f7393Sniklas { 28e93f7393Sniklas } 29e93f7393Sniklas break2()30e93f7393Sniklasvoid break2 () 31e93f7393Sniklas { 32e93f7393Sniklas } 33e93f7393Sniklas break3()34e93f7393Sniklasvoid break3 () 35e93f7393Sniklas { 36e93f7393Sniklas } 37e93f7393Sniklas break4()38e93f7393Sniklasvoid break4 () 39e93f7393Sniklas { 40e93f7393Sniklas } 41e93f7393Sniklas break5()42e93f7393Sniklasvoid break5 () 43e93f7393Sniklas { 44e93f7393Sniklas } 45e93f7393Sniklas break6()46e93f7393Sniklasvoid break6 () 47e93f7393Sniklas { 48e93f7393Sniklas } 49e93f7393Sniklas break7()50e93f7393Sniklasvoid break7 () 51e93f7393Sniklas { 52e93f7393Sniklas } 53e93f7393Sniklas break8()54e93f7393Sniklasvoid break8 () 55e93f7393Sniklas { 56e93f7393Sniklas } 57e93f7393Sniklas break9()58e93f7393Sniklasvoid break9 () 59e93f7393Sniklas { 60e93f7393Sniklas } 61e93f7393Sniklas break10()62e93f7393Sniklasvoid break10 () 63e93f7393Sniklas { 64e93f7393Sniklas } 65e93f7393Sniklas 66e93f7393Sniklas /* This is used by bitfields.exp to determine if the target understands 67e93f7393Sniklas signed bitfields. */ 68e93f7393Sniklas int i; 69e93f7393Sniklas main()70e93f7393Sniklasint main () 71e93f7393Sniklas { 72e93f7393Sniklas /* For each member, set that member to 1, allow gdb to verify that the 73e93f7393Sniklas member (and only that member) is 1, and then reset it back to 0. */ 74e93f7393Sniklas 75e93f7393Sniklas #ifdef usestubs 76e93f7393Sniklas set_debug_traps(); 77e93f7393Sniklas breakpoint(); 78e93f7393Sniklas #endif 79e93f7393Sniklas flags.uc = 1; 80e93f7393Sniklas break1 (); 81e93f7393Sniklas flags.uc = 0; 82e93f7393Sniklas 83*b725ae77Skettenis flags.s1 = -1; 84e93f7393Sniklas break1 (); 85e93f7393Sniklas flags.s1 = 0; 86e93f7393Sniklas 87e93f7393Sniklas flags.u1 = 1; 88e93f7393Sniklas break1 (); 89e93f7393Sniklas flags.u1 = 0; 90e93f7393Sniklas 91e93f7393Sniklas flags.s2 = 1; 92e93f7393Sniklas break1 (); 93e93f7393Sniklas flags.s2 = 0; 94e93f7393Sniklas 95e93f7393Sniklas flags.u2 = 1; 96e93f7393Sniklas break1 (); 97e93f7393Sniklas flags.u2 = 0; 98e93f7393Sniklas 99e93f7393Sniklas flags.s3 = 1; 100e93f7393Sniklas break1 (); 101e93f7393Sniklas flags.s3 = 0; 102e93f7393Sniklas 103e93f7393Sniklas flags.u3 = 1; 104e93f7393Sniklas break1 (); 105e93f7393Sniklas flags.u3 = 0; 106e93f7393Sniklas 107e93f7393Sniklas flags.s9 = 1; 108e93f7393Sniklas break1 (); 109e93f7393Sniklas flags.s9 = 0; 110e93f7393Sniklas 111e93f7393Sniklas flags.u9 = 1; 112e93f7393Sniklas break1 (); 113e93f7393Sniklas flags.u9 = 0; 114e93f7393Sniklas 115e93f7393Sniklas flags.sc = 1; 116e93f7393Sniklas break1 (); 117e93f7393Sniklas flags.sc = 0; 118e93f7393Sniklas 119e93f7393Sniklas /* Fill alternating fields with all 1's and verify that none of the bits 120e93f7393Sniklas "bleed over" to the other fields. */ 121e93f7393Sniklas 122e93f7393Sniklas flags.uc = 0xFF; 123e93f7393Sniklas flags.u1 = 0x1; 124e93f7393Sniklas flags.u2 = 0x3; 125e93f7393Sniklas flags.u3 = 0x7; 126e93f7393Sniklas flags.u9 = 0x1FF; 127e93f7393Sniklas break2 (); 128e93f7393Sniklas flags.uc = 0; 129e93f7393Sniklas flags.u1 = 0; 130e93f7393Sniklas flags.u2 = 0; 131e93f7393Sniklas flags.u3 = 0; 132e93f7393Sniklas flags.u9 = 0; 133e93f7393Sniklas 134*b725ae77Skettenis flags.s1 = -1; 135*b725ae77Skettenis flags.s2 = -1; 136*b725ae77Skettenis flags.s3 = -1; 137*b725ae77Skettenis flags.s9 = -1; 138e93f7393Sniklas flags.sc = 0xFF; 139e93f7393Sniklas break2 (); 140e93f7393Sniklas flags.s1 = 0; 141e93f7393Sniklas flags.s2 = 0; 142e93f7393Sniklas flags.s3 = 0; 143e93f7393Sniklas flags.s9 = 0; 144e93f7393Sniklas flags.sc = 0; 145e93f7393Sniklas 146e93f7393Sniklas /* Fill the unsigned fields with the maximum positive value and verify 147e93f7393Sniklas that the values are printed correctly. */ 148e93f7393Sniklas 149e93f7393Sniklas /* Maximum positive values */ 150e93f7393Sniklas flags.u1 = 0x1; 151e93f7393Sniklas flags.u2 = 0x3; 152e93f7393Sniklas flags.u3 = 0x7; 153e93f7393Sniklas flags.u9 = 0x1FF; 154e93f7393Sniklas break3 (); 155e93f7393Sniklas flags.u1 = 0; 156e93f7393Sniklas flags.u2 = 0; 157e93f7393Sniklas flags.u3 = 0; 158e93f7393Sniklas flags.u9 = 0; 159e93f7393Sniklas 160e93f7393Sniklas /* Fill the signed fields with the maximum positive value, then the maximally 161e93f7393Sniklas negative value, then -1, and verify in each case that the values are 162e93f7393Sniklas printed correctly. */ 163e93f7393Sniklas 164e93f7393Sniklas /* Maximum positive values */ 165e93f7393Sniklas flags.s1 = 0x0; 166e93f7393Sniklas flags.s2 = 0x1; 167e93f7393Sniklas flags.s3 = 0x3; 168e93f7393Sniklas flags.s9 = 0xFF; 169e93f7393Sniklas break4 (); 170e93f7393Sniklas 171e93f7393Sniklas /* Maximally negative values */ 172*b725ae77Skettenis flags.s1 = -0x1; 173*b725ae77Skettenis flags.s2 = -0x2; 174*b725ae77Skettenis flags.s3 = -0x4; 175*b725ae77Skettenis flags.s9 = -0x100; 176e93f7393Sniklas /* Extract bitfield value so that bitfield.exp can check if the target 177e93f7393Sniklas understands signed bitfields. */ 178e93f7393Sniklas i = flags.s9; 179e93f7393Sniklas break4 (); 180e93f7393Sniklas 181e93f7393Sniklas /* -1 */ 182*b725ae77Skettenis flags.s1 = -1; 183*b725ae77Skettenis flags.s2 = -1; 184*b725ae77Skettenis flags.s3 = -1; 185*b725ae77Skettenis flags.s9 = -1; 186e93f7393Sniklas break4 (); 187e93f7393Sniklas 188e93f7393Sniklas flags.s1 = 0; 189e93f7393Sniklas flags.s2 = 0; 190e93f7393Sniklas flags.s3 = 0; 191e93f7393Sniklas flags.s9 = 0; 192e93f7393Sniklas 193e93f7393Sniklas return 0; 194e93f7393Sniklas } 195