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