+ memset(b, 0xFF, 4);
+ SIVAL(s, 4, x >> 32);
+ writefd(f, b, 12);
+ } else if (x < 0) {
+ goto all_bits;
+#endif
+ } else if (x < ((int32)1<<(3*8-1))) {
+ b[0] = (char)(x >> 16);
+ b[1] = (char)(x >> 8);
+ b[2] = (char)x;
+ writefd(f, b, 3);
+ } else if (x < ((int64)1<<(4*8-2))) {
+ b[0] = (char)((x >> 24) | 0x80);
+ b[1] = (char)(x >> 16);
+ b[2] = (char)(x >> 8);
+ b[3] = (char)x;
+ writefd(f, b, 4);
+#if SIZEOF_INT64 < 8
+ } else {
+ b[0] = 0xC0;
+ b[1] = (char)(x >> 24);
+ b[2] = (char)(x >> 16);
+ b[3] = (char)(x >> 8);
+ b[4] = (char)x;
+ writefd(f, b, 5);
+ }
+#else
+ } else if (x < ((int64)1<<(5*8-3))) {
+ b[0] = (char)((x >> 32) | 0xC0);
+ b[1] = (char)(x >> 24);
+ b[2] = (char)(x >> 16);
+ b[3] = (char)(x >> 8);
+ b[4] = (char)x;
+ writefd(f, b, 5);
+ } else if (x < ((int64)1<<(6*8-4))) {
+ b[0] = (char)((x >> 40) | 0xE0);
+ b[1] = (char)(x >> 32);
+ b[2] = (char)(x >> 24);
+ b[3] = (char)(x >> 16);
+ b[4] = (char)(x >> 8);
+ b[5] = (char)x;
+ writefd(f, b, 6);
+ } else if (x < ((int64)1<<(7*8-5))) {
+ b[0] = (char)((x >> 48) | 0xF0);
+ b[1] = (char)(x >> 40);
+ b[2] = (char)(x >> 32);
+ b[3] = (char)(x >> 24);
+ b[4] = (char)(x >> 16);
+ b[5] = (char)(x >> 8);
+ b[6] = (char)x;
+ writefd(f, b, 7);
+ } else if (x < ((int64)1<<(8*8-6))) {
+ b[0] = (char)((x >> 56) | 0xF8);
+ b[1] = (char)(x >> 48);
+ b[2] = (char)(x >> 40);
+ b[3] = (char)(x >> 32);
+ b[4] = (char)(x >> 24);
+ b[5] = (char)(x >> 16);
+ b[6] = (char)(x >> 8);
+ b[7] = (char)x;
+ writefd(f, b, 8);
+ } else {
+ all_bits:
+ b[0] = (char)0xFC;
+ b[1] = (char)(x >> 56);
+ b[2] = (char)(x >> 48);
+ b[3] = (char)(x >> 40);
+ b[4] = (char)(x >> 32);
+ b[5] = (char)(x >> 24);
+ b[6] = (char)(x >> 16);
+ b[7] = (char)(x >> 8);
+ b[8] = (char)x;
+ writefd(f, b, 9);
+ }