Commit f843e5282a67aeaafd6309e9ce6b633e13e6744c
1 parent
762e8230
Allocate space for static call args, increase stack frame size on Sparc64
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6973 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
17 additions
and
9 deletions
tcg/sparc/tcg-target.c
| ... | ... | @@ -578,9 +578,11 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, |
| 578 | 578 | global registers */ |
| 579 | 579 | // delay slot |
| 580 | 580 | tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, |
| 581 | - TCG_TARGET_CALL_STACK_OFFSET - sizeof(long), HOST_ST_OP); | |
| 581 | + TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE - | |
| 582 | + sizeof(long), HOST_ST_OP); | |
| 582 | 583 | tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, |
| 583 | - TCG_TARGET_CALL_STACK_OFFSET - sizeof(long), HOST_LD_OP); | |
| 584 | + TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE - | |
| 585 | + sizeof(long), HOST_LD_OP); | |
| 584 | 586 | |
| 585 | 587 | /* data_reg = sign_extend(arg0) */ |
| 586 | 588 | switch(opc) { |
| ... | ... | @@ -781,9 +783,11 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, |
| 781 | 783 | global registers */ |
| 782 | 784 | // delay slot |
| 783 | 785 | tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, |
| 784 | - TCG_TARGET_CALL_STACK_OFFSET - sizeof(long), HOST_ST_OP); | |
| 786 | + TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE - | |
| 787 | + sizeof(long), HOST_ST_OP); | |
| 785 | 788 | tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, |
| 786 | - TCG_TARGET_CALL_STACK_OFFSET - sizeof(long), HOST_LD_OP); | |
| 789 | + TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE - | |
| 790 | + sizeof(long), HOST_LD_OP); | |
| 787 | 791 | |
| 788 | 792 | /* will become: |
| 789 | 793 | ba label2 */ |
| ... | ... | @@ -905,9 +909,11 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args, |
| 905 | 909 | global registers */ |
| 906 | 910 | // delay slot |
| 907 | 911 | tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, |
| 908 | - TCG_TARGET_CALL_STACK_OFFSET - sizeof(long), HOST_ST_OP); | |
| 912 | + TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE - | |
| 913 | + sizeof(long), HOST_ST_OP); | |
| 909 | 914 | tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, |
| 910 | - TCG_TARGET_CALL_STACK_OFFSET - sizeof(long), HOST_LD_OP); | |
| 915 | + TCG_TARGET_CALL_STACK_OFFSET - TCG_STATIC_CALL_ARGS_SIZE - | |
| 916 | + sizeof(long), HOST_LD_OP); | |
| 911 | 917 | break; |
| 912 | 918 | case INDEX_op_jmp: |
| 913 | 919 | case INDEX_op_br: | ... | ... |
tcg/sparc/tcg-target.h
| ... | ... | @@ -75,12 +75,14 @@ enum { |
| 75 | 75 | #define TCG_REG_CALL_STACK TCG_REG_I6 |
| 76 | 76 | #ifdef __arch64__ |
| 77 | 77 | // Reserve space for AREG0 |
| 78 | -#define TCG_TARGET_STACK_MINFRAME (176 + 2 * (int)sizeof(long)) | |
| 79 | -#define TCG_TARGET_CALL_STACK_OFFSET (2047 + TCG_TARGET_STACK_MINFRAME) | |
| 78 | +#define TCG_TARGET_STACK_MINFRAME (176 + 4 * (int)sizeof(long) + \ | |
| 79 | + TCG_STATIC_CALL_ARGS_SIZE) | |
| 80 | +#define TCG_TARGET_CALL_STACK_OFFSET (2047 - 16) | |
| 80 | 81 | #define TCG_TARGET_STACK_ALIGN 16 |
| 81 | 82 | #else |
| 82 | 83 | // AREG0 + one word for alignment |
| 83 | -#define TCG_TARGET_STACK_MINFRAME (92 + (2 + 1) * (int)sizeof(long)) | |
| 84 | +#define TCG_TARGET_STACK_MINFRAME (92 + (2 + 1) * (int)sizeof(long) + \ | |
| 85 | + TCG_STATIC_CALL_ARGS_SIZE) | |
| 84 | 86 | #define TCG_TARGET_CALL_STACK_OFFSET TCG_TARGET_STACK_MINFRAME |
| 85 | 87 | #define TCG_TARGET_STACK_ALIGN 8 |
| 86 | 88 | #endif | ... | ... |