Movabs sync entry generated by jvm hotspot compiler
In the following code - classes A, B, C, D are POJOs without a class hierarchy and have simple getters for the corresponding class members.
35 private static D dFromA(A t) {
36 return callIfNotNull(
37 callIfNotNull(
38 callIfNotNull(
39 t, a->a.b() ),
40 b->b.c()),
41 c->c.d());
42 }
43
44 public static <T, U> U callIfNotNull(T t, Function<T, U> func) {
45 if (t!=null) {
46 return func.apply(t);
47 } else {
48 return null;
49 }
50 }
51 }
From the assembly below, what is the purpose of such instructions here?
98834 0x000000011daf144c: movabs $0x76ae2c8c0,%r10 ;*synchronization entry
Then there are those that I suppose should check if the class implementation of the generated anonymous class is the same as before on that particular calling site. Since dFromA is always called with class A, why are they still needed?
98844 0x000000011daf145a: mov 0x8(%r10),%r11d
98845 0x000000011daf145e: cmp $0xf800e405,%r11d ; {metadata('com/inline/Main$$Lambda$1')}
Below is the entire output
98828 # {method} {0x0000000119f04960} 'dFromA' '(Lcom/inline/A;)Lcom/inline/D;' in 'com/inline/Main'
98829 # parm0: rsi:rsi = 'com/inline/A'
98830 # [sp+0x30] (sp of caller)
98831 0x000000011daf1440: mov %eax,-0x14000(%rsp)
98832 0x000000011daf1447: push %rbp
98833 0x000000011daf1448: sub $0x20,%rsp
98834 0x000000011daf144c: movabs $0x76ae2c8c0,%r10 ;*synchronization entry
98835 ; - com.inline.Main::dFromA@-1 (line 36)
98836 ; {oop(a 'com/inline/Main$$Lambda$1')}
98837 0x000000011daf1456: mov 0xc(%rsi),%r8d ;*getfield b
98838 ; - com.inline.A::b@1 (line 9)
98839 ; - com.inline.Main::lambda$dFromA$0@1 (line 39)
98840 ; - com.inline.Main$$Lambda$1/303563356::apply@4
98841 ; - com.inline.Main::callIfNotNull@6 (line 46)
98842 ; - com.inline.Main::dFromA@6 (line 38)
98843 ; implicit exception: dispatches to 0x000000011daf14f5
98844 0x000000011daf145a: mov 0x8(%r10),%r11d
98845 0x000000011daf145e: cmp $0xf800e405,%r11d ; {metadata('com/inline/Main$$Lambda$1')}
98846 0x000000011daf1465: jne 0x000000011daf14b2 ;*invokeinterface apply
98847 ; - com.inline.Main::callIfNotNull@6 (line 46)
98848 ; - com.inline.Main::dFromA@6 (line 38)
98849
98850 0x000000011daf1467: movabs $0x76ae333a0,%r11 ;*synchronization entry
98851 ; - com.inline.Main::dFromA@-1 (line 36)
98852 ; {oop(a 'com/inline/Main$$Lambda$2')}
98853 0x000000011daf1471: mov 0xc(%r12,%r8,8),%r9d ;*getfield c
98854 ; - com.inline.B::c@1 (line 9)
98855 ; - com.inline.Main::lambda$dFromA$1@1 (line 40)
98856 ; - com.inline.Main$$Lambda$2/1826771953::apply@4
98857 ; - com.inline.Main::callIfNotNull@6 (line 46)
98858 ; - com.inline.Main::dFromA@14 (line 37)
98859 ; implicit exception: dispatches to 0x000000011daf150d
98860 0x000000011daf1476: mov 0x8(%r11),%r10d
98861 0x000000011daf147a: cmp $0xf800e585,%r10d ; {metadata('com/inline/Main$$Lambda$2')}
98862 0x000000011daf1481: jne 0x000000011daf14c9 ;*invokeinterface apply
98863 ; - com.inline.Main::callIfNotNull@6 (line 46)
98864 ; - com.inline.Main::dFromA@14 (line 37)
98865
98866 0x000000011daf1483: movabs $0x76ae35cb8,%rbp ;*synchronization entry
98867 ; - com.inline.Main::dFromA@-1 (line 36)
98868 ; {oop(a 'com/inline/Main$$Lambda$3')}
98869 0x000000011daf148d: mov 0xc(%r12,%r9,8),%r10d ; implicit exception: dispatches to 0x000000011daf1525
98870 0x000000011daf1492: mov 0x8(%rbp),%r8d
98871 0x000000011daf1496: cmp $0xf800e605,%r8d ; {metadata('com/inline/Main$$Lambda$3')}
98872 0x000000011daf149d: jne 0x000000011daf14e1 ;*invokeinterface apply
98873 ; - com.inline.Main::callIfNotNull@6 (line 46)
98874 ; - com.inline.Main::dFromA@22 (line 36)
98875
98876 0x000000011daf149f: mov %r10,%rax
98877 0x000000011daf14a2: shl $0x3,%rax ;*getfield d
98878 ; - com.inline.C::d@1 (line 9)
98879 ; - com.inline.Main::lambda$dFromA$2@1 (line 41)
98880 ; - com.inline.Main$$Lambda$3/245257410::apply@4
98881 ; - com.inline.Main::callIfNotNull@6 (line 46)
98882 ; - com.inline.Main::dFromA@22 (line 36)
98883
98884 0x000000011daf14a6: add $0x20,%rsp
98885 0x000000011daf14aa: pop %rbp
98886 0x000000011daf14ab: test %eax,-0xf1334b1(%rip) # 0x000000010e9be000
98887 ; {poll_return}
+3
source to share
No one has answered this question yet
Check out similar questions: