Fixed an n64 ABI incompatibility in print_reg.

Thu, 08 Sep 2016 09:59:34 +0800

author
aoqi
date
Thu, 08 Sep 2016 09:59:34 +0800
changeset 101
0ea7b438a63e
parent 100
3df571586c5f
child 102
6f2b3fb2f3f5

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  

mercurial