Commit f843e5282a67aeaafd6309e9ce6b633e13e6744c

Authored by blueswir1
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
tcg/sparc/tcg-target.c
@@ -578,9 +578,11 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, @@ -578,9 +578,11 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args,
578 global registers */ 578 global registers */
579 // delay slot 579 // delay slot
580 tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, 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 tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, 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 /* data_reg = sign_extend(arg0) */ 587 /* data_reg = sign_extend(arg0) */
586 switch(opc) { 588 switch(opc) {
@@ -781,9 +783,11 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, @@ -781,9 +783,11 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args,
781 global registers */ 783 global registers */
782 // delay slot 784 // delay slot
783 tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, 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 tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, 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 /* will become: 792 /* will become:
789 ba label2 */ 793 ba label2 */
@@ -905,9 +909,11 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args, @@ -905,9 +909,11 @@ static inline void tcg_out_op(TCGContext *s, int opc, const TCGArg *args,
905 global registers */ 909 global registers */
906 // delay slot 910 // delay slot
907 tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, 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 tcg_out_ldst(s, TCG_AREG0, TCG_REG_CALL_STACK, 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 break; 917 break;
912 case INDEX_op_jmp: 918 case INDEX_op_jmp:
913 case INDEX_op_br: 919 case INDEX_op_br:
tcg/sparc/tcg-target.h
@@ -75,12 +75,14 @@ enum { @@ -75,12 +75,14 @@ enum {
75 #define TCG_REG_CALL_STACK TCG_REG_I6 75 #define TCG_REG_CALL_STACK TCG_REG_I6
76 #ifdef __arch64__ 76 #ifdef __arch64__
77 // Reserve space for AREG0 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 #define TCG_TARGET_STACK_ALIGN 16 81 #define TCG_TARGET_STACK_ALIGN 16
81 #else 82 #else
82 // AREG0 + one word for alignment 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 #define TCG_TARGET_CALL_STACK_OFFSET TCG_TARGET_STACK_MINFRAME 86 #define TCG_TARGET_CALL_STACK_OFFSET TCG_TARGET_STACK_MINFRAME
85 #define TCG_TARGET_STACK_ALIGN 8 87 #define TCG_TARGET_STACK_ALIGN 8
86 #endif 88 #endif