Skip to content

Instantly share code, notes, and snippets.

@rednaxelafx
Last active September 27, 2015 22:48
Show Gist options
  • Save rednaxelafx/1344520 to your computer and use it in GitHub Desktop.
Save rednaxelafx/1344520 to your computer and use it in GitHub Desktop.
C2 makes a CompiledIC for non-inlined virtual call (CallDynamicJavaNode). Tests on HotSpot 22.0-b02
$ java -XX:+UseFastAccessorMethods -XX:+TraceICs -XX:+TraceCompiledIC -XX:+TraceInlineCacheClearing -XX:+TraceICBuffer -XX:+PrintAssembly TestUseFastAccessorMethods > with1.log
$ java -XX:-UseFastAccessorMethods -XX:+TraceICs -XX:+TraceCompiledIC -XX:+TraceInlineCacheClearing -XX:+TraceICBuffer -XX:+PrintAssembly TestUseFastAccessorMethods > without1.log
$ java -XX:+UseFastAccessorMethods -XX:+TraceICs -XX:+TraceCompiledIC -XX:+TraceInlineCacheClearing -XX:+TraceICBuffer -XX:+TraceCallFixup TestUseFastAccessorMethods
VM option '+UseFastAccessorMethods'
VM option '+TraceICs'
VM option '+TraceCompiledIC'
VM option '+TraceInlineCacheClearing'
VM option '+TraceICBuffer'
VM option '+TraceCallFixup'
resolving virtual (invokevirtual) call to D::foo code: 0x0000000000000000
create transition stub for 0x00002aaaab118d23
Inline cache at 0x00002aaaab118d23, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab118d23: monomorphic to interpreter via mkh
IC miss (invokevirtual) call to A::foo code: 0x0000000000000000
create transition stub for 0x00002aaaab118d23
Inline cache at 0x00002aaaab118d23, calling interpreted 0x00002aaaab0f3904 changing destination to 0x00002aaaab0f41c0
IC@0x00002aaaab118d23: to megamorphic {method} 'foo' '()I' in 'A' entry: 0x00002aaaab118330
[updating inline caches with 3 stubs]
Inline cache at 0x00002aaaab118d23, calling 0x00002aaaab118330 changing oop to 0x00000000c4416da0
Inline cache at 0x00002aaaab118d23, calling 0x00002aaaab118330 changing destination to 0x00002aaaab118330
resolving virtual (invokevirtual) call to A::foo code: 0x0000000000000000
create transition stub for 0x00002aaaab118037
Inline cache at 0x00002aaaab118037, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab118037: monomorphic to interpreter via mkh
IC miss (invokevirtual) call to B::foo code: 0x0000000000000000
create transition stub for 0x00002aaaab118037
Inline cache at 0x00002aaaab118037, calling interpreted 0x00002aaaab0f3904 changing destination to 0x00002aaaab0f41c0
IC@0x00002aaaab118037: to megamorphic {method} 'foo' '()I' in 'B' entry: 0x00002aaaab118330
[updating inline caches with 3 stubs]
Inline cache at 0x00002aaaab118037, calling 0x00002aaaab118330 changing oop to 0x00000000c4417398
Inline cache at 0x00002aaaab118037, calling 0x00002aaaab118330 changing destination to 0x00002aaaab118330
2125
2123
2123
$ java -XX:-UseFastAccessorMethods -XX:+TraceICs -XX:+TraceCompiledIC -XX:+TraceInlineCacheClearing -XX:+TraceICBuffer -XX:+TraceCallFixup TestUseFastAccessorMethods
VM option '-UseFastAccessorMethods'
VM option '+TraceICs'
VM option '+TraceCompiledIC'
VM option '+TraceInlineCacheClearing'
VM option '+TraceICBuffer'
VM option '+TraceCallFixup'
resolving virtual (invokevirtual) call to D::foo code: 0x00002aaaab118890
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab1189c0
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab1189c0 changing oop to 0x00000000c4417f90
IC@0x00002aaaab118523: monomorphic to compiled (rcvr klass) 'D':
IC miss (invokevirtual) call to A::foo code: 0x00002aaaab118e90
create transition stub for 0x00002aaaab118523
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab1189c0 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab118523: to megamorphic {method} 'foo' '()I' in 'A' entry: 0x00002aaaab11a1f0
[updating inline caches with 2 stubs]
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab11a1f0 changing oop to 0x00000000c4416da0
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab11a1f0 changing destination to 0x00002aaaab11a1f0
resolving virtual (invokevirtual) call to A::foo code: 0x00002aaaab118e90
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab118fc0
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab118fc0 changing oop to 0x00000000c4416e28
IC@0x00002aaaab117ef7: monomorphic to compiled (rcvr klass) 'A':
IC miss (invokevirtual) call to B::foo code: 0x00002aaaab118c90
create transition stub for 0x00002aaaab117ef7
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab118fc0 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab117ef7: to megamorphic {method} 'foo' '()I' in 'B' entry: 0x00002aaaab11a1f0
[updating inline caches with 2 stubs]
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab11a1f0 changing oop to 0x00000000c4417398
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab11a1f0 changing destination to 0x00002aaaab11a1f0
2624
2623
2623

HotSpot C2 on Linux/x64

Compile::call_generator -(bail out)-> CallGenerator::for_virtual_call -> VirtualCallGenerator -> CallDynamicJavaNode

// Call Java Dynamic Instruction
// Note: If this code changes, the corresponding ret_addr_offset() and
//       compute_padding() functions will have to be adjusted.
instruct CallDynamicJavaDirect(method meth)
%{
  match(CallDynamicJava);
  effect(USE meth);

  ins_cost(300);
  format %{ "movq    rax, #Universe::non_oop_word()\n\t"
            "call,dynamic " %}
  opcode(0xE8); /* E8 cd */
  ins_encode(Java_Dynamic_Call(meth), call_epilog);
  ins_pipe(pipe_slow);
  ins_pc_relative(1);
  ins_alignment(4);
%}
//-----------------------------------------------------------------------------
// The CompiledIC represents a compiled inline cache.
//
// In order to make patching of the inline cache MT-safe, we only allow the following
// transitions (when not at a safepoint):
//
//
//         [1] --<--  Clean -->---  [1]
//            /       (null)      \
//           /                     \      /-<-\
//          /          [2]          \    /     \
//      Interpreted  ---------> Monomorphic     | [3]
//  (compiledICHolderOop)        (klassOop)     |
//          \                        /   \     /
//       [4] \                      / [4] \->-/
//            \->-  Megamorphic -<-/
//                  (methodOop)
//
// The text in paranteses () refere to the value of the inline cache receiver (mov instruction)
//
// The numbers in square brackets refere to the kind of transition:
// [1]: Initial fixup. Receiver it found from debug information
// [2]: Compilation of a method
// [3]: Recompilation of a method (note: only entry is changed. The klassOop must stay the same)
// [4]: Inline cache miss. We go directly to megamorphic call.
//
// The class automatically inserts transition stubs (using the InlineCacheBuffer) when an MT-unsafe
// transition is made to a stub.

The fallback of a monomorphic IC is SharedRuntime::resolve_virtual_call_C.

And there's SharedRuntime::handle_ic_miss_helper.

In a true polymorphic call site, this kind of strategy may perform worse than just a plain v-table virtual call. The example in this gist shows that it +UseFastAccessorMethods may still be faster than going through the compiled VEP


There's a piece of log saying monomorphic to interpreter via mkh. That comes from code/compiledIC.cpp, Call via method-klass-holder. That's changed to icholder in the NoPermGen project.

On 32-bit Windows, JDK6u26, run this example under OllyDbg,

public class TestUseFastAccessorMethods {
  private static int test(Foo[] objs) {
    int sum = 0;
    for (int i = 0; i < 500000; i++) {
      sum += objs[i % objs.length].foo(); // polymorphic callsite, virtual call not inlined
    }
    return sum;
  }

  public static void main(String[] args) throws Exception {
    Foo[] objs = new Foo[] { new A(), new B(), new C(), new D() };
    for (int i = 0; i < 6; i++) {
      if (i == 5) {
        System.out.println("press enter to continue");
        System.in.read();
      }
      int dummy = test(objs);
    }
  }
}

abstract class Foo {
  public abstract int foo();
}

class A extends Foo {
  private int a;

  @Override
  public int foo() {
    return a;
  }
}

class B extends Foo {
  private int b;

  @Override
  public int foo() {
    return b;
  }
}

class C extends Foo {
  private int c;

  @Override
  public int foo() {
    return c;
  }
}

class D extends Foo {
  private int d;

  @Override
  public int foo() {
    return d;
  }
}

java.exe -server -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly TestUseFastAccessorMethods

Gets the locations of the CompiledICs we're looking for, set a breakpoint on one of them, and then we get this:


call site:

009B7D1D    90                       nop
009B7D1E    B8 904DC403              mov eax,3C44D90
009B7D23    E8 A4030000              call 009B80CC

Vtable stub (megamorphic state out-of-line inline cache stub):

009B80CC    8B41 04                  mov eax,dword ptr ds:[ecx+4]   ; load klass ptr
009B80CF    8B98 44010000            mov ebx,dword ptr ds:[eax+144] ; load vtable entry of foo
009B80D5    FF63 4C                  jmp dword ptr ds:[ebx+4C]      ; jump to its from_compiled_entry (jump to VEP, not unverified entry point)
public class TestUseFastAccessorMethods {
private static int dummy;
private static long test(Foo[] objs) {
long begin = System.currentTimeMillis();
int sum = 0;
for (int i = 0; i < 60000000; i++) {
sum += objs[i % objs.length].foo(); // polymorphic callsite, virtual call not inlined
}
long end = System.currentTimeMillis();
dummy = sum;
return end - begin;
}
public static void main(String[] args) {
Foo[] objs = new Foo[] { new A(), new B(), new C(), new D() };
for (int i = 0; i < 6; i++) {
long time = test(objs);
if (i >= 3) {
System.out.println(time);
}
}
}
}
abstract class Foo {
public abstract int foo();
}
class A extends Foo {
private int a;
@Override
public int foo() {
return a;
}
}
class B extends Foo {
private int b;
@Override
public int foo() {
return b;
}
}
class C extends Foo {
private int c;
@Override
public int foo() {
return c;
}
}
class D extends Foo {
private int d;
@Override
public int foo() {
return d;
}
}
OpenJDK 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
VM option '+UseFastAccessorMethods'
VM option '+TraceICs'
VM option '+TraceCompiledIC'
VM option '+TraceInlineCacheClearing'
VM option '+TraceICBuffer'
VM option '+PrintAssembly'
Loaded disassembler from /home/sajia/jdk/6u25_x64/jre/lib/amd64/server/hsdis-amd64.so
Decoding compiled method 0x00002aaaab118a50:
Code:
[Disassembling for mach='i386:x86-64']
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} 'test' '([LFoo;)J' in 'TestUseFastAccessorMethods'
;; N193: # B1 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118bc0: mov $0x2af29d6f9620,%r10 ; {runtime_call}
0x00002aaaab118bca: rex.WB callq *%r10
0x00002aaaab118bcd: nop
0x00002aaaab118bce: nop
0x00002aaaab118bcf: nop
;; B1: # B15 B2 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118bd0: mov %eax,-0x8000(%rsp)
0x00002aaaab118bd7: push %rbp
0x00002aaaab118bd8: sub $0x30,%rsp
0x00002aaaab118bdc: mov 0x8(%rsi),%r13d
0x00002aaaab118be0: mov 0x28(%rsi),%rbp
0x00002aaaab118be4: mov 0x18(%rsi),%r14
0x00002aaaab118be8: mov 0x10(%rsi),%ebx
0x00002aaaab118beb: mov %rsi,%rdi
0x00002aaaab118bee: mov $0x2af29d7f4d40,%r10
0x00002aaaab118bf8: callq *%r10
0x00002aaaab118bfb: test %rbp,%rbp
0x00002aaaab118bfe: je 0x00002aaaab118da9
;; B2: # B17 B3 <- B1 Freq: 0.999
0x00002aaaab118c04: mov 0x8(%rbp),%r10d
0x00002aaaab118c08: mov 0x48(%r10),%r10
0x00002aaaab118c0c: mov $0xc44168e8,%r11 ; {oop('Foo'[])}
0x00002aaaab118c16: cmp %r11,%r10
0x00002aaaab118c19: jne 0x00002aaaab118dd5 ;*iload
; - TestUseFastAccessorMethods::test@9 (line 7)
;; B3: # B4 <- B2 Freq: 0.998999
;; B4: # B13 B5 <- B3 B15 Freq: 0.999999
0x00002aaaab118c1f: cmp $0x3938700,%r13d
0x00002aaaab118c26: jge 0x00002aaaab118d47 ;*if_icmpge
; - TestUseFastAccessorMethods::test@13 (line 7)
;; B5: # B16 B6 <- B4 Freq: 0.999999
0x00002aaaab118c2c: mov 0xc(%rbp),%r10d ;*arraylength
; - TestUseFastAccessorMethods::test@21 (line 8)
; implicit exception: dispatches to 0x00002aaaab118db0
;; B6: # B16 B7 <- B5 Freq: 0.999997
0x00002aaaab118c30: test %r10d,%r10d
0x00002aaaab118c33: je 0x00002aaaab118db0
;; B7: # B9 <- B6 Freq: 0.999996
0x00002aaaab118c39: mov %r13d,0x10(%rsp)
0x00002aaaab118c3e: jmp 0x00002aaaab118c4e
;; B8: # B9 <- B11 top-of-loop Freq: 87029.3
0x00002aaaab118c40: mov %r11d,0x10(%rsp)
0x00002aaaab118c45: mov (%rsp),%r14
0x00002aaaab118c49: mov 0xc(%rsp),%r10d ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
;; B9: # B14 B10 <- B7 B8 Loop: B9-B8 inner Freq: 87031.2
0x00002aaaab118c4e: mov 0x10(%rsp),%eax
0x00002aaaab118c52: cmp $0x80000000,%eax
0x00002aaaab118c57: jne 0x00002aaaab118c61
0x00002aaaab118c59: xor %edx,%edx
0x00002aaaab118c5b: cmp $0xffffffffffffffff,%r10d
0x00002aaaab118c5f: je 0x00002aaaab118c65
0x00002aaaab118c61: cltd
0x00002aaaab118c62: idiv %r10d ;*irem
; - TestUseFastAccessorMethods::test@22 (line 8)
0x00002aaaab118c65: cmp %r10d,%edx
0x00002aaaab118c68: jae 0x00002aaaab118d71 ;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
;; B10: # B18 B11 <- B9 Freq: 87031.1
0x00002aaaab118c6e: mov %r10d,0xc(%rsp)
0x00002aaaab118c73: mov %ebx,0x8(%rsp)
0x00002aaaab118c77: mov %r14,(%rsp)
0x00002aaaab118c7b: mov 0x10(%rbp,%rdx,4),%r11d ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
0x00002aaaab118c80: mov %r11,%rsi
0x00002aaaab118c83: push %r10
0x00002aaaab118c85: mov $0x2af29de99700,%r10 ; {external_word}
0x00002aaaab118c8f: cmp (%r10),%r12
0x00002aaaab118c92: je 0x00002aaaab118d17
0x00002aaaab118c98: mov %rsp,-0x28(%rsp)
0x00002aaaab118c9d: sub $0x80,%rsp
0x00002aaaab118ca4: mov %rax,0x78(%rsp)
0x00002aaaab118ca9: mov %rcx,0x70(%rsp)
0x00002aaaab118cae: mov %rdx,0x68(%rsp)
0x00002aaaab118cb3: mov %rbx,0x60(%rsp)
0x00002aaaab118cb8: mov %rbp,0x50(%rsp)
0x00002aaaab118cbd: mov %rsi,0x48(%rsp)
0x00002aaaab118cc2: mov %rdi,0x40(%rsp)
0x00002aaaab118cc7: mov %r8,0x38(%rsp)
0x00002aaaab118ccc: mov %r9,0x30(%rsp)
0x00002aaaab118cd1: mov %r10,0x28(%rsp)
0x00002aaaab118cd6: mov %r11,0x20(%rsp)
0x00002aaaab118cdb: mov %r12,0x18(%rsp)
0x00002aaaab118ce0: mov %r13,0x10(%rsp)
0x00002aaaab118ce5: mov %r14,0x8(%rsp)
0x00002aaaab118cea: mov %r15,(%rsp)
0x00002aaaab118cee: mov $0x2af29d985228,%rdi ; {external_word}
0x00002aaaab118cf8: mov $0x2aaaab118c98,%rsi ; {internal_word}
0x00002aaaab118d02: mov %rsp,%rdx
0x00002aaaab118d05: and $0xfffffffffffffff0,%rsp
0x00002aaaab118d09: mov $0x2af29cefc860,%r10 ; {runtime_call}
0x00002aaaab118d13: rex.WB callq *%r10
0x00002aaaab118d16: hlt
0x00002aaaab118d17: pop %r10
0x00002aaaab118d19: mov $0xffffffffffffffff,%rax ; {oop(NULL)}
0x00002aaaab118d23: callq 0x00002aaaab0f2d20 ; OopMap{rbp=Oop off=360}
;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
; {virtual_call}
;; B11: # B8 B12 <- B10 Freq: 87029.3
0x00002aaaab118d28: mov 0x8(%rsp),%ebx
0x00002aaaab118d2c: add %eax,%ebx ;*iadd
; - TestUseFastAccessorMethods::test@27 (line 8)
0x00002aaaab118d2e: mov 0x10(%rsp),%r11d
0x00002aaaab118d33: inc %r11d ;*iinc
; - TestUseFastAccessorMethods::test@29 (line 7)
0x00002aaaab118d36: cmp $0x3938700,%r11d
0x00002aaaab118d3d: jl 0x00002aaaab118c40
;; B12: # B13 <- B11 Freq: 0.0414988
0x00002aaaab118d43: mov (%rsp),%r14 ;*if_icmpge
; - TestUseFastAccessorMethods::test@13 (line 7)
;; B13: # N193 <- B12 B4 Freq: 0.0414993
0x00002aaaab118d47: mov $0x2af29d6fa060,%r10
0x00002aaaab118d51: callq *%r10 ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@35 (line 10)
0x00002aaaab118d54: sub %r14,%rax ;*lsub
; - TestUseFastAccessorMethods::test@47 (line 12)
0x00002aaaab118d57: mov $0xedc4abe0,%r10 ; {oop(a 'java/lang/Class' = 'TestUseFastAccessorMethods')}
0x00002aaaab118d61: mov %ebx,0x70(%r10) ;*putstatic dummy
; - TestUseFastAccessorMethods::test@41 (line 11)
0x00002aaaab118d65: add $0x30,%rsp
0x00002aaaab118d69: pop %rbp
0x00002aaaab118d6a: test %eax,-0x420d70(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab118d70: retq
;; B14: # N193 <- B9 Freq: 0.0881869
0x00002aaaab118d71: mov $0xffffffe4,%esi
0x00002aaaab118d76: mov %r14,(%rsp)
0x00002aaaab118d7a: mov %rax,-0x8(%rsp)
0x00002aaaab118d7f: mov 0x10(%rsp),%eax
0x00002aaaab118d83: mov %eax,0x8(%rsp)
0x00002aaaab118d87: mov -0x8(%rsp),%rax
0x00002aaaab118d8c: mov %ebx,0xc(%rsp)
0x00002aaaab118d90: mov %edx,0x18(%rsp)
0x00002aaaab118d94: nop
0x00002aaaab118d95: nop
0x00002aaaab118d96: nop
0x00002aaaab118d97: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=476}
;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
; {runtime_call}
0x00002aaaab118d9c: mov $0x2af29d6f9620,%r10 ; {runtime_call}
0x00002aaaab118da6: rex.WB callq *%r10 ;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
;; B15: # B4 <- B1 Freq: 0.000999987
0x00002aaaab118da9: xor %ebp,%ebp
0x00002aaaab118dab: jmpq 0x00002aaaab118c1f
;; B16: # N193 <- B6 B5 Freq: 2.02655e-06
0x00002aaaab118db0: mov $0xffffff86,%esi
0x00002aaaab118db5: mov %r14,(%rsp)
0x00002aaaab118db9: mov %ebx,0x8(%rsp)
0x00002aaaab118dbd: mov %r13d,0xc(%rsp)
0x00002aaaab118dc2: nop
0x00002aaaab118dc3: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=520}
;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
; {runtime_call}
0x00002aaaab118dc8: mov $0x2af29d6f9620,%r10 ; {runtime_call}
0x00002aaaab118dd2: rex.WB callq *%r10
;; B17: # N193 <- B2 Freq: 9.99e-07
0x00002aaaab118dd5: mov $0xffffffad,%esi
0x00002aaaab118dda: mov %r14,(%rsp)
0x00002aaaab118dde: mov %ebx,0x8(%rsp)
0x00002aaaab118de2: mov %r13d,0xc(%rsp)
0x00002aaaab118de7: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=556}
;*iload
; - TestUseFastAccessorMethods::test@9 (line 7)
; {runtime_call}
0x00002aaaab118dec: mov $0x2af29d6f9620,%r10 ; {runtime_call}
0x00002aaaab118df6: rex.WB callq *%r10 ;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
;; B18: # N193 <- B10 Freq: 0.870311
0x00002aaaab118df9: mov %rax,%rsi
0x00002aaaab118dfc: add $0x30,%rsp
0x00002aaaab118e00: pop %rbp
0x00002aaaab118e01: jmpq 0x00002aaaab117360 ; {runtime_call}
0x00002aaaab118e06: hlt
0x00002aaaab118e07: hlt
0x00002aaaab118e08: hlt
0x00002aaaab118e09: hlt
0x00002aaaab118e0a: hlt
0x00002aaaab118e0b: hlt
0x00002aaaab118e0c: hlt
0x00002aaaab118e0d: hlt
0x00002aaaab118e0e: hlt
0x00002aaaab118e0f: hlt
0x00002aaaab118e10: hlt
0x00002aaaab118e11: hlt
0x00002aaaab118e12: hlt
0x00002aaaab118e13: hlt
0x00002aaaab118e14: hlt
0x00002aaaab118e15: hlt
0x00002aaaab118e16: hlt
0x00002aaaab118e17: hlt
0x00002aaaab118e18: hlt
0x00002aaaab118e19: hlt
0x00002aaaab118e1a: hlt
0x00002aaaab118e1b: hlt
0x00002aaaab118e1c: hlt
0x00002aaaab118e1d: hlt
0x00002aaaab118e1e: hlt
0x00002aaaab118e1f: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab118e20: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab118e25: callq 0x00002aaaab118e2a
0x00002aaaab118e2a: subq $0x5,(%rsp)
0x00002aaaab118e2f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab118e34: int3
0x00002aaaab118e35: int3
0x00002aaaab118e36: int3
0x00002aaaab118e37: int3
create transition stub for 0x00002aaaab118d23
Inline cache at 0x00002aaaab118d23, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab118d23: monomorphic to interpreter via mkh
create transition stub for 0x00002aaaab118d23
Inline cache at 0x00002aaaab118d23, calling interpreted 0x00002aaaab0f3904 changing destination to 0x00002aaaab0f41c0
IC@0x00002aaaab118d23: to megamorphic {method} 'foo' '()I' in 'A' entry: 0x00002aaaab118330
[updating inline caches with 3 stubs]
Inline cache at 0x00002aaaab118d23, calling 0x00002aaaab118330 changing oop to 0x00000000c4416da0
Inline cache at 0x00002aaaab118d23, calling 0x00002aaaab118330 changing destination to 0x00002aaaab118330
Decoding compiled method 0x00002aaaab117dd0:
Code:
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} 'test' '([LFoo;)J' in 'TestUseFastAccessorMethods'
# parm0: rsi:rsi = '[LFoo;'
# [sp+0x40] (sp of caller)
;; N1: # B1 <- B8 B7 B9 Freq: 1
;; B1: # B8 B2 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab117f20: mov %eax,-0x8000(%rsp)
0x00002aaaab117f27: push %rbp
0x00002aaaab117f28: sub $0x30,%rsp ;*synchronization entry
; - TestUseFastAccessorMethods::test@-1 (line 5)
0x00002aaaab117f2c: mov %rsi,%rbx
0x00002aaaab117f2f: mov $0x2af29d6fa060,%r10
0x00002aaaab117f39: callq *%r10 ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@0 (line 5)
0x00002aaaab117f3c: mov %rax,(%rsp)
0x00002aaaab117f40: mov %rbx,%r10
0x00002aaaab117f43: mov 0xc(%r10),%r8d ;*arraylength
; - TestUseFastAccessorMethods::test@21 (line 8)
; implicit exception: dispatches to 0x00002aaaab11807e
;; B2: # B8 B3 <- B1 Freq: 0.999999
0x00002aaaab117f47: test %r8d,%r8d
0x00002aaaab117f4a: je 0x00002aaaab11807e ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
;; B3: # B5 <- B2 Freq: 0.999998
0x00002aaaab117f50: xor %edx,%edx
0x00002aaaab117f52: xor %r11d,%r11d
0x00002aaaab117f55: xor %ebp,%ebp
0x00002aaaab117f57: mov %r8d,0x14(%rsp)
0x00002aaaab117f5c: mov %r11d,0x10(%rsp)
0x00002aaaab117f61: jmp 0x00002aaaab117f88
;; B4: # B5 <- B6 top-of-loop Freq: 95446.6
0x00002aaaab117f63: mov %r10d,%eax
0x00002aaaab117f66: mov 0x14(%rsp),%r11d
0x00002aaaab117f6b: cmp $0x80000000,%eax
0x00002aaaab117f70: jne 0x00002aaaab117f7a
0x00002aaaab117f72: xor %edx,%edx
0x00002aaaab117f74: cmp $0xffffffffffffffff,%r11d
0x00002aaaab117f78: je 0x00002aaaab117f7e
0x00002aaaab117f7a: cltd
0x00002aaaab117f7b: idiv %r11d ;*irem
; - TestUseFastAccessorMethods::test@22 (line 8)
0x00002aaaab117f7e: mov %r10d,0x10(%rsp)
0x00002aaaab117f83: mov 0x8(%rsp),%r10 ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
;; B5: # B9 B6 <- B3 B4 Loop: B5-B4 inner Freq: 95448.5
0x00002aaaab117f88: mov 0x10(%r10,%rdx,4),%r11d
0x00002aaaab117f8d: mov %r10,0x8(%rsp)
0x00002aaaab117f92: mov %r11,%rsi
0x00002aaaab117f95: push %r10
0x00002aaaab117f97: mov $0x2af29de99700,%r10 ; {external_word}
0x00002aaaab117fa1: cmp (%r10),%r12
0x00002aaaab117fa4: je 0x00002aaaab118029
0x00002aaaab117faa: mov %rsp,-0x28(%rsp)
0x00002aaaab117faf: sub $0x80,%rsp
0x00002aaaab117fb6: mov %rax,0x78(%rsp)
0x00002aaaab117fbb: mov %rcx,0x70(%rsp)
0x00002aaaab117fc0: mov %rdx,0x68(%rsp)
0x00002aaaab117fc5: mov %rbx,0x60(%rsp)
0x00002aaaab117fca: mov %rbp,0x50(%rsp)
0x00002aaaab117fcf: mov %rsi,0x48(%rsp)
0x00002aaaab117fd4: mov %rdi,0x40(%rsp)
0x00002aaaab117fd9: mov %r8,0x38(%rsp)
0x00002aaaab117fde: mov %r9,0x30(%rsp)
0x00002aaaab117fe3: mov %r10,0x28(%rsp)
0x00002aaaab117fe8: mov %r11,0x20(%rsp)
0x00002aaaab117fed: mov %r12,0x18(%rsp)
0x00002aaaab117ff2: mov %r13,0x10(%rsp)
0x00002aaaab117ff7: mov %r14,0x8(%rsp)
0x00002aaaab117ffc: mov %r15,(%rsp)
0x00002aaaab118000: mov $0x2af29d985228,%rdi ; {external_word}
0x00002aaaab11800a: mov $0x2aaaab117faa,%rsi ; {internal_word}
0x00002aaaab118014: mov %rsp,%rdx
0x00002aaaab118017: and $0xfffffffffffffff0,%rsp
0x00002aaaab11801b: mov $0x2af29cefc860,%r10 ; {runtime_call}
0x00002aaaab118025: rex.WB callq *%r10
0x00002aaaab118028: hlt
0x00002aaaab118029: pop %r10 ;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
0x00002aaaab11802b: nop
0x00002aaaab11802c: nop
0x00002aaaab11802d: mov $0xffffffffffffffff,%rax ; {oop(NULL)}
0x00002aaaab118037: callq 0x00002aaaab0f2d20 ; OopMap{[8]=Oop off=284}
;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
; {virtual_call}
;; B6: # B4 B7 <- B5 Freq: 95446.6
0x00002aaaab11803c: add %eax,%ebp ;*iadd
; - TestUseFastAccessorMethods::test@27 (line 8)
0x00002aaaab11803e: mov 0x10(%rsp),%r10d
0x00002aaaab118043: inc %r10d ;*iinc
; - TestUseFastAccessorMethods::test@29 (line 7)
0x00002aaaab118046: cmp $0x3938700,%r10d
0x00002aaaab11804d: jl 0x00002aaaab117f63 ;*if_icmpge
; - TestUseFastAccessorMethods::test@13 (line 7)
;; B7: # N1 <- B6 Freq: 0.0455125
0x00002aaaab118053: mov $0x2af29d6fa060,%r10
0x00002aaaab11805d: callq *%r10 ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@35 (line 10)
0x00002aaaab118060: sub (%rsp),%rax ;*lsub
; - TestUseFastAccessorMethods::test@47 (line 12)
0x00002aaaab118064: mov $0xedc4abe0,%r10 ; {oop(a 'java/lang/Class' = 'TestUseFastAccessorMethods')}
0x00002aaaab11806e: mov %ebp,0x70(%r10) ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@0 (line 5)
0x00002aaaab118072: add $0x30,%rsp
0x00002aaaab118076: pop %rbp
0x00002aaaab118077: test %eax,-0x42007d(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab11807d: retq
;; B8: # N1 <- B2 B1 Freq: 2.02656e-06
0x00002aaaab11807e: mov $0xffffff86,%esi
0x00002aaaab118083: mov %r10,%rbp
0x00002aaaab118086: nop
0x00002aaaab118087: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=364}
;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
; {runtime_call}
0x00002aaaab11808c: mov $0x2af29d6f9620,%r10 ; {runtime_call}
0x00002aaaab118096: rex.WB callq *%r10 ;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
;; B9: # N1 <- B5 Freq: 0.954485
0x00002aaaab118099: mov %rax,%rsi
0x00002aaaab11809c: add $0x30,%rsp
0x00002aaaab1180a0: pop %rbp
0x00002aaaab1180a1: jmpq 0x00002aaaab117360 ; {runtime_call}
0x00002aaaab1180a6: hlt
0x00002aaaab1180a7: hlt
0x00002aaaab1180a8: hlt
0x00002aaaab1180a9: hlt
0x00002aaaab1180aa: hlt
0x00002aaaab1180ab: hlt
0x00002aaaab1180ac: hlt
0x00002aaaab1180ad: hlt
0x00002aaaab1180ae: hlt
0x00002aaaab1180af: hlt
0x00002aaaab1180b0: hlt
0x00002aaaab1180b1: hlt
0x00002aaaab1180b2: hlt
0x00002aaaab1180b3: hlt
0x00002aaaab1180b4: hlt
0x00002aaaab1180b5: hlt
0x00002aaaab1180b6: hlt
0x00002aaaab1180b7: hlt
0x00002aaaab1180b8: hlt
0x00002aaaab1180b9: hlt
0x00002aaaab1180ba: hlt
0x00002aaaab1180bb: hlt
0x00002aaaab1180bc: hlt
0x00002aaaab1180bd: hlt
0x00002aaaab1180be: hlt
0x00002aaaab1180bf: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab1180c0: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab1180c5: callq 0x00002aaaab1180ca
0x00002aaaab1180ca: subq $0x5,(%rsp)
0x00002aaaab1180cf: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab1180d4: int3
0x00002aaaab1180d5: int3
0x00002aaaab1180d6: int3
0x00002aaaab1180d7: int3
create transition stub for 0x00002aaaab118037
Inline cache at 0x00002aaaab118037, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab118037: monomorphic to interpreter via mkh
create transition stub for 0x00002aaaab118037
Inline cache at 0x00002aaaab118037, calling interpreted 0x00002aaaab0f3904 changing destination to 0x00002aaaab0f41c0
IC@0x00002aaaab118037: to megamorphic {method} 'foo' '()I' in 'B' entry: 0x00002aaaab118330
[updating inline caches with 3 stubs]
Inline cache at 0x00002aaaab118037, calling 0x00002aaaab118330 changing oop to 0x00000000c4417398
Inline cache at 0x00002aaaab118037, calling 0x00002aaaab118330 changing destination to 0x00002aaaab118330
2127
2128
2126
OpenJDK 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
VM option '-UseFastAccessorMethods'
VM option '+TraceICs'
VM option '+TraceCompiledIC'
VM option '+TraceInlineCacheClearing'
VM option '+TraceICBuffer'
VM option '+PrintAssembly'
Loaded disassembler from /home/sajia/jdk/6u25_x64/jre/lib/amd64/server/hsdis-amd64.so
Decoding compiled method 0x00002aaaab118e90:
Code:
[Disassembling for mach='i386:x86-64']
[Entry Point]
[Constants]
# {method} 'foo' '()I' in 'A'
# [sp+0x20] (sp of caller)
;; N16: # B1 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118fc0: mov 0x8(%rsi),%r10d
0x00002aaaab118fc4: cmp %r10,%rax
0x00002aaaab118fc7: jne 0x00002aaaab0f2920 ; {runtime_call}
0x00002aaaab118fcd: nop
0x00002aaaab118fce: nop
0x00002aaaab118fcf: nop
[Verified Entry Point]
;; B1: # N16 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118fd0: push %rbp
0x00002aaaab118fd1: sub $0x10,%rsp
0x00002aaaab118fd5: nop ;*synchronization entry
; - A::foo@-1 (line 35)
0x00002aaaab118fd6: mov 0xc(%rsi),%eax ;*getfield a
; - A::foo@1 (line 35)
0x00002aaaab118fd9: add $0x10,%rsp
0x00002aaaab118fdd: pop %rbp
0x00002aaaab118fde: test %eax,-0x420fe4(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab118fe4: retq
0x00002aaaab118fe5: hlt
0x00002aaaab118fe6: hlt
0x00002aaaab118fe7: hlt
0x00002aaaab118fe8: hlt
0x00002aaaab118fe9: hlt
0x00002aaaab118fea: hlt
0x00002aaaab118feb: hlt
0x00002aaaab118fec: hlt
0x00002aaaab118fed: hlt
0x00002aaaab118fee: hlt
0x00002aaaab118fef: hlt
0x00002aaaab118ff0: hlt
0x00002aaaab118ff1: hlt
0x00002aaaab118ff2: hlt
0x00002aaaab118ff3: hlt
0x00002aaaab118ff4: hlt
0x00002aaaab118ff5: hlt
0x00002aaaab118ff6: hlt
0x00002aaaab118ff7: hlt
0x00002aaaab118ff8: hlt
0x00002aaaab118ff9: hlt
0x00002aaaab118ffa: hlt
0x00002aaaab118ffb: hlt
0x00002aaaab118ffc: hlt
0x00002aaaab118ffd: hlt
0x00002aaaab118ffe: hlt
0x00002aaaab118fff: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab119000: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab119005: callq 0x00002aaaab11900a
0x00002aaaab11900a: subq $0x5,(%rsp)
0x00002aaaab11900f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab119014: int3
0x00002aaaab119015: int3
0x00002aaaab119016: int3
0x00002aaaab119017: int3
Decoding compiled method 0x00002aaaab118c90:
Code:
[Entry Point]
[Constants]
# {method} 'foo' '()I' in 'B'
# [sp+0x20] (sp of caller)
;; N16: # B1 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118dc0: mov 0x8(%rsi),%r10d
0x00002aaaab118dc4: cmp %r10,%rax
0x00002aaaab118dc7: jne 0x00002aaaab0f2920 ; {runtime_call}
0x00002aaaab118dcd: nop
0x00002aaaab118dce: nop
0x00002aaaab118dcf: nop
[Verified Entry Point]
;; B1: # N16 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118dd0: push %rbp
0x00002aaaab118dd1: sub $0x10,%rsp
0x00002aaaab118dd5: nop ;*synchronization entry
; - B::foo@-1 (line 44)
0x00002aaaab118dd6: mov 0xc(%rsi),%eax ;*getfield b
; - B::foo@1 (line 44)
0x00002aaaab118dd9: add $0x10,%rsp
0x00002aaaab118ddd: pop %rbp
0x00002aaaab118dde: test %eax,-0x420de4(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab118de4: retq
0x00002aaaab118de5: hlt
0x00002aaaab118de6: hlt
0x00002aaaab118de7: hlt
0x00002aaaab118de8: hlt
0x00002aaaab118de9: hlt
0x00002aaaab118dea: hlt
0x00002aaaab118deb: hlt
0x00002aaaab118dec: hlt
0x00002aaaab118ded: hlt
0x00002aaaab118dee: hlt
0x00002aaaab118def: hlt
0x00002aaaab118df0: hlt
0x00002aaaab118df1: hlt
0x00002aaaab118df2: hlt
0x00002aaaab118df3: hlt
0x00002aaaab118df4: hlt
0x00002aaaab118df5: hlt
0x00002aaaab118df6: hlt
0x00002aaaab118df7: hlt
0x00002aaaab118df8: hlt
0x00002aaaab118df9: hlt
0x00002aaaab118dfa: hlt
0x00002aaaab118dfb: hlt
0x00002aaaab118dfc: hlt
0x00002aaaab118dfd: hlt
0x00002aaaab118dfe: hlt
0x00002aaaab118dff: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab118e00: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab118e05: callq 0x00002aaaab118e0a
0x00002aaaab118e0a: subq $0x5,(%rsp)
0x00002aaaab118e0f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab118e14: int3
0x00002aaaab118e15: int3
0x00002aaaab118e16: int3
0x00002aaaab118e17: int3
Decoding compiled method 0x00002aaaab118a90:
Code:
[Entry Point]
[Constants]
# {method} 'foo' '()I' in 'C'
# [sp+0x20] (sp of caller)
;; N16: # B1 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118bc0: mov 0x8(%rsi),%r10d
0x00002aaaab118bc4: cmp %r10,%rax
0x00002aaaab118bc7: jne 0x00002aaaab0f2920 ; {runtime_call}
0x00002aaaab118bcd: nop
0x00002aaaab118bce: nop
0x00002aaaab118bcf: nop
[Verified Entry Point]
;; B1: # N16 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab118bd0: push %rbp
0x00002aaaab118bd1: sub $0x10,%rsp
0x00002aaaab118bd5: nop ;*synchronization entry
; - C::foo@-1 (line 53)
0x00002aaaab118bd6: mov 0xc(%rsi),%eax ;*getfield c
; - C::foo@1 (line 53)
0x00002aaaab118bd9: add $0x10,%rsp
0x00002aaaab118bdd: pop %rbp
0x00002aaaab118bde: test %eax,-0x420be4(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab118be4: retq
0x00002aaaab118be5: hlt
0x00002aaaab118be6: hlt
0x00002aaaab118be7: hlt
0x00002aaaab118be8: hlt
0x00002aaaab118be9: hlt
0x00002aaaab118bea: hlt
0x00002aaaab118beb: hlt
0x00002aaaab118bec: hlt
0x00002aaaab118bed: hlt
0x00002aaaab118bee: hlt
0x00002aaaab118bef: hlt
0x00002aaaab118bf0: hlt
0x00002aaaab118bf1: hlt
0x00002aaaab118bf2: hlt
0x00002aaaab118bf3: hlt
0x00002aaaab118bf4: hlt
0x00002aaaab118bf5: hlt
0x00002aaaab118bf6: hlt
0x00002aaaab118bf7: hlt
0x00002aaaab118bf8: hlt
0x00002aaaab118bf9: hlt
0x00002aaaab118bfa: hlt
0x00002aaaab118bfb: hlt
0x00002aaaab118bfc: hlt
0x00002aaaab118bfd: hlt
0x00002aaaab118bfe: hlt
0x00002aaaab118bff: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab118c00: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab118c05: callq 0x00002aaaab118c0a
0x00002aaaab118c0a: subq $0x5,(%rsp)
0x00002aaaab118c0f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab118c14: int3
0x00002aaaab118c15: int3
0x00002aaaab118c16: int3
0x00002aaaab118c17: int3
Decoding compiled method 0x00002aaaab118890:
Code:
[Entry Point]
[Constants]
# {method} 'foo' '()I' in 'D'
# [sp+0x20] (sp of caller)
;; N16: # B1 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab1189c0: mov 0x8(%rsi),%r10d
0x00002aaaab1189c4: cmp %r10,%rax
0x00002aaaab1189c7: jne 0x00002aaaab0f2920 ; {runtime_call}
0x00002aaaab1189cd: nop
0x00002aaaab1189ce: nop
0x00002aaaab1189cf: nop
[Verified Entry Point]
;; B1: # N16 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab1189d0: push %rbp
0x00002aaaab1189d1: sub $0x10,%rsp
0x00002aaaab1189d5: nop ;*synchronization entry
; - D::foo@-1 (line 62)
0x00002aaaab1189d6: mov 0xc(%rsi),%eax ;*getfield d
; - D::foo@1 (line 62)
0x00002aaaab1189d9: add $0x10,%rsp
0x00002aaaab1189dd: pop %rbp
0x00002aaaab1189de: test %eax,-0x4209e4(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab1189e4: retq
0x00002aaaab1189e5: hlt
0x00002aaaab1189e6: hlt
0x00002aaaab1189e7: hlt
0x00002aaaab1189e8: hlt
0x00002aaaab1189e9: hlt
0x00002aaaab1189ea: hlt
0x00002aaaab1189eb: hlt
0x00002aaaab1189ec: hlt
0x00002aaaab1189ed: hlt
0x00002aaaab1189ee: hlt
0x00002aaaab1189ef: hlt
0x00002aaaab1189f0: hlt
0x00002aaaab1189f1: hlt
0x00002aaaab1189f2: hlt
0x00002aaaab1189f3: hlt
0x00002aaaab1189f4: hlt
0x00002aaaab1189f5: hlt
0x00002aaaab1189f6: hlt
0x00002aaaab1189f7: hlt
0x00002aaaab1189f8: hlt
0x00002aaaab1189f9: hlt
0x00002aaaab1189fa: hlt
0x00002aaaab1189fb: hlt
0x00002aaaab1189fc: hlt
0x00002aaaab1189fd: hlt
0x00002aaaab1189fe: hlt
0x00002aaaab1189ff: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab118a00: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab118a05: callq 0x00002aaaab118a0a
0x00002aaaab118a0a: subq $0x5,(%rsp)
0x00002aaaab118a0f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab118a14: int3
0x00002aaaab118a15: int3
0x00002aaaab118a16: int3
0x00002aaaab118a17: int3
Decoding compiled method 0x00002aaaab118250:
Code:
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} 'test' '([LFoo;)J' in 'TestUseFastAccessorMethods'
;; N193: # B1 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab1183c0: mov $0x2b6f247e0620,%r10 ; {runtime_call}
0x00002aaaab1183ca: rex.WB callq *%r10
0x00002aaaab1183cd: nop
0x00002aaaab1183ce: nop
0x00002aaaab1183cf: nop
;; B1: # B15 B2 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab1183d0: mov %eax,-0x8000(%rsp)
0x00002aaaab1183d7: push %rbp
0x00002aaaab1183d8: sub $0x30,%rsp
0x00002aaaab1183dc: mov 0x8(%rsi),%r13d
0x00002aaaab1183e0: mov 0x28(%rsi),%rbp
0x00002aaaab1183e4: mov 0x18(%rsi),%r14
0x00002aaaab1183e8: mov 0x10(%rsi),%ebx
0x00002aaaab1183eb: mov %rsi,%rdi
0x00002aaaab1183ee: mov $0x2b6f248dbd40,%r10
0x00002aaaab1183f8: callq *%r10
0x00002aaaab1183fb: test %rbp,%rbp
0x00002aaaab1183fe: je 0x00002aaaab1185a9
;; B2: # B17 B3 <- B1 Freq: 0.999
0x00002aaaab118404: mov 0x8(%rbp),%r10d
0x00002aaaab118408: mov 0x48(%r10),%r10
0x00002aaaab11840c: mov $0xc44168e8,%r11 ; {oop('Foo'[])}
0x00002aaaab118416: cmp %r11,%r10
0x00002aaaab118419: jne 0x00002aaaab1185d5 ;*iload
; - TestUseFastAccessorMethods::test@9 (line 7)
;; B3: # B4 <- B2 Freq: 0.998999
;; B4: # B13 B5 <- B3 B15 Freq: 0.999999
0x00002aaaab11841f: cmp $0x3938700,%r13d
0x00002aaaab118426: jge 0x00002aaaab118547 ;*if_icmpge
; - TestUseFastAccessorMethods::test@13 (line 7)
;; B5: # B16 B6 <- B4 Freq: 0.999999
0x00002aaaab11842c: mov 0xc(%rbp),%r10d ;*arraylength
; - TestUseFastAccessorMethods::test@21 (line 8)
; implicit exception: dispatches to 0x00002aaaab1185b0
;; B6: # B16 B7 <- B5 Freq: 0.999997
0x00002aaaab118430: test %r10d,%r10d
0x00002aaaab118433: je 0x00002aaaab1185b0
;; B7: # B9 <- B6 Freq: 0.999996
0x00002aaaab118439: mov %r13d,0x10(%rsp)
0x00002aaaab11843e: jmp 0x00002aaaab11844e
;; B8: # B9 <- B11 top-of-loop Freq: 87029.3
0x00002aaaab118440: mov %r11d,0x10(%rsp)
0x00002aaaab118445: mov (%rsp),%r14
0x00002aaaab118449: mov 0xc(%rsp),%r10d ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
;; B9: # B14 B10 <- B7 B8 Loop: B9-B8 inner Freq: 87031.2
0x00002aaaab11844e: mov 0x10(%rsp),%eax
0x00002aaaab118452: cmp $0x80000000,%eax
0x00002aaaab118457: jne 0x00002aaaab118461
0x00002aaaab118459: xor %edx,%edx
0x00002aaaab11845b: cmp $0xffffffffffffffff,%r10d
0x00002aaaab11845f: je 0x00002aaaab118465
0x00002aaaab118461: cltd
0x00002aaaab118462: idiv %r10d ;*irem
; - TestUseFastAccessorMethods::test@22 (line 8)
0x00002aaaab118465: cmp %r10d,%edx
0x00002aaaab118468: jae 0x00002aaaab118571 ;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
;; B10: # B18 B11 <- B9 Freq: 87031.1
0x00002aaaab11846e: mov %r10d,0xc(%rsp)
0x00002aaaab118473: mov %ebx,0x8(%rsp)
0x00002aaaab118477: mov %r14,(%rsp)
0x00002aaaab11847b: mov 0x10(%rbp,%rdx,4),%r11d ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
0x00002aaaab118480: mov %r11,%rsi
0x00002aaaab118483: push %r10
0x00002aaaab118485: mov $0x2b6f24f80700,%r10 ; {external_word}
0x00002aaaab11848f: cmp (%r10),%r12
0x00002aaaab118492: je 0x00002aaaab118517
0x00002aaaab118498: mov %rsp,-0x28(%rsp)
0x00002aaaab11849d: sub $0x80,%rsp
0x00002aaaab1184a4: mov %rax,0x78(%rsp)
0x00002aaaab1184a9: mov %rcx,0x70(%rsp)
0x00002aaaab1184ae: mov %rdx,0x68(%rsp)
0x00002aaaab1184b3: mov %rbx,0x60(%rsp)
0x00002aaaab1184b8: mov %rbp,0x50(%rsp)
0x00002aaaab1184bd: mov %rsi,0x48(%rsp)
0x00002aaaab1184c2: mov %rdi,0x40(%rsp)
0x00002aaaab1184c7: mov %r8,0x38(%rsp)
0x00002aaaab1184cc: mov %r9,0x30(%rsp)
0x00002aaaab1184d1: mov %r10,0x28(%rsp)
0x00002aaaab1184d6: mov %r11,0x20(%rsp)
0x00002aaaab1184db: mov %r12,0x18(%rsp)
0x00002aaaab1184e0: mov %r13,0x10(%rsp)
0x00002aaaab1184e5: mov %r14,0x8(%rsp)
0x00002aaaab1184ea: mov %r15,(%rsp)
0x00002aaaab1184ee: mov $0x2b6f24a6c228,%rdi ; {external_word}
0x00002aaaab1184f8: mov $0x2aaaab118498,%rsi ; {internal_word}
0x00002aaaab118502: mov %rsp,%rdx
0x00002aaaab118505: and $0xfffffffffffffff0,%rsp
0x00002aaaab118509: mov $0x2b6f23fe3860,%r10 ; {runtime_call}
0x00002aaaab118513: rex.WB callq *%r10
0x00002aaaab118516: hlt
0x00002aaaab118517: pop %r10
0x00002aaaab118519: mov $0xffffffffffffffff,%rax ; {oop(NULL)}
0x00002aaaab118523: callq 0x00002aaaab0f2d20 ; OopMap{rbp=Oop off=360}
;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
; {virtual_call}
;; B11: # B8 B12 <- B10 Freq: 87029.3
0x00002aaaab118528: mov 0x8(%rsp),%ebx
0x00002aaaab11852c: add %eax,%ebx ;*iadd
; - TestUseFastAccessorMethods::test@27 (line 8)
0x00002aaaab11852e: mov 0x10(%rsp),%r11d
0x00002aaaab118533: inc %r11d ;*iinc
; - TestUseFastAccessorMethods::test@29 (line 7)
0x00002aaaab118536: cmp $0x3938700,%r11d
0x00002aaaab11853d: jl 0x00002aaaab118440
;; B12: # B13 <- B11 Freq: 0.0414988
0x00002aaaab118543: mov (%rsp),%r14 ;*if_icmpge
; - TestUseFastAccessorMethods::test@13 (line 7)
;; B13: # N193 <- B12 B4 Freq: 0.0414993
0x00002aaaab118547: mov $0x2b6f247e1060,%r10
0x00002aaaab118551: callq *%r10 ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@35 (line 10)
0x00002aaaab118554: sub %r14,%rax ;*lsub
; - TestUseFastAccessorMethods::test@47 (line 12)
0x00002aaaab118557: mov $0xedc4abe0,%r10 ; {oop(a 'java/lang/Class' = 'TestUseFastAccessorMethods')}
0x00002aaaab118561: mov %ebx,0x70(%r10) ;*putstatic dummy
; - TestUseFastAccessorMethods::test@41 (line 11)
0x00002aaaab118565: add $0x30,%rsp
0x00002aaaab118569: pop %rbp
0x00002aaaab11856a: test %eax,-0x420570(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab118570: retq
;; B14: # N193 <- B9 Freq: 0.0881869
0x00002aaaab118571: mov $0xffffffe4,%esi
0x00002aaaab118576: mov %r14,(%rsp)
0x00002aaaab11857a: mov %rax,-0x8(%rsp)
0x00002aaaab11857f: mov 0x10(%rsp),%eax
0x00002aaaab118583: mov %eax,0x8(%rsp)
0x00002aaaab118587: mov -0x8(%rsp),%rax
0x00002aaaab11858c: mov %ebx,0xc(%rsp)
0x00002aaaab118590: mov %edx,0x18(%rsp)
0x00002aaaab118594: nop
0x00002aaaab118595: nop
0x00002aaaab118596: nop
0x00002aaaab118597: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=476}
;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
; {runtime_call}
0x00002aaaab11859c: mov $0x2b6f247e0620,%r10 ; {runtime_call}
0x00002aaaab1185a6: rex.WB callq *%r10 ;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
;; B15: # B4 <- B1 Freq: 0.000999987
0x00002aaaab1185a9: xor %ebp,%ebp
0x00002aaaab1185ab: jmpq 0x00002aaaab11841f
;; B16: # N193 <- B6 B5 Freq: 2.02655e-06
0x00002aaaab1185b0: mov $0xffffff86,%esi
0x00002aaaab1185b5: mov %r14,(%rsp)
0x00002aaaab1185b9: mov %ebx,0x8(%rsp)
0x00002aaaab1185bd: mov %r13d,0xc(%rsp)
0x00002aaaab1185c2: nop
0x00002aaaab1185c3: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=520}
;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
; {runtime_call}
0x00002aaaab1185c8: mov $0x2b6f247e0620,%r10 ; {runtime_call}
0x00002aaaab1185d2: rex.WB callq *%r10
;; B17: # N193 <- B2 Freq: 9.99e-07
0x00002aaaab1185d5: mov $0xffffffad,%esi
0x00002aaaab1185da: mov %r14,(%rsp)
0x00002aaaab1185de: mov %ebx,0x8(%rsp)
0x00002aaaab1185e2: mov %r13d,0xc(%rsp)
0x00002aaaab1185e7: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=556}
;*iload
; - TestUseFastAccessorMethods::test@9 (line 7)
; {runtime_call}
0x00002aaaab1185ec: mov $0x2b6f247e0620,%r10 ; {runtime_call}
0x00002aaaab1185f6: rex.WB callq *%r10 ;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
;; B18: # N193 <- B10 Freq: 0.870311
0x00002aaaab1185f9: mov %rax,%rsi
0x00002aaaab1185fc: add $0x30,%rsp
0x00002aaaab118600: pop %rbp
0x00002aaaab118601: jmpq 0x00002aaaab117360 ; {runtime_call}
0x00002aaaab118606: hlt
0x00002aaaab118607: hlt
0x00002aaaab118608: hlt
0x00002aaaab118609: hlt
0x00002aaaab11860a: hlt
0x00002aaaab11860b: hlt
0x00002aaaab11860c: hlt
0x00002aaaab11860d: hlt
0x00002aaaab11860e: hlt
0x00002aaaab11860f: hlt
0x00002aaaab118610: hlt
0x00002aaaab118611: hlt
0x00002aaaab118612: hlt
0x00002aaaab118613: hlt
0x00002aaaab118614: hlt
0x00002aaaab118615: hlt
0x00002aaaab118616: hlt
0x00002aaaab118617: hlt
0x00002aaaab118618: hlt
0x00002aaaab118619: hlt
0x00002aaaab11861a: hlt
0x00002aaaab11861b: hlt
0x00002aaaab11861c: hlt
0x00002aaaab11861d: hlt
0x00002aaaab11861e: hlt
0x00002aaaab11861f: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab118620: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab118625: callq 0x00002aaaab11862a
0x00002aaaab11862a: subq $0x5,(%rsp)
0x00002aaaab11862f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab118634: int3
0x00002aaaab118635: int3
0x00002aaaab118636: int3
0x00002aaaab118637: int3
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab1189c0
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab1189c0 changing oop to 0x00000000c4417f90
IC@0x00002aaaab118523: monomorphic to compiled (rcvr klass) 'D':
create transition stub for 0x00002aaaab118523
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab1189c0 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab118523: to megamorphic {method} 'foo' '()I' in 'A' entry: 0x00002aaaab11a1f0
[updating inline caches with 2 stubs]
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab11a1f0 changing oop to 0x00000000c4416da0
Inline cache at 0x00002aaaab118523, calling 0x00002aaaab11a1f0 changing destination to 0x00002aaaab11a1f0
Decoding compiled method 0x00002aaaab117c90:
Code:
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} 'test' '([LFoo;)J' in 'TestUseFastAccessorMethods'
# parm0: rsi:rsi = '[LFoo;'
# [sp+0x40] (sp of caller)
;; N1: # B1 <- B8 B7 B9 Freq: 1
;; B1: # B8 B2 <- BLOCK HEAD IS JUNK Freq: 1
0x00002aaaab117de0: mov %eax,-0x8000(%rsp)
0x00002aaaab117de7: push %rbp
0x00002aaaab117de8: sub $0x30,%rsp ;*synchronization entry
; - TestUseFastAccessorMethods::test@-1 (line 5)
0x00002aaaab117dec: mov %rsi,%rbx
0x00002aaaab117def: mov $0x2b6f247e1060,%r10
0x00002aaaab117df9: callq *%r10 ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@0 (line 5)
0x00002aaaab117dfc: mov %rax,(%rsp)
0x00002aaaab117e00: mov %rbx,%r10
0x00002aaaab117e03: mov 0xc(%r10),%r8d ;*arraylength
; - TestUseFastAccessorMethods::test@21 (line 8)
; implicit exception: dispatches to 0x00002aaaab117f3e
;; B2: # B8 B3 <- B1 Freq: 0.999999
0x00002aaaab117e07: test %r8d,%r8d
0x00002aaaab117e0a: je 0x00002aaaab117f3e ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
;; B3: # B5 <- B2 Freq: 0.999998
0x00002aaaab117e10: xor %edx,%edx
0x00002aaaab117e12: xor %r11d,%r11d
0x00002aaaab117e15: xor %ebp,%ebp
0x00002aaaab117e17: mov %r8d,0x14(%rsp)
0x00002aaaab117e1c: mov %r11d,0x10(%rsp)
0x00002aaaab117e21: jmp 0x00002aaaab117e48
;; B4: # B5 <- B6 top-of-loop Freq: 95446.6
0x00002aaaab117e23: mov %r10d,%eax
0x00002aaaab117e26: mov 0x14(%rsp),%r11d
0x00002aaaab117e2b: cmp $0x80000000,%eax
0x00002aaaab117e30: jne 0x00002aaaab117e3a
0x00002aaaab117e32: xor %edx,%edx
0x00002aaaab117e34: cmp $0xffffffffffffffff,%r11d
0x00002aaaab117e38: je 0x00002aaaab117e3e
0x00002aaaab117e3a: cltd
0x00002aaaab117e3b: idiv %r11d ;*irem
; - TestUseFastAccessorMethods::test@22 (line 8)
0x00002aaaab117e3e: mov %r10d,0x10(%rsp)
0x00002aaaab117e43: mov 0x8(%rsp),%r10 ;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
;; B5: # B9 B6 <- B3 B4 Loop: B5-B4 inner Freq: 95448.5
0x00002aaaab117e48: mov 0x10(%r10,%rdx,4),%r11d
0x00002aaaab117e4d: mov %r10,0x8(%rsp)
0x00002aaaab117e52: mov %r11,%rsi
0x00002aaaab117e55: push %r10
0x00002aaaab117e57: mov $0x2b6f24f80700,%r10 ; {external_word}
0x00002aaaab117e61: cmp (%r10),%r12
0x00002aaaab117e64: je 0x00002aaaab117ee9
0x00002aaaab117e6a: mov %rsp,-0x28(%rsp)
0x00002aaaab117e6f: sub $0x80,%rsp
0x00002aaaab117e76: mov %rax,0x78(%rsp)
0x00002aaaab117e7b: mov %rcx,0x70(%rsp)
0x00002aaaab117e80: mov %rdx,0x68(%rsp)
0x00002aaaab117e85: mov %rbx,0x60(%rsp)
0x00002aaaab117e8a: mov %rbp,0x50(%rsp)
0x00002aaaab117e8f: mov %rsi,0x48(%rsp)
0x00002aaaab117e94: mov %rdi,0x40(%rsp)
0x00002aaaab117e99: mov %r8,0x38(%rsp)
0x00002aaaab117e9e: mov %r9,0x30(%rsp)
0x00002aaaab117ea3: mov %r10,0x28(%rsp)
0x00002aaaab117ea8: mov %r11,0x20(%rsp)
0x00002aaaab117ead: mov %r12,0x18(%rsp)
0x00002aaaab117eb2: mov %r13,0x10(%rsp)
0x00002aaaab117eb7: mov %r14,0x8(%rsp)
0x00002aaaab117ebc: mov %r15,(%rsp)
0x00002aaaab117ec0: mov $0x2b6f24a6c228,%rdi ; {external_word}
0x00002aaaab117eca: mov $0x2aaaab117e6a,%rsi ; {internal_word}
0x00002aaaab117ed4: mov %rsp,%rdx
0x00002aaaab117ed7: and $0xfffffffffffffff0,%rsp
0x00002aaaab117edb: mov $0x2b6f23fe3860,%r10 ; {runtime_call}
0x00002aaaab117ee5: rex.WB callq *%r10
0x00002aaaab117ee8: hlt
0x00002aaaab117ee9: pop %r10 ;*aaload
; - TestUseFastAccessorMethods::test@23 (line 8)
0x00002aaaab117eeb: nop
0x00002aaaab117eec: nop
0x00002aaaab117eed: mov $0xffffffffffffffff,%rax ; {oop(NULL)} Universe::non_oop_word()
0x00002aaaab117ef7: callq 0x00002aaaab0f2d20 ; OopMap{[8]=Oop off=284}
;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
; {virtual_call}
;; B6: # B4 B7 <- B5 Freq: 95446.6
0x00002aaaab117efc: add %eax,%ebp ;*iadd
; - TestUseFastAccessorMethods::test@27 (line 8)
0x00002aaaab117efe: mov 0x10(%rsp),%r10d
0x00002aaaab117f03: inc %r10d ;*iinc
; - TestUseFastAccessorMethods::test@29 (line 7)
0x00002aaaab117f06: cmp $0x3938700,%r10d
0x00002aaaab117f0d: jl 0x00002aaaab117e23 ;*if_icmpge
; - TestUseFastAccessorMethods::test@13 (line 7)
;; B7: # N1 <- B6 Freq: 0.0455125
0x00002aaaab117f13: mov $0x2b6f247e1060,%r10
0x00002aaaab117f1d: callq *%r10 ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@35 (line 10)
0x00002aaaab117f20: sub (%rsp),%rax ;*lsub
; - TestUseFastAccessorMethods::test@47 (line 12)
0x00002aaaab117f24: mov $0xedc4abe0,%r10 ; {oop(a 'java/lang/Class' = 'TestUseFastAccessorMethods')}
0x00002aaaab117f2e: mov %ebp,0x70(%r10) ;*invokestatic currentTimeMillis
; - TestUseFastAccessorMethods::test@0 (line 5)
0x00002aaaab117f32: add $0x30,%rsp
0x00002aaaab117f36: pop %rbp
0x00002aaaab117f37: test %eax,-0x41ff3d(%rip) # 0x00002aaaaacf8000
; {poll_return}
0x00002aaaab117f3d: retq
;; B8: # N1 <- B2 B1 Freq: 2.02656e-06
0x00002aaaab117f3e: mov $0xffffff86,%esi
0x00002aaaab117f43: mov %r10,%rbp
0x00002aaaab117f46: nop
0x00002aaaab117f47: callq 0x00002aaaab0f3fa0 ; OopMap{rbp=Oop off=364}
;*iload_3
; - TestUseFastAccessorMethods::test@16 (line 8)
; {runtime_call}
0x00002aaaab117f4c: mov $0x2b6f247e0620,%r10 ; {runtime_call}
0x00002aaaab117f56: rex.WB callq *%r10 ;*invokevirtual foo
; - TestUseFastAccessorMethods::test@24 (line 8)
;; B9: # N1 <- B5 Freq: 0.954485
0x00002aaaab117f59: mov %rax,%rsi
0x00002aaaab117f5c: add $0x30,%rsp
0x00002aaaab117f60: pop %rbp
0x00002aaaab117f61: jmpq 0x00002aaaab117360 ; {runtime_call}
0x00002aaaab117f66: hlt
0x00002aaaab117f67: hlt
0x00002aaaab117f68: hlt
0x00002aaaab117f69: hlt
0x00002aaaab117f6a: hlt
0x00002aaaab117f6b: hlt
0x00002aaaab117f6c: hlt
0x00002aaaab117f6d: hlt
0x00002aaaab117f6e: hlt
0x00002aaaab117f6f: hlt
0x00002aaaab117f70: hlt
0x00002aaaab117f71: hlt
0x00002aaaab117f72: hlt
0x00002aaaab117f73: hlt
0x00002aaaab117f74: hlt
0x00002aaaab117f75: hlt
0x00002aaaab117f76: hlt
0x00002aaaab117f77: hlt
0x00002aaaab117f78: hlt
0x00002aaaab117f79: hlt
0x00002aaaab117f7a: hlt
0x00002aaaab117f7b: hlt
0x00002aaaab117f7c: hlt
0x00002aaaab117f7d: hlt
0x00002aaaab117f7e: hlt
0x00002aaaab117f7f: hlt
[Exception Handler]
[Stub Code]
0x00002aaaab117f80: jmpq 0x00002aaaab101c20 ; {no_reloc}
[Deopt Handler Code]
0x00002aaaab117f85: callq 0x00002aaaab117f8a
0x00002aaaab117f8a: subq $0x5,(%rsp)
0x00002aaaab117f8f: jmpq 0x00002aaaab0f3ae0 ; {runtime_call}
0x00002aaaab117f94: int3
0x00002aaaab117f95: int3
0x00002aaaab117f96: int3
0x00002aaaab117f97: int3
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab0f2d20 changing destination to 0x00002aaaab118fc0
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab118fc0 changing oop to 0x00000000c4416e28
IC@0x00002aaaab117ef7: monomorphic to compiled (rcvr klass) 'A':
create transition stub for 0x00002aaaab117ef7
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab118fc0 changing destination to 0x00002aaaab0f4180
IC@0x00002aaaab117ef7: to megamorphic {method} 'foo' '()I' in 'B' entry: 0x00002aaaab11a1f0
[updating inline caches with 2 stubs]
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab11a1f0 changing oop to 0x00000000c4417398
Inline cache at 0x00002aaaab117ef7, calling 0x00002aaaab11a1f0 changing destination to 0x00002aaaab11a1f0
2641
2639
2640
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment