Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 0x0000000000510ff0 <+0>: push %r15
- 0x0000000000510ff2 <+2>: mov $0x1,%eax
- 0x0000000000510ff7 <+7>: lea 0x20(%rdi),%r15
- 0x0000000000510ffb <+11>: mov %rdx,%r9
- 0x0000000000510ffe <+14>: push %r14
- 0x0000000000511000 <+16>: mov %rax,%r14
- 0x0000000000511003 <+19>: lea 0x38(%rsi),%r11
- 0x0000000000511007 <+23>: lea 0x28(%rsi),%r10
- 0x000000000051100b <+27>: push %r13
- 0x000000000051100d <+29>: mov %rdx,%r13
- 0x0000000000511010 <+32>: push %r12
- 0x0000000000511012 <+34>: push %rbp
- 0x0000000000511013 <+35>: mov %rsi,%rbp
- 0x0000000000511016 <+38>: push %rbx
- 0x0000000000511017 <+39>: sub $0x38,%rsp
- 0x000000000051101b <+43>: movzbl 0x9(%rdi),%ecx
- 0x000000000051101f <+47>: shl %cl,%r14
- 0x0000000000511022 <+50>: movzbl 0x8(%rdi),%ecx
- 0x0000000000511026 <+54>: add %r15,%r14
- 0x0000000000511029 <+57>: shl %cl,%rax
- 0x000000000051102c <+60>: lea -0x1(%rax),%rbx
- 0x0000000000511030 <+64>: mov %rbx,%r8
- 0x0000000000511033 <+67>: and %rdx,%r8
- 0x0000000000511036 <+70>: cmp $0x7,%ecx
- 0x0000000000511039 <+73>: jg 0x5110c0 <unicodekeys_lookup_unicode+208>
- 0x000000000051103f <+79>: movsbq (%r15,%r8,1),%r12
- 0x0000000000511044 <+84>: test %r12,%r12
- 0x0000000000511047 <+87>: js 0x511128 <unicodekeys_lookup_unicode+312>
- 0x000000000051104d <+93>: mov %r12,%rax
- 0x0000000000511050 <+96>: shl $0x4,%rax
- 0x0000000000511054 <+100>: mov (%r14,%rax,1),%rax
- 0x0000000000511058 <+104>: cmp %rbp,%rax
- 0x000000000051105b <+107>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 0x0000000000511061 <+113>: cmp 0x18(%rax),%r13
- 0x0000000000511065 <+117>: je 0x511140 <unicodekeys_lookup_unicode+336>
- 0x000000000051106b <+123>: mov %r9,%rdx
- 0x000000000051106e <+126>: lea (%r8,%r8,4),%r12
- 0x0000000000511072 <+130>: shr $0x5,%rdx
- 0x0000000000511076 <+134>: lea 0x1(%r12,%rdx,1),%r8
- 0x000000000051107b <+139>: and %rbx,%r8
- 0x000000000051107e <+142>: cmp $0x7,%ecx
- 0x0000000000511081 <+145>: jg 0x5110f0 <unicodekeys_lookup_unicode+256>
- 0x0000000000511083 <+147>: movsbq (%r15,%r8,1),%r12
- 0x0000000000511088 <+152>: test %r12,%r12
- 0x000000000051108b <+155>: js 0x511108 <unicodekeys_lookup_unicode+280>
- 0x000000000051108d <+157>: mov %r12,%rdi
- 0x0000000000511090 <+160>: shl $0x4,%rdi
- 0x0000000000511094 <+164>: mov (%r14,%rdi,1),%rax
- 0x0000000000511098 <+168>: cmp %rbp,%rax
- 0x000000000051109b <+171>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 0x000000000051109d <+173>: cmp 0x18(%rax),%r13
- 0x00000000005110a1 <+177>: je 0x5111fd <unicodekeys_lookup_unicode+525>
- 0x00000000005110a7 <+183>: shr $0xa,%r9
- 0x00000000005110ab <+187>: lea (%r8,%r8,4),%rdx
- 0x00000000005110af <+191>: lea 0x1(%r9,%rdx,1),%r8
- 0x00000000005110b4 <+196>: and %rbx,%r8
- 0x00000000005110b7 <+199>: cmp $0x7,%ecx
- 0x00000000005110ba <+202>: jle 0x51103f <unicodekeys_lookup_unicode+79>
- 0x00000000005110bc <+204>: nopl 0x0(%rax)
- 0x00000000005110c0 <+208>: cmp $0xf,%ecx
- 0x00000000005110c3 <+211>: jg 0x5112b8 <unicodekeys_lookup_unicode+712>
- 0x00000000005110c9 <+217>: movswq (%r15,%r8,2),%r12
- 0x00000000005110ce <+222>: test %r12,%r12
- 0x00000000005110d1 <+225>: jns 0x51104d <unicodekeys_lookup_unicode+93>
- 0x00000000005110d7 <+231>: cmp $0xffffffffffffffff,%r12
- 0x00000000005110db <+235>: je 0x511132 <unicodekeys_lookup_unicode+322>
- 0x00000000005110dd <+237>: mov %r9,%rdx
- 0x00000000005110e0 <+240>: lea (%r8,%r8,4),%r8
- 0x00000000005110e4 <+244>: shr $0x5,%rdx
- 0x00000000005110e8 <+248>: lea 0x1(%r8,%rdx,1),%r8
- 0x00000000005110ed <+253>: and %rbx,%r8
- 0x00000000005110f0 <+256>: cmp $0xf,%ecx
- 0x00000000005110f3 <+259>: jg 0x5112eb <unicodekeys_lookup_unicode+763>
- 0x00000000005110f9 <+265>: movswq (%r15,%r8,2),%r12
- 0x00000000005110fe <+270>: test %r12,%r12
- 0x0000000000511101 <+273>: jns 0x51108d <unicodekeys_lookup_unicode+157>
- 0x0000000000511103 <+275>: nopl 0x0(%rax,%rax,1)
- 0x0000000000511108 <+280>: cmp $0xffffffffffffffff,%r12
- 0x000000000051110c <+284>: jne 0x51129e <unicodekeys_lookup_unicode+686>
- 0x0000000000511112 <+290>: add $0x38,%rsp
- 0x0000000000511116 <+294>: mov %r12,%rax
- 0x0000000000511119 <+297>: pop %rbx
- 0x000000000051111a <+298>: pop %rbp
- 0x000000000051111b <+299>: pop %r12
- 0x000000000051111d <+301>: pop %r13
- 0x000000000051111f <+303>: pop %r14
- 0x0000000000511121 <+305>: pop %r15
- 0x0000000000511123 <+307>: retq
- 0x0000000000511124 <+308>: nopl 0x0(%rax)
- 0x0000000000511128 <+312>: cmp $0xffffffffffffffff,%r12
- 0x000000000051112c <+316>: jne 0x5112d3 <unicodekeys_lookup_unicode+739>
- 0x0000000000511132 <+322>: mov $0xffffffffffffffff,%r12
- 0x0000000000511139 <+329>: jmp 0x511112 <unicodekeys_lookup_unicode+290>
- 0x000000000051113b <+331>: nopl 0x0(%rax,%rax,1)
- 0x0000000000511140 <+336>: mov 0x10(%rax),%rsi
- 0x0000000000511144 <+340>: cmp 0x10(%rbp),%rsi
- 0x0000000000511148 <+344>: jne 0x5111dc <unicodekeys_lookup_unicode+492>
- 0x000000000051114e <+350>: test %rsi,%rsi
- 0x0000000000511151 <+353>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 0x0000000000511153 <+355>: movzbl 0x20(%rax),%edi
- 0x0000000000511157 <+359>: movzbl 0x20(%rbp),%edx
- 0x000000000051115b <+363>: xor %edi,%edx
- 0x000000000051115d <+365>: and $0x1c,%edx
- 0x0000000000511160 <+368>: jne 0x5111dc <unicodekeys_lookup_unicode+492>
- 0x0000000000511162 <+370>: mov %edi,%edx
- 0x0000000000511164 <+372>: shr $0x2,%dl
- 0x0000000000511167 <+375>: and $0x7,%edx
- 0x000000000051116a <+378>: imul %rsi,%rdx
- 0x000000000051116e <+382>: movzbl 0x20(%rbp),%esi
- 0x0000000000511172 <+386>: test $0x20,%sil
- 0x0000000000511176 <+390>: je 0x4224a8 <unicodekeys_lookup_unicode-977736>
- 0x000000000051117c <+396>: and $0x40,%esi
- 0x000000000051117f <+399>: je 0x511306 <unicodekeys_lookup_unicode+790>
- 0x0000000000511185 <+405>: mov %r10,%rsi
- 0x0000000000511188 <+408>: test $0x20,%dil
- 0x000000000051118c <+412>: je 0x511329 <unicodekeys_lookup_unicode+825>
- 0x0000000000511192 <+418>: and $0x40,%edi
- 0x0000000000511195 <+421>: je 0x5112fd <unicodekeys_lookup_unicode+781>
- 0x000000000051119b <+427>: lea 0x28(%rax),%rdi
- 0x000000000051119f <+431>: mov %r10,0x28(%rsp)
- 0x00000000005111a4 <+436>: mov %r11,0x20(%rsp)
- 0x00000000005111a9 <+441>: mov %r8,0x18(%rsp)
- 0x00000000005111ae <+446>: mov %r9,0x10(%rsp)
- 0x00000000005111b3 <+451>: mov %ecx,0xc(%rsp)
- 0x00000000005111b7 <+455>: callq 0x41c140 <memcmp@plt>
- 0x00000000005111bc <+460>: mov 0xc(%rsp),%ecx
- 0x00000000005111c0 <+464>: mov 0x10(%rsp),%r9
- 0x00000000005111c5 <+469>: test %eax,%eax
- 0x00000000005111c7 <+471>: mov 0x18(%rsp),%r8
- 0x00000000005111cc <+476>: mov 0x20(%rsp),%r11
- 0x00000000005111d1 <+481>: mov 0x28(%rsp),%r10
- 0x00000000005111d6 <+486>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 0x00000000005111dc <+492>: mov %r9,%rax
- 0x00000000005111df <+495>: lea (%r8,%r8,4),%r8
- 0x00000000005111e3 <+499>: shr $0x5,%rax
- 0x00000000005111e7 <+503>: lea 0x1(%r8,%rax,1),%r8
- 0x00000000005111ec <+508>: and %rbx,%r8
- 0x00000000005111ef <+511>: cmp $0x7,%ecx
- 0x00000000005111f2 <+514>: jle 0x511083 <unicodekeys_lookup_unicode+147>
- 0x00000000005111f8 <+520>: jmpq 0x5110f0 <unicodekeys_lookup_unicode+256>
- 0x00000000005111fd <+525>: mov 0x10(%rax),%rsi
- 0x0000000000511201 <+529>: cmp 0x10(%rbp),%rsi
- 0x0000000000511205 <+533>: jne 0x51129e <unicodekeys_lookup_unicode+686>
- 0x000000000051120b <+539>: test %rsi,%rsi
- 0x000000000051120e <+542>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 0x0000000000511214 <+548>: movzbl 0x20(%rax),%edi
- 0x0000000000511218 <+552>: mov %edi,%edx
- 0x000000000051121a <+554>: xor 0x20(%rbp),%edx
- 0x000000000051121d <+557>: and $0x1c,%dl
- 0x0000000000511220 <+560>: jne 0x51129e <unicodekeys_lookup_unicode+686>
- 0x0000000000511222 <+562>: mov %edi,%edx
- 0x0000000000511224 <+564>: shr $0x2,%dl
- 0x0000000000511227 <+567>: and $0x7,%edx
- 0x000000000051122a <+570>: imul %rsi,%rdx
- 0x000000000051122e <+574>: movzbl 0x20(%rbp),%esi
- 0x0000000000511232 <+578>: test $0x20,%sil
- 0x0000000000511236 <+582>: je 0x422484 <unicodekeys_lookup_unicode.cold>
- 0x000000000051123c <+588>: and $0x40,%sil
- 0x0000000000511240 <+592>: je 0x511321 <unicodekeys_lookup_unicode+817>
- 0x0000000000511246 <+598>: mov %r10,%rsi
- 0x0000000000511249 <+601>: test $0x20,%dil
- 0x000000000051124d <+605>: je 0x42248d <unicodekeys_lookup_unicode-977763>
- 0x0000000000511253 <+611>: and $0x40,%dil
- 0x0000000000511257 <+615>: je 0x511318 <unicodekeys_lookup_unicode+808>
- 0x000000000051125d <+621>: lea 0x28(%rax),%rdi
- 0x0000000000511261 <+625>: mov %r10,0x28(%rsp)
- 0x0000000000511266 <+630>: mov %r11,0x20(%rsp)
- 0x000000000051126b <+635>: mov %r8,0x18(%rsp)
- 0x0000000000511270 <+640>: mov %r9,0x10(%rsp)
- 0x0000000000511275 <+645>: mov %ecx,0xc(%rsp)
- 0x0000000000511279 <+649>: callq 0x41c140 <memcmp@plt>
- 0x000000000051127e <+654>: mov 0xc(%rsp),%ecx
- 0x0000000000511282 <+658>: mov 0x10(%rsp),%r9
- 0x0000000000511287 <+663>: test %eax,%eax
- 0x0000000000511289 <+665>: mov 0x18(%rsp),%r8
- 0x000000000051128e <+670>: mov 0x20(%rsp),%r11
- 0x0000000000511293 <+675>: mov 0x28(%rsp),%r10
- 0x0000000000511298 <+680>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 0x000000000051129e <+686>: shr $0xa,%r9
- 0x00000000005112a2 <+690>: lea (%r8,%r8,4),%r8
- 0x00000000005112a6 <+694>: lea 0x1(%r9,%r8,1),%r8
- 0x00000000005112ab <+699>: and %rbx,%r8
- 0x00000000005112ae <+702>: jmpq 0x511036 <unicodekeys_lookup_unicode+70>
- 0x00000000005112b3 <+707>: nopl 0x0(%rax,%rax,1)
- 0x00000000005112b8 <+712>: cmp $0x1f,%ecx
- 0x00000000005112bb <+715>: jg 0x42249f <unicodekeys_lookup_unicode-977745>
- 0x00000000005112c1 <+721>: movslq (%r15,%r8,4),%r12
- 0x00000000005112c5 <+725>: test %r12,%r12
- 0x00000000005112c8 <+728>: jns 0x51104d <unicodekeys_lookup_unicode+93>
- 0x00000000005112ce <+734>: jmpq 0x5110d7 <unicodekeys_lookup_unicode+231>
- 0x00000000005112d3 <+739>: mov %r9,%rsi
- 0x00000000005112d6 <+742>: lea (%r8,%r8,4),%rdi
- 0x00000000005112da <+746>: shr $0x5,%rsi
- 0x00000000005112de <+750>: lea 0x1(%rsi,%rdi,1),%r8
- 0x00000000005112e3 <+755>: and %rbx,%r8
- 0x00000000005112e6 <+758>: jmpq 0x511083 <unicodekeys_lookup_unicode+147>
- 0x00000000005112eb <+763>: cmp $0x1f,%ecx
- 0x00000000005112ee <+766>: jg 0x4224b1 <unicodekeys_lookup_unicode-977727>
- 0x00000000005112f4 <+772>: movslq (%r15,%r8,4),%r12
- 0x00000000005112f8 <+776>: jmpq 0x5110fe <unicodekeys_lookup_unicode+270>
- 0x00000000005112fd <+781>: lea 0x38(%rax),%rdi
- 0x0000000000511301 <+785>: jmpq 0x51119f <unicodekeys_lookup_unicode+431>
- 0x0000000000511306 <+790>: mov %r11,%rsi
- 0x0000000000511309 <+793>: test $0x20,%dil
- 0x000000000051130d <+797>: jne 0x511192 <unicodekeys_lookup_unicode+418>
- 0x0000000000511313 <+803>: jmpq 0x422496 <unicodekeys_lookup_unicode-977754>
- 0x0000000000511318 <+808>: lea 0x38(%rax),%rdi
- 0x000000000051131c <+812>: jmpq 0x511261 <unicodekeys_lookup_unicode+625>
- 0x0000000000511321 <+817>: mov %r11,%rsi
- 0x0000000000511324 <+820>: jmpq 0x511249 <unicodekeys_lookup_unicode+601>
- 0x0000000000511329 <+825>: jmpq 0x422496 <unicodekeys_lookup_unicode-977754>
- Address range 0x422484 to 0x4224ba:
- 0x0000000000422484 <-977772>: mov 0x38(%rbp),%rsi
- 0x0000000000422488 <-977768>: jmpq 0x511249 <unicodekeys_lookup_unicode+601>
- 0x000000000042248d <-977763>: mov 0x38(%rax),%rdi
- 0x0000000000422491 <-977759>: jmpq 0x511261 <unicodekeys_lookup_unicode+625>
- 0x0000000000422496 <-977754>: mov 0x38(%rax),%rdi
- 0x000000000042249a <-977750>: jmpq 0x51119f <unicodekeys_lookup_unicode+431>
- 0x000000000042249f <-977745>: mov (%r15,%r8,8),%r12
- 0x00000000004224a3 <-977741>: jmpq 0x5112c5 <unicodekeys_lookup_unicode+725>
- 0x00000000004224a8 <-977736>: mov 0x38(%rbp),%rsi
- 0x00000000004224ac <-977732>: jmpq 0x511309 <unicodekeys_lookup_unicode+793>
- 0x00000000004224b1 <-977727>: mov (%r15,%r8,8),%r12
- 0x00000000004224b5 <-977723>: jmpq 0x5110fe <unicodekeys_lookup_unicode+270>
- 0x0000000000511289 <+665>: mov 0x18(%rsp),%r8
- Dump of assembler code for function unicodekeys_lookup_unicode:
- Address range 0x510ff0 to 0x51132e:
- ./Include/internal/pycore_dict.h:
- 193 static inline void* _DK_ENTRIES(PyDictKeysObject *dk) {
- 194 int8_t *indices = (int8_t*)(dk->dk_indices);
- 195 size_t index = (size_t)1 << dk->dk_log2_index_bytes;
- 196 return (&indices[index]);
- 197 }
- 198 static inline PyDictKeyEntry* DK_ENTRIES(PyDictKeysObject *dk) {
- 199 assert(dk->dk_kind == DICT_KEYS_GENERAL);
- 200 return (PyDictKeyEntry*)_DK_ENTRIES(dk);
- 201 }
- 202 static inline PyDictUnicodeEntry* DK_UNICODE_ENTRIES(PyDictKeysObject *dk) {
- 203 assert(dk->dk_kind != DICT_KEYS_GENERAL);
- 204 return (PyDictUnicodeEntry*)_DK_ENTRIES(dk);
- 0x0000000000510ff0 <+0>: push %r15
- 0x0000000000510ff2 <+2>: mov $0x1,%eax
- 0x0000000000510ff7 <+7>: lea 0x20(%rdi),%r15
- 196 return (&indices[index]);
- 0x0000000000510ffb <+11>: mov %rdx,%r9
- 0x0000000000510ffe <+14>: push %r14
- 0x0000000000511000 <+16>: mov %rax,%r14
- 0x0000000000511003 <+19>: lea 0x38(%rsi),%r11
- 0x0000000000511007 <+23>: lea 0x28(%rsi),%r10
- 0x000000000051100b <+27>: push %r13
- 0x000000000051100d <+29>: mov %rdx,%r13
- 0x0000000000511010 <+32>: push %r12
- 0x0000000000511012 <+34>: push %rbp
- 0x0000000000511013 <+35>: mov %rsi,%rbp
- 0x0000000000511016 <+38>: push %rbx
- 0x0000000000511017 <+39>: sub $0x38,%rsp
- 0x000000000051101b <+43>: movzbl 0x9(%rdi),%ecx
- 0x000000000051101f <+47>: shl %cl,%r14
- 0x0000000000511022 <+50>: movzbl 0x8(%rdi),%ecx
- 0x0000000000511026 <+54>: add %r15,%r14
- Objects/dictobject.c:
- 929 size_t mask = DK_MASK(dk);
- 0x0000000000511029 <+57>: shl %cl,%rax
- 0x000000000051102c <+60>: lea -0x1(%rax),%rbx
- 930 size_t perturb = hash;
- 931 size_t i = (size_t)hash & mask;
- 0x0000000000511030 <+64>: mov %rbx,%r8
- 0x0000000000511033 <+67>: and %rdx,%r8
- 934 ix = dictkeys_get_index(dk, i);
- 0x0000000000511036 <+70>: cmp $0x7,%ecx
- 0x0000000000511039 <+73>: jg 0x5110c0 <unicodekeys_lookup_unicode+208>
- 348 ix = indices[i];
- 0x000000000051103f <+79>: movsbq (%r15,%r8,1),%r12
- 935 if (ix >= 0) {
- 0x0000000000511044 <+84>: test %r12,%r12
- 0x0000000000511047 <+87>: js 0x511128 <unicodekeys_lookup_unicode+312>
- 936 PyDictUnicodeEntry *ep = &ep0[ix];
- 937 assert(ep->me_key != NULL);
- 938 assert(PyUnicode_CheckExact(ep->me_key));
- 939 if (ep->me_key == key ||
- 0x000000000051104d <+93>: mov %r12,%rax
- 0x0000000000511050 <+96>: shl $0x4,%rax
- 0x0000000000511054 <+100>: mov (%r14,%rax,1),%rax
- 0x0000000000511058 <+104>: cmp %rbp,%rax
- 0x000000000051105b <+107>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 286 return _PyASCIIObject_CAST(o)->hash;
- 0x0000000000511061 <+113>: cmp 0x18(%rax),%r13
- 0x0000000000511065 <+117>: je 0x511140 <unicodekeys_lookup_unicode+336>
- 945 return DKIX_EMPTY;
- 946 }
- 947 perturb >>= PERTURB_SHIFT;
- 948 i = mask & (i*5 + perturb + 1);
- 0x000000000051106b <+123>: mov %r9,%rdx
- 0x000000000051106e <+126>: lea (%r8,%r8,4),%r12
- 0x0000000000511072 <+130>: shr $0x5,%rdx
- 0x0000000000511076 <+134>: lea 0x1(%r12,%rdx,1),%r8
- 0x000000000051107b <+139>: and %rbx,%r8
- 949 // Manual loop unrolling
- 950 ix = dictkeys_get_index(dk, i);
- 0x000000000051107e <+142>: cmp $0x7,%ecx
- 0x0000000000511081 <+145>: jg 0x5110f0 <unicodekeys_lookup_unicode+256>
- 348 ix = indices[i];
- 0x0000000000511083 <+147>: movsbq (%r15,%r8,1),%r12
- 951 if (ix >= 0) {
- 0x0000000000511088 <+152>: test %r12,%r12
- 0x000000000051108b <+155>: js 0x511108 <unicodekeys_lookup_unicode+280>
- 952 PyDictUnicodeEntry *ep = &ep0[ix];
- 953 assert(ep->me_key != NULL);
- 954 assert(PyUnicode_CheckExact(ep->me_key));
- 955 if (ep->me_key == key ||
- 0x000000000051108d <+157>: mov %r12,%rdi
- 0x0000000000511090 <+160>: shl $0x4,%rdi
- 0x0000000000511094 <+164>: mov (%r14,%rdi,1),%rax
- 0x0000000000511098 <+168>: cmp %rbp,%rax
- 0x000000000051109b <+171>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 286 return _PyASCIIObject_CAST(o)->hash;
- 0x000000000051109d <+173>: cmp 0x18(%rax),%r13
- 0x00000000005110a1 <+177>: je 0x5111fd <unicodekeys_lookup_unicode+525>
- 961 return DKIX_EMPTY;
- 962 }
- 963 perturb >>= PERTURB_SHIFT;
- 0x00000000005110a7 <+183>: shr $0xa,%r9
- 964 i = mask & (i*5 + perturb + 1);
- 0x00000000005110ab <+187>: lea (%r8,%r8,4),%rdx
- 0x00000000005110af <+191>: lea 0x1(%r9,%rdx,1),%r8
- 0x00000000005110b4 <+196>: and %rbx,%r8
- 934 ix = dictkeys_get_index(dk, i);
- 0x00000000005110b7 <+199>: cmp $0x7,%ecx
- 0x00000000005110ba <+202>: jle 0x51103f <unicodekeys_lookup_unicode+79>
- 0x00000000005110bc <+204>: nopl 0x0(%rax)
- 350 else if (log2size < 16) {
- 0x00000000005110c0 <+208>: cmp $0xf,%ecx
- 0x00000000005110c3 <+211>: jg 0x5112b8 <unicodekeys_lookup_unicode+712>
- 351 const int16_t *indices = (const int16_t*)(keys->dk_indices);
- 352 ix = indices[i];
- 0x00000000005110c9 <+217>: movswq (%r15,%r8,2),%r12
- 935 if (ix >= 0) {
- 0x00000000005110ce <+222>: test %r12,%r12
- 0x00000000005110d1 <+225>: jns 0x51104d <unicodekeys_lookup_unicode+93>
- 940 (unicode_get_hash(ep->me_key) == hash && unicode_eq(ep->me_key, key))) {
- 941 return ix;
- 942 }
- 943 }
- 944 else if (ix == DKIX_EMPTY) {
- 0x00000000005110d7 <+231>: cmp $0xffffffffffffffff,%r12
- 0x00000000005110db <+235>: je 0x511132 <unicodekeys_lookup_unicode+322>
- 945 return DKIX_EMPTY;
- 946 }
- 947 perturb >>= PERTURB_SHIFT;
- 948 i = mask & (i*5 + perturb + 1);
- 0x00000000005110dd <+237>: mov %r9,%rdx
- 0x00000000005110e0 <+240>: lea (%r8,%r8,4),%r8
- 0x00000000005110e4 <+244>: shr $0x5,%rdx
- 0x00000000005110e8 <+248>: lea 0x1(%r8,%rdx,1),%r8
- 0x00000000005110ed <+253>: and %rbx,%r8
- 949 // Manual loop unrolling
- 950 ix = dictkeys_get_index(dk, i);
- 0x00000000005110f0 <+256>: cmp $0xf,%ecx
- 0x00000000005110f3 <+259>: jg 0x5112eb <unicodekeys_lookup_unicode+763>
- 352 ix = indices[i];
- 0x00000000005110f9 <+265>: movswq (%r15,%r8,2),%r12
- 951 if (ix >= 0) {
- 0x00000000005110fe <+270>: test %r12,%r12
- 0x0000000000511101 <+273>: jns 0x51108d <unicodekeys_lookup_unicode+157>
- 0x0000000000511103 <+275>: nopl 0x0(%rax,%rax,1)
- 956 (unicode_get_hash(ep->me_key) == hash && unicode_eq(ep->me_key, key))) {
- 957 return ix;
- 958 }
- 959 }
- 960 else if (ix == DKIX_EMPTY) {
- 0x0000000000511108 <+280>: cmp $0xffffffffffffffff,%r12
- 0x000000000051110c <+284>: jne 0x51129e <unicodekeys_lookup_unicode+686>
- 0x0000000000511112 <+290>: add $0x38,%rsp
- 0x0000000000511116 <+294>: mov %r12,%rax
- 0x0000000000511119 <+297>: pop %rbx
- 0x000000000051111a <+298>: pop %rbp
- 0x000000000051111b <+299>: pop %r12
- 0x000000000051111d <+301>: pop %r13
- 0x000000000051111f <+303>: pop %r14
- 0x0000000000511121 <+305>: pop %r15
- 0x0000000000511123 <+307>: retq
- 0x0000000000511124 <+308>: nopl 0x0(%rax)
- 944 else if (ix == DKIX_EMPTY) {
- 0x0000000000511128 <+312>: cmp $0xffffffffffffffff,%r12
- 0x000000000051112c <+316>: jne 0x5112d3 <unicodekeys_lookup_unicode+739>
- 0x0000000000511132 <+322>: mov $0xffffffffffffffff,%r12
- 0x0000000000511139 <+329>: jmp 0x511112 <unicodekeys_lookup_unicode+290>
- 0x000000000051113b <+331>: nopl 0x0(%rax,%rax,1)
- ./Include/cpython/unicodeobject.h:
- 280 return _PyASCIIObject_CAST(op)->length;
- 0x0000000000511140 <+336>: mov 0x10(%rax),%rsi
- 0x0000000000511144 <+340>: cmp 0x10(%rbp),%rsi
- 0x0000000000511148 <+344>: jne 0x5111dc <unicodekeys_lookup_unicode+492>
- Objects/stringlib/eq.h:
- 11 if (PyUnicode_GET_LENGTH(a) == 0)
- 0x000000000051114e <+350>: test %rsi,%rsi
- 0x0000000000511151 <+353>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 12 return 1;
- 13 if (PyUnicode_KIND(a) != PyUnicode_KIND(b))
- 0x0000000000511153 <+355>: movzbl 0x20(%rax),%edi
- 0x0000000000511157 <+359>: movzbl 0x20(%rbp),%edx
- 0x000000000051115b <+363>: xor %edi,%edx
- 0x000000000051115d <+365>: and $0x1c,%edx
- 0x0000000000511160 <+368>: jne 0x5111dc <unicodekeys_lookup_unicode+492>
- 14 return 0;
- 15 return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b),
- 0x0000000000511162 <+370>: mov %edi,%edx
- 0x0000000000511164 <+372>: shr $0x2,%dl
- 0x0000000000511167 <+375>: and $0x7,%edx
- 0x000000000051116a <+378>: imul %rsi,%rdx
- ./Include/cpython/unicodeobject.h:
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x000000000051116e <+382>: movzbl 0x20(%rbp),%esi
- 0x0000000000511172 <+386>: test $0x20,%sil
- 0x0000000000511176 <+390>: je 0x4224a8 <unicodekeys_lookup_unicode-977736>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x000000000051117c <+396>: and $0x40,%esi
- 0x000000000051117f <+399>: je 0x511306 <unicodekeys_lookup_unicode+790>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x0000000000511185 <+405>: mov %r10,%rsi
- 251 }
- 252
- 253 static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
- 254 void *data;
- 255 assert(!PyUnicode_IS_COMPACT(op));
- 256 data = _PyUnicodeObject_CAST(op)->data.any;
- 257 assert(data != NULL);
- 258 return data;
- 259 }
- 260
- 261 static inline void* PyUnicode_DATA(PyObject *op) {
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x0000000000511188 <+408>: test $0x20,%dil
- 0x000000000051118c <+412>: je 0x511329 <unicodekeys_lookup_unicode+825>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x0000000000511192 <+418>: and $0x40,%edi
- 0x0000000000511195 <+421>: je 0x5112fd <unicodekeys_lookup_unicode+781>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x000000000051119b <+427>: lea 0x28(%rax),%rdi
- 0x000000000051119f <+431>: mov %r10,0x28(%rsp)
- 0x00000000005111a4 <+436>: mov %r11,0x20(%rsp)
- 0x00000000005111a9 <+441>: mov %r8,0x18(%rsp)
- 0x00000000005111ae <+446>: mov %r9,0x10(%rsp)
- 0x00000000005111b3 <+451>: mov %ecx,0xc(%rsp)
- 0x00000000005111b7 <+455>: callq 0x41c140 <memcmp@plt>
- 0x00000000005111bc <+460>: mov 0xc(%rsp),%ecx
- 0x00000000005111c0 <+464>: mov 0x10(%rsp),%r9
- 0x00000000005111c5 <+469>: test %eax,%eax
- 0x00000000005111c7 <+471>: mov 0x18(%rsp),%r8
- 0x00000000005111cc <+476>: mov 0x20(%rsp),%r11
- 0x00000000005111d1 <+481>: mov 0x28(%rsp),%r10
- 0x00000000005111d6 <+486>: je 0x511112 <unicodekeys_lookup_unicode+290>
- Objects/dictobject.c:
- 948 i = mask & (i*5 + perturb + 1);
- 0x00000000005111dc <+492>: mov %r9,%rax
- 0x00000000005111df <+495>: lea (%r8,%r8,4),%r8
- 0x00000000005111e3 <+499>: shr $0x5,%rax
- 0x00000000005111e7 <+503>: lea 0x1(%r8,%rax,1),%r8
- 0x00000000005111ec <+508>: and %rbx,%r8
- 949 // Manual loop unrolling
- 950 ix = dictkeys_get_index(dk, i);
- 0x00000000005111ef <+511>: cmp $0x7,%ecx
- 0x00000000005111f2 <+514>: jle 0x511083 <unicodekeys_lookup_unicode+147>
- 0x00000000005111f8 <+520>: jmpq 0x5110f0 <unicodekeys_lookup_unicode+256>
- ./Include/cpython/unicodeobject.h:
- 280 return _PyASCIIObject_CAST(op)->length;
- 0x00000000005111fd <+525>: mov 0x10(%rax),%rsi
- 0x0000000000511201 <+529>: cmp 0x10(%rbp),%rsi
- 0x0000000000511205 <+533>: jne 0x51129e <unicodekeys_lookup_unicode+686>
- Objects/stringlib/eq.h:
- 11 if (PyUnicode_GET_LENGTH(a) == 0)
- 0x000000000051120b <+539>: test %rsi,%rsi
- 0x000000000051120e <+542>: je 0x511112 <unicodekeys_lookup_unicode+290>
- 12 return 1;
- 13 if (PyUnicode_KIND(a) != PyUnicode_KIND(b))
- 0x0000000000511214 <+548>: movzbl 0x20(%rax),%edi
- 0x0000000000511218 <+552>: mov %edi,%edx
- 0x000000000051121a <+554>: xor 0x20(%rbp),%edx
- 0x000000000051121d <+557>: and $0x1c,%dl
- 0x0000000000511220 <+560>: jne 0x51129e <unicodekeys_lookup_unicode+686>
- 14 return 0;
- 15 return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b),
- 0x0000000000511222 <+562>: mov %edi,%edx
- 0x0000000000511224 <+564>: shr $0x2,%dl
- 0x0000000000511227 <+567>: and $0x7,%edx
- 0x000000000051122a <+570>: imul %rsi,%rdx
- ./Include/cpython/unicodeobject.h:
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x000000000051122e <+574>: movzbl 0x20(%rbp),%esi
- 0x0000000000511232 <+578>: test $0x20,%sil
- 0x0000000000511236 <+582>: je 0x422484 <unicodekeys_lookup_unicode.cold>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x000000000051123c <+588>: and $0x40,%sil
- 0x0000000000511240 <+592>: je 0x511321 <unicodekeys_lookup_unicode+817>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x0000000000511246 <+598>: mov %r10,%rsi
- 251 }
- 252
- 253 static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
- 254 void *data;
- 255 assert(!PyUnicode_IS_COMPACT(op));
- 256 data = _PyUnicodeObject_CAST(op)->data.any;
- 257 assert(data != NULL);
- 258 return data;
- 259 }
- 260
- 261 static inline void* PyUnicode_DATA(PyObject *op) {
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x0000000000511249 <+601>: test $0x20,%dil
- 0x000000000051124d <+605>: je 0x42248d <unicodekeys_lookup_unicode-977763>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x0000000000511253 <+611>: and $0x40,%dil
- 0x0000000000511257 <+615>: je 0x511318 <unicodekeys_lookup_unicode+808>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x000000000051125d <+621>: lea 0x28(%rax),%rdi
- 0x0000000000511261 <+625>: mov %r10,0x28(%rsp)
- 0x0000000000511266 <+630>: mov %r11,0x20(%rsp)
- 0x000000000051126b <+635>: mov %r8,0x18(%rsp)
- 0x0000000000511270 <+640>: mov %r9,0x10(%rsp)
- 0x0000000000511275 <+645>: mov %ecx,0xc(%rsp)
- 0x0000000000511279 <+649>: callq 0x41c140 <memcmp@plt>
- 0x000000000051127e <+654>: mov 0xc(%rsp),%ecx
- 0x0000000000511282 <+658>: mov 0x10(%rsp),%r9
- 0x0000000000511287 <+663>: test %eax,%eax
- 0x0000000000511289 <+665>: mov 0x18(%rsp),%r8
- 0x000000000051128e <+670>: mov 0x20(%rsp),%r11
- 0x0000000000511293 <+675>: mov 0x28(%rsp),%r10
- 0x0000000000511298 <+680>: je 0x511112 <unicodekeys_lookup_unicode+290>
- Objects/dictobject.c:
- 963 perturb >>= PERTURB_SHIFT;
- 0x000000000051129e <+686>: shr $0xa,%r9
- 964 i = mask & (i*5 + perturb + 1);
- 0x00000000005112a2 <+690>: lea (%r8,%r8,4),%r8
- 0x00000000005112a6 <+694>: lea 0x1(%r9,%r8,1),%r8
- 0x00000000005112ab <+699>: and %rbx,%r8
- 933 for (;;) {
- 0x00000000005112ae <+702>: jmpq 0x511036 <unicodekeys_lookup_unicode+70>
- 0x00000000005112b3 <+707>: nopl 0x0(%rax,%rax,1)
- 355 else if (log2size >= 32) {
- 0x00000000005112b8 <+712>: cmp $0x1f,%ecx
- 0x00000000005112bb <+715>: jg 0x42249f <unicodekeys_lookup_unicode-977745>
- 356 const int64_t *indices = (const int64_t*)(keys->dk_indices);
- 357 ix = indices[i];
- 358 }
- 359 #endif
- 360 else {
- 361 const int32_t *indices = (const int32_t*)(keys->dk_indices);
- 362 ix = indices[i];
- 0x00000000005112c1 <+721>: movslq (%r15,%r8,4),%r12
- 935 if (ix >= 0) {
- 0x00000000005112c5 <+725>: test %r12,%r12
- 0x00000000005112c8 <+728>: jns 0x51104d <unicodekeys_lookup_unicode+93>
- 0x00000000005112ce <+734>: jmpq 0x5110d7 <unicodekeys_lookup_unicode+231>
- 945 return DKIX_EMPTY;
- 946 }
- 947 perturb >>= PERTURB_SHIFT;
- 948 i = mask & (i*5 + perturb + 1);
- 0x00000000005112d3 <+739>: mov %r9,%rsi
- 0x00000000005112d6 <+742>: lea (%r8,%r8,4),%rdi
- 0x00000000005112da <+746>: shr $0x5,%rsi
- 0x00000000005112de <+750>: lea 0x1(%rsi,%rdi,1),%r8
- 0x00000000005112e3 <+755>: and %rbx,%r8
- 949 // Manual loop unrolling
- 950 ix = dictkeys_get_index(dk, i);
- 0x00000000005112e6 <+758>: jmpq 0x511083 <unicodekeys_lookup_unicode+147>
- 355 else if (log2size >= 32) {
- 0x00000000005112eb <+763>: cmp $0x1f,%ecx
- 0x00000000005112ee <+766>: jg 0x4224b1 <unicodekeys_lookup_unicode-977727>
- 356 const int64_t *indices = (const int64_t*)(keys->dk_indices);
- 357 ix = indices[i];
- 358 }
- 359 #endif
- 360 else {
- 361 const int32_t *indices = (const int32_t*)(keys->dk_indices);
- 362 ix = indices[i];
- 0x00000000005112f4 <+772>: movslq (%r15,%r8,4),%r12
- 0x00000000005112f8 <+776>: jmpq 0x5110fe <unicodekeys_lookup_unicode+270>
- ./Include/cpython/unicodeobject.h:
- 250 return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
- 0x00000000005112fd <+781>: lea 0x38(%rax),%rdi
- 0x0000000000511301 <+785>: jmpq 0x51119f <unicodekeys_lookup_unicode+431>
- 0x0000000000511306 <+790>: mov %r11,%rsi
- 251 }
- 252
- 253 static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
- 254 void *data;
- 255 assert(!PyUnicode_IS_COMPACT(op));
- 256 data = _PyUnicodeObject_CAST(op)->data.any;
- 257 assert(data != NULL);
- 258 return data;
- 259 }
- 260
- 261 static inline void* PyUnicode_DATA(PyObject *op) {
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x0000000000511309 <+793>: test $0x20,%dil
- 0x000000000051130d <+797>: jne 0x511192 <unicodekeys_lookup_unicode+418>
- 0x0000000000511313 <+803>: jmpq 0x422496 <unicodekeys_lookup_unicode-977754>
- 250 return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
- 0x0000000000511318 <+808>: lea 0x38(%rax),%rdi
- 0x000000000051131c <+812>: jmpq 0x511261 <unicodekeys_lookup_unicode+625>
- 0x0000000000511321 <+817>: mov %r11,%rsi
- 0x0000000000511324 <+820>: jmpq 0x511249 <unicodekeys_lookup_unicode+601>
- 0x0000000000511329 <+825>: jmpq 0x422496 <unicodekeys_lookup_unicode-977754>
- Address range 0x422484 to 0x4224ba:
- ./Include/cpython/unicodeobject.h:
- 253 static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
- 254 void *data;
- 255 assert(!PyUnicode_IS_COMPACT(op));
- 256 data = _PyUnicodeObject_CAST(op)->data.any;
- 257 assert(data != NULL);
- 258 return data;
- 259 }
- 260
- 261 static inline void* PyUnicode_DATA(PyObject *op) {
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 263 return _PyUnicode_COMPACT_DATA(op);
- 264 }
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 0x0000000000422484 <-977772>: mov 0x38(%rbp),%rsi
- 258 return data;
- 0x0000000000422488 <-977768>: jmpq 0x511249 <unicodekeys_lookup_unicode+601>
- 259 }
- 260
- 261 static inline void* PyUnicode_DATA(PyObject *op) {
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 263 return _PyUnicode_COMPACT_DATA(op);
- 264 }
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 0x000000000042248d <-977763>: mov 0x38(%rax),%rdi
- 258 return data;
- 0x0000000000422491 <-977759>: jmpq 0x511261 <unicodekeys_lookup_unicode+625>
- 259 }
- 260
- 261 static inline void* PyUnicode_DATA(PyObject *op) {
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 263 return _PyUnicode_COMPACT_DATA(op);
- 264 }
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 0x0000000000422496 <-977754>: mov 0x38(%rax),%rdi
- 258 return data;
- 0x000000000042249a <-977750>: jmpq 0x51119f <unicodekeys_lookup_unicode+431>
- Objects/dictobject.c:
- 357 ix = indices[i];
- 0x000000000042249f <-977745>: mov (%r15,%r8,8),%r12
- 0x00000000004224a3 <-977741>: jmpq 0x5112c5 <unicodekeys_lookup_unicode+725>
- ./Include/cpython/unicodeobject.h:
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 0x00000000004224a8 <-977736>: mov 0x38(%rbp),%rsi
- 258 return data;
- 0x00000000004224ac <-977732>: jmpq 0x511309 <unicodekeys_lookup_unicode+793>
- Objects/dictobject.c:
- 357 ix = indices[i];
- 0x00000000004224b1 <-977727>: mov (%r15,%r8,8),%r12
- 0x00000000004224b5 <-977723>: jmpq 0x5110fe <unicodekeys_lookup_unicode+270>
- End of assembler dump.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement