Thu, 08 Sep 2016 09:59:34 +0800
Fixed an n64 ABI incompatibility in print_reg.
see changeset 122
src/cpu/mips/vm/assembler_mips.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/mips/vm/assembler_mips.cpp Wed Aug 24 15:38:31 2016 +0800 1.2 +++ b/src/cpu/mips/vm/assembler_mips.cpp Thu Sep 08 09:59:34 2016 +0800 1.3 @@ -1199,8 +1199,14 @@ 1.4 else 1.5 move(A1, reg); 1.6 li(A2, (long)cur_pc); 1.7 + push(S2); 1.8 + move(AT, -(StackAlignmentInBytes)); 1.9 + move(S2, SP); // use S2 as a sender SP holder 1.10 + andr(SP, SP, AT); // align stack as required by ABI 1.11 call(CAST_FROM_FN_PTR(address, SharedRuntime::print_reg_with_pc),relocInfo::runtime_call_type); 1.12 delayed()->nop(); 1.13 + move(SP, S2); // use S2 as a sender SP holder 1.14 + pop(S2); 1.15 NOT_LP64(pop(FP);) 1.16 popad(); 1.17 1.18 @@ -1240,8 +1246,14 @@ 1.19 pushad(); 1.20 NOT_LP64(push(FP);) 1.21 li(A0, (long)reg->name()); 1.22 + push(S2); 1.23 + move(AT, -(StackAlignmentInBytes)); 1.24 + move(S2, SP); // use S2 as a sender SP holder 1.25 + andr(SP, SP, AT); // align stack as required by ABI 1.26 call(CAST_FROM_FN_PTR(address, SharedRuntime::print_str),relocInfo::runtime_call_type); 1.27 delayed()->nop(); 1.28 + move(SP, S2); // use S2 as a sender SP holder 1.29 + pop(S2); 1.30 NOT_LP64(pop(FP);) 1.31 popad(); 1.32