Revision a4b18c6d
b/tcg/x86_64/tcg-target.c | ||
---|---|---|
397 | 397 |
|
398 | 398 |
static inline void tgen_arithi32(TCGContext *s, int c, int r0, int32_t val) |
399 | 399 |
{ |
400 |
if (val == (int8_t)val) { |
|
400 |
if ((c == ARITH_ADD && val == 1) || (c == ARITH_SUB && val == -1)) { |
|
401 |
/* inc */ |
|
402 |
tcg_out_modrm(s, 0xff, 0, r0); |
|
403 |
} else if ((c == ARITH_ADD && val == -1) || (c == ARITH_SUB && val == 1)) { |
|
404 |
/* dec */ |
|
405 |
tcg_out_modrm(s, 0xff, 1, r0); |
|
406 |
} else if (val == (int8_t)val) { |
|
401 | 407 |
tcg_out_modrm(s, 0x83, c, r0); |
402 | 408 |
tcg_out8(s, val); |
403 | 409 |
} else if (c == ARITH_AND && val == 0xffu) { |
... | ... | |
414 | 420 |
|
415 | 421 |
static inline void tgen_arithi64(TCGContext *s, int c, int r0, int64_t val) |
416 | 422 |
{ |
417 |
if (val == (int8_t)val) { |
|
423 |
if ((c == ARITH_ADD && val == 1) || (c == ARITH_SUB && val == -1)) { |
|
424 |
/* inc */ |
|
425 |
tcg_out_modrm(s, 0xff | P_REXW, 0, r0); |
|
426 |
} else if ((c == ARITH_ADD && val == -1) || (c == ARITH_SUB && val == 1)) { |
|
427 |
/* dec */ |
|
428 |
tcg_out_modrm(s, 0xff | P_REXW, 1, r0); |
|
429 |
} else if (val == (int8_t)val) { |
|
418 | 430 |
tcg_out_modrm(s, 0x83 | P_REXW, c, r0); |
419 | 431 |
tcg_out8(s, val); |
420 | 432 |
} else if (c == ARITH_AND && val == 0xffu) { |
Also available in: Unified diff