Revision 70499c98

b/thunk.c
147 147
    case TYPE_ULONG:
148 148
    case TYPE_PTRVOID:
149 149
        if (to_host) {
150
            *(uint64_t *)dst = tswap32(*(uint32_t *)src);
150
            if (type == TYPE_LONG) {
151
                /* sign extension */
152
                *(uint64_t *)dst = (int32_t)tswap32(*(uint32_t *)src);
153
            } else {
154
                *(uint64_t *)dst = tswap32(*(uint32_t *)src);
155
            }
151 156
        } else {
152 157
            *(uint32_t *)dst = tswap32(*(uint64_t *)src & 0xffffffff);
153 158
        }
154 159
        break;
160
#elif HOST_LONG_BITS == 64 && TARGET_ABI_BITS == 64
161
    case TYPE_LONG:
162
    case TYPE_ULONG:
163
    case TYPE_PTRVOID:
164
        *(uint64_t *)dst = tswap64(*(uint64_t *)src);
165
        break;
166
#elif HOST_LONG_BITS == 32 && TARGET_ABI_BITS == 64
167
    case TYPE_LONG:
168
    case TYPE_ULONG:
169
    case TYPE_PTRVOID:
170
        if (to_host) {
171
            *(uint32_t *)dst = tswap64(*(uint64_t *)src);
172
        } else {
173
            if (type == TYPE_LONG) {
174
                /* sign extension */
175
                *(uint64_t *)dst = tswap64(*(int32_t *)src);
176
            } else {
177
                *(uint64_t *)dst = tswap64(*(uint32_t *)src);
178
            }
179
        }
180
        break;
155 181
#else
156 182
#warning unsupported conversion
157 183
#endif

Also available in: Unified diff