Revision f51bbbfe
b/target-arm/helper.c | ||
---|---|---|
340 | 340 |
return res; |
341 | 341 |
} |
342 | 342 |
|
343 |
uint32_t HELPER(clz)(uint32_t x) |
|
344 |
{ |
|
345 |
int count; |
|
346 |
for (count = 32; x; count--) |
|
347 |
x >>= 1; |
|
348 |
return count; |
|
349 |
} |
|
350 |
|
|
343 | 351 |
#if defined(CONFIG_USER_ONLY) |
344 | 352 |
|
345 | 353 |
void do_interrupt (CPUState *env) |
b/target-arm/helpers.h | ||
---|---|---|
2 | 2 |
#define DEF_HELPER(name, ret, args) ret helper_##name args; |
3 | 3 |
#endif |
4 | 4 |
|
5 |
DEF_HELPER(clz, uint32_t, (uint32_t)) |
|
5 | 6 |
DEF_HELPER(sxtb16, uint32_t, (uint32_t)) |
6 | 7 |
DEF_HELPER(uxtb16, uint32_t, (uint32_t)) |
b/target-arm/op.c | ||
---|---|---|
475 | 475 |
} |
476 | 476 |
|
477 | 477 |
/* misc */ |
478 |
void OPPROTO op_clz_T0(void) |
|
479 |
{ |
|
480 |
int count; |
|
481 |
for (count = 32; T0 > 0; count--) |
|
482 |
T0 = T0 >> 1; |
|
483 |
T0 = count; |
|
484 |
FORCE_RET(); |
|
485 |
} |
|
486 |
|
|
487 | 478 |
#define SIGNBIT (uint32_t)0x80000000 |
488 | 479 |
/* saturating arithmetic */ |
489 | 480 |
void OPPROTO op_addl_T0_T1_setq(void) |
b/target-arm/translate.c | ||
---|---|---|
205 | 205 |
#define gen_sxtb16(var) tcg_gen_helper_1_1(HELPER_ADDR(sxtb16), var, var) |
206 | 206 |
#define gen_uxtb16(var) tcg_gen_helper_1_1(HELPER_ADDR(uxtb16), var, var) |
207 | 207 |
|
208 |
#define gen_op_clz_T0(var) \ |
|
209 |
tcg_gen_helper_1_1(HELPER_ADDR(clz), cpu_T[0], cpu_T[0]) |
|
210 |
|
|
208 | 211 |
/* Dual 16-bit add. Result placed in t0 and t1 is marked as dead. |
209 | 212 |
tmp = (t0 ^ t1) & 0x8000; |
210 | 213 |
t0 &= ~0x8000; |
Also available in: Unified diff