Revision 0670a7b6 target-arm/neon_helper.c
b/target-arm/neon_helper.c | ||
---|---|---|
543 | 543 |
#define NEON_FN(dest, src1, src2) do { \ |
544 | 544 |
int8_t tmp; \ |
545 | 545 |
tmp = (int8_t)src2; \ |
546 |
if (tmp >= (ssize_t)sizeof(src1) * 8) { \ |
|
546 |
if ((tmp >= (ssize_t)sizeof(src1) * 8) \ |
|
547 |
|| (tmp <= -(ssize_t)sizeof(src1) * 8)) { \ |
|
547 | 548 |
dest = 0; \ |
548 |
} else if (tmp < -(ssize_t)sizeof(src1) * 8) { \ |
|
549 |
dest = src1 >> (sizeof(src1) * 8 - 1); \ |
|
550 |
} else if (tmp == -(ssize_t)sizeof(src1) * 8) { \ |
|
551 |
dest = src1 >> (tmp - 1); \ |
|
552 |
dest++; \ |
|
553 |
dest >>= 1; \ |
|
554 | 549 |
} else if (tmp < 0) { \ |
555 | 550 |
dest = (src1 + (1 << (-1 - tmp))) >> -tmp; \ |
556 | 551 |
} else { \ |
... | ... | |
584 | 579 |
{ |
585 | 580 |
int8_t shift = (int8_t)shiftop; |
586 | 581 |
int64_t val = valop; |
587 |
if (shift >= 64) {
|
|
582 |
if ((shift >= 64) || (shift <= -64)) {
|
|
588 | 583 |
val = 0; |
589 |
} else if (shift < -64) { |
|
590 |
val >>= 63; |
|
591 |
} else if (shift == -63) { |
|
592 |
val >>= 63; |
|
593 |
val++; |
|
594 |
val >>= 1; |
|
595 | 584 |
} else if (shift < 0) { |
596 | 585 |
val >>= (-shift - 1); |
597 | 586 |
if (val == INT64_MAX) { |
Also available in: Unified diff