[Interpreter] Replace b*_far in method entry point.

Tue, 26 Sep 2017 11:18:59 +0800

author
fujie
date
Tue, 26 Sep 2017 11:18:59 +0800
changeset 6894
c3f0dbba118a
parent 6893
5795ec554c3c
child 6895
34448c1bea2d

[Interpreter] Replace b*_far in method entry point.

This patch is used to fix the following bad case in method entry point.
----------------------------------------------------------------------
method entry point (kind = empty) [0x0000000000029440, 0x0000000000029de0] 2464 bytes

0x00000000000298b4: beqz at,0x00000000000298e0
0x00000000000298b8: nop
0x00000000000298bc: b 0x0000000000029938
0x00000000000298c0: nop
0x00000000000298c4: nop
0x00000000000298c8: nop
0x00000000000298cc: nop
0x00000000000298d0: nop
0x00000000000298d4: nop
0x00000000000298d8: nop
0x00000000000298dc: nop
0x00000000000298e0: nop
0x00000000000298e4: ld v0,-40(s8)
0x00000000000298e8: beqz v0,0x0000000000029af0
0x00000000000298ec: nop

src/cpu/mips/vm/templateInterpreter_mips_64.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/mips/vm/templateInterpreter_mips_64.cpp	Tue Sep 26 09:11:24 2017 +0800
     1.2 +++ b/src/cpu/mips/vm/templateInterpreter_mips_64.cpp	Tue Sep 26 11:18:59 2017 +0800
     1.3 @@ -342,7 +342,7 @@
     1.4      __ li(AT, (long)&InvocationCounter::InterpreterProfileLimit);
     1.5      __ lw(AT, AT, 0);
     1.6      __ slt(AT, T3, AT);
     1.7 -    __ bne_far(AT, R0, *profile_method_continue);
     1.8 +    __ bne(AT, R0, *profile_method_continue);
     1.9      __ delayed()->nop();
    1.10  
    1.11      // if no method data exists, go to profile_method
    1.12 @@ -352,7 +352,7 @@
    1.13    __ li(AT, (long)&InvocationCounter::InterpreterInvocationLimit);
    1.14    __ lw(AT, AT, 0);
    1.15    __ slt(AT, T3, AT);
    1.16 -  __ beq_far(AT, R0, *overflow);
    1.17 +  __ beq(AT, R0, *overflow);
    1.18    __ delayed()->nop();
    1.19    __ bind(done);
    1.20  }
    1.21 @@ -378,7 +378,7 @@
    1.22        InterpreterRuntime::frequency_counter_overflow), R0);
    1.23    __ ld(Rmethod, FP, method_offset);
    1.24    // Preserve invariant that esi/edi contain bcp/locals of sender frame
    1.25 -  __ b_far(*do_continue);
    1.26 +  __ beq(R0, R0, *do_continue);
    1.27    __ delayed()->nop();
    1.28  }
    1.29  

mercurial