@@ -0,0 +1,65 @@
+Index: qemu/thunk.h
+================================================================================
+--- qemu/thunk.c
++++ qemu/thunk.c
+@@ -40,6 +40,7 @@
+ case TYPE_CHAR:
+ case TYPE_SHORT:
+ case TYPE_INT:
++ case TYPE_INTBITFIELD:
+ case TYPE_LONGLONG:
+ case TYPE_ULONGLONG:
+ case TYPE_LONG:
+@@ -132,6 +133,26 @@
+ case TYPE_INT:
+ *(uint32_t *)dst = tswap32(*(uint32_t *)src);
+ break;
++ case TYPE_INTBITFIELD:
++#if defined(TARGET_I386) && defined(__powerpc__)
++ /* powerpc uses the MSB, whereas i386 uses the LSB
++ * to store the first bit in a field */
++ {
++ unsigned char byte = *(uint8_t *)src;
++ *(uint8_t *)dst = ((byte >> 7) & 1)
++ | ((byte >> 5) & 2)
++ | ((byte >> 3) & 4)
++ | ((byte >> 1) & 8)
++ | ((byte << 1) & 16)
++ | ((byte << 3) & 32)
++ | ((byte << 5) & 64)
++ | ((byte << 7) & 128);
++ /* FIXME: implement for bitfields > 1 byte and other archs */
++ }
++#else
++ *(uint32_t *)dst = tswap32(*(uint32_t *)src);
++#endif
++ break;
+ case TYPE_LONGLONG:
+ case TYPE_ULONGLONG:
+ *(uint64_t *)dst = tswap64(*(uint64_t *)src);
+--- qemu/thunk.h
++++ qemu/thunk.h
+@@ -38,6 +38,7 @@
+ TYPE_PTR,
+ TYPE_ARRAY,
+ TYPE_STRUCT,
++ TYPE_INTBITFIELD,
+ } argtype;
+
+ #define MK_PTR(type) TYPE_PTR, type
+@@ -87,6 +88,7 @@
+ case TYPE_SHORT:
+ return 2;
+ case TYPE_INT:
++ case TYPE_INTBITFIELD:
+ return 4;
+ case TYPE_LONGLONG:
+ case TYPE_ULONGLONG:
+@@ -124,6 +126,7 @@
+ case TYPE_SHORT:
+ return 2;
+ case TYPE_INT:
++ case TYPE_INTBITFIELD:
+ return 4;
+ case TYPE_LONGLONG:
+ case TYPE_ULONGLONG:
|