Revision 1f5063fb target-sparc/op.c
b/target-sparc/op.c | ||
---|---|---|
568 | 568 |
#endif |
569 | 569 |
|
570 | 570 |
#ifdef TARGET_SPARC64 |
571 |
// This function uses non-native bit order |
|
572 |
#define GET_FIELD(X, FROM, TO) \ |
|
573 |
((X) >> (63 - (TO)) & ((1ULL << ((TO) - (FROM) + 1)) - 1)) |
|
574 |
|
|
575 |
// This function uses the order in the manuals, i.e. bit 0 is 2^0 |
|
576 |
#define GET_FIELD_SP(X, FROM, TO) \ |
|
577 |
GET_FIELD(X, 63 - (TO), 63 - (FROM)) |
|
578 |
|
|
579 |
void OPPROTO op_array8() |
|
580 |
{ |
|
581 |
T0 = (GET_FIELD_SP(T0, 60, 63) << (17 + 2 * T1)) | |
|
582 |
(GET_FIELD_SP(T0, 39, 39 + T1 - 1) << (17 + T1)) | |
|
583 |
(GET_FIELD_SP(T0, 17 + T1 - 1, 17) << 17) | |
|
584 |
(GET_FIELD_SP(T0, 56, 59) << 13) | (GET_FIELD_SP(T0, 35, 38) << 9) | |
|
585 |
(GET_FIELD_SP(T0, 13, 16) << 5) | (((T0 >> 55) & 1) << 4) | |
|
586 |
(GET_FIELD_SP(T0, 33, 34) << 2) | GET_FIELD_SP(T0, 11, 12); |
|
587 |
} |
|
588 |
|
|
589 |
void OPPROTO op_array16() |
|
590 |
{ |
|
591 |
T0 = ((GET_FIELD_SP(T0, 60, 63) << (17 + 2 * T1)) | |
|
592 |
(GET_FIELD_SP(T0, 39, 39 + T1 - 1) << (17 + T1)) | |
|
593 |
(GET_FIELD_SP(T0, 17 + T1 - 1, 17) << 17) | |
|
594 |
(GET_FIELD_SP(T0, 56, 59) << 13) | (GET_FIELD_SP(T0, 35, 38) << 9) | |
|
595 |
(GET_FIELD_SP(T0, 13, 16) << 5) | (((T0 >> 55) & 1) << 4) | |
|
596 |
(GET_FIELD_SP(T0, 33, 34) << 2) | GET_FIELD_SP(T0, 11, 12)) << 1; |
|
597 |
} |
|
598 |
|
|
599 |
void OPPROTO op_array32() |
|
600 |
{ |
|
601 |
T0 = ((GET_FIELD_SP(T0, 60, 63) << (17 + 2 * T1)) | |
|
602 |
(GET_FIELD_SP(T0, 39, 39 + T1 - 1) << (17 + T1)) | |
|
603 |
(GET_FIELD_SP(T0, 17 + T1 - 1, 17) << 17) | |
|
604 |
(GET_FIELD_SP(T0, 56, 59) << 13) | (GET_FIELD_SP(T0, 35, 38) << 9) | |
|
605 |
(GET_FIELD_SP(T0, 13, 16) << 5) | (((T0 >> 55) & 1) << 4) | |
|
606 |
(GET_FIELD_SP(T0, 33, 34) << 2) | GET_FIELD_SP(T0, 11, 12)) << 2; |
|
607 |
} |
|
608 |
|
|
609 |
void OPPROTO op_alignaddr() |
|
610 |
{ |
|
611 |
uint64_t tmp; |
|
612 |
|
|
613 |
tmp = T0 + T1; |
|
614 |
env->gsr &= ~7ULL; |
|
615 |
env->gsr |= tmp & 7ULL; |
|
616 |
T0 = tmp & ~7ULL; |
|
617 |
} |
|
618 |
|
|
619 | 571 |
void OPPROTO op_faligndata() |
620 | 572 |
{ |
621 | 573 |
uint64_t tmp; |
Also available in: Unified diff