Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 0x0000000000502210 <+0>: push %r15
- 0x0000000000502212 <+2>: mov $0x1,%eax
- 0x0000000000502217 <+7>: lea 0x20(%rdi),%r15
- 0x000000000050221b <+11>: mov %rdx,%r9
- 0x000000000050221e <+14>: push %r14
- 0x0000000000502220 <+16>: mov %rax,%r14
- 0x0000000000502223 <+19>: lea 0x38(%rsi),%r11
- 0x0000000000502227 <+23>: lea 0x28(%rsi),%r10
- 0x000000000050222b <+27>: push %r13
- 0x000000000050222d <+29>: mov %rdx,%r13
- 0x0000000000502230 <+32>: push %r12
- 0x0000000000502232 <+34>: push %rbp
- 0x0000000000502233 <+35>: mov %rsi,%rbp
- 0x0000000000502236 <+38>: push %rbx
- 0x0000000000502237 <+39>: sub $0x38,%rsp
- 0x000000000050223b <+43>: movzbl 0x9(%rdi),%ecx
- 0x000000000050223f <+47>: shl %cl,%r14
- 0x0000000000502242 <+50>: movzbl 0x8(%rdi),%ecx
- 0x0000000000502246 <+54>: add %r15,%r14
- 0x0000000000502249 <+57>: shl %cl,%rax
- 0x000000000050224c <+60>: lea -0x1(%rax),%rbx
- 0x0000000000502250 <+64>: mov %rbx,%r8
- 0x0000000000502253 <+67>: and %rdx,%r8
- 0x0000000000502256 <+70>: cmp $0x7,%ecx
- 0x0000000000502259 <+73>: jg 0x5022e0 <unicodekeys_lookup_unicode+208>
- 0x000000000050225f <+79>: movsbq (%r15,%r8,1),%r12
- 0x0000000000502264 <+84>: test %r12,%r12
- 0x0000000000502267 <+87>: js 0x502348 <unicodekeys_lookup_unicode+312>
- 0x000000000050226d <+93>: mov %r12,%rax
- 0x0000000000502270 <+96>: shl $0x4,%rax
- 0x0000000000502274 <+100>: mov (%r14,%rax,1),%rax
- 0x0000000000502278 <+104>: cmp %rax,%rbp
- 0x000000000050227b <+107>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x0000000000502281 <+113>: cmp 0x18(%rax),%r13
- 0x0000000000502285 <+117>: je 0x502360 <unicodekeys_lookup_unicode+336>
- 0x000000000050228b <+123>: mov %r9,%rdx
- 0x000000000050228e <+126>: lea (%r8,%r8,4),%r12
- 0x0000000000502292 <+130>: shr $0x5,%rdx
- 0x0000000000502296 <+134>: lea 0x1(%r12,%rdx,1),%r8
- 0x000000000050229b <+139>: and %rbx,%r8
- 0x000000000050229e <+142>: cmp $0x7,%ecx
- 0x00000000005022a1 <+145>: jg 0x502310 <unicodekeys_lookup_unicode+256>
- 0x00000000005022a3 <+147>: movsbq (%r15,%r8,1),%r12
- 0x00000000005022a8 <+152>: test %r12,%r12
- 0x00000000005022ab <+155>: js 0x502328 <unicodekeys_lookup_unicode+280>
- 0x00000000005022ad <+157>: mov %r12,%rdi
- 0x00000000005022b0 <+160>: shl $0x4,%rdi
- 0x00000000005022b4 <+164>: mov (%r14,%rdi,1),%rax
- 0x00000000005022b8 <+168>: cmp %rax,%rbp
- 0x00000000005022bb <+171>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x00000000005022bd <+173>: cmp 0x18(%rax),%r13
- 0x00000000005022c1 <+177>: je 0x502405 <unicodekeys_lookup_unicode+501>
- 0x00000000005022c7 <+183>: shr $0xa,%r9
- 0x00000000005022cb <+187>: lea (%r8,%r8,4),%rdx
- 0x00000000005022cf <+191>: lea 0x1(%r9,%rdx,1),%r8
- 0x00000000005022d4 <+196>: and %rbx,%r8
- 0x00000000005022d7 <+199>: cmp $0x7,%ecx
- 0x00000000005022da <+202>: jle 0x50225f <unicodekeys_lookup_unicode+79>
- 0x00000000005022dc <+204>: nopl 0x0(%rax)
- 0x00000000005022e0 <+208>: cmp $0xf,%ecx
- 0x00000000005022e3 <+211>: jg 0x5024c0 <unicodekeys_lookup_unicode+688>
- 0x00000000005022e9 <+217>: movswq (%r15,%r8,2),%r12
- 0x00000000005022ee <+222>: test %r12,%r12
- 0x00000000005022f1 <+225>: jns 0x50226d <unicodekeys_lookup_unicode+93>
- 0x00000000005022f7 <+231>: cmp $0xffffffffffffffff,%r12
- 0x00000000005022fb <+235>: je 0x502352 <unicodekeys_lookup_unicode+322>
- 0x00000000005022fd <+237>: mov %r9,%rdx
- 0x0000000000502300 <+240>: lea (%r8,%r8,4),%r8
- 0x0000000000502304 <+244>: shr $0x5,%rdx
- 0x0000000000502308 <+248>: lea 0x1(%r8,%rdx,1),%r8
- 0x000000000050230d <+253>: and %rbx,%r8
- 0x0000000000502310 <+256>: cmp $0xf,%ecx
- 0x0000000000502313 <+259>: jg 0x5024f3 <unicodekeys_lookup_unicode+739>
- 0x0000000000502319 <+265>: movswq (%r15,%r8,2),%r12
- 0x000000000050231e <+270>: test %r12,%r12
- 0x0000000000502321 <+273>: jns 0x5022ad <unicodekeys_lookup_unicode+157>
- 0x0000000000502323 <+275>: nopl 0x0(%rax,%rax,1)
- 0x0000000000502328 <+280>: cmp $0xffffffffffffffff,%r12
- 0x000000000050232c <+284>: jne 0x5024a6 <unicodekeys_lookup_unicode+662>
- 0x0000000000502332 <+290>: add $0x38,%rsp
- 0x0000000000502336 <+294>: mov %r12,%rax
- 0x0000000000502339 <+297>: pop %rbx
- 0x000000000050233a <+298>: pop %rbp
- 0x000000000050233b <+299>: pop %r12
- 0x000000000050233d <+301>: pop %r13
- 0x000000000050233f <+303>: pop %r14
- 0x0000000000502341 <+305>: pop %r15
- 0x0000000000502343 <+307>: retq
- 0x0000000000502344 <+308>: nopl 0x0(%rax)
- 0x0000000000502348 <+312>: cmp $0xffffffffffffffff,%r12
- 0x000000000050234c <+316>: jne 0x5024db <unicodekeys_lookup_unicode+715>
- 0x0000000000502352 <+322>: mov $0xffffffffffffffff,%r12
- 0x0000000000502359 <+329>: jmp 0x502332 <unicodekeys_lookup_unicode+290>
- 0x000000000050235b <+331>: nopl 0x0(%rax,%rax,1)
- 0x0000000000502360 <+336>: mov 0x10(%rax),%rsi
- 0x0000000000502364 <+340>: cmp 0x10(%rbp),%rsi
- 0x0000000000502368 <+344>: jne 0x421db8 <unicodekeys_lookup_unicode-918616>
- 0x000000000050236e <+350>: test %rsi,%rsi
- 0x0000000000502371 <+353>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x0000000000502373 <+355>: movzbl 0x20(%rax),%edi
- 0x0000000000502377 <+359>: movzbl 0x20(%rbp),%edx
- 0x000000000050237b <+363>: xor %edi,%edx
- 0x000000000050237d <+365>: and $0x1c,%edx
- 0x0000000000502380 <+368>: jne 0x421db8 <unicodekeys_lookup_unicode-918616>
- 0x0000000000502386 <+374>: mov %edi,%edx
- 0x0000000000502388 <+376>: shr $0x2,%dl
- 0x000000000050238b <+379>: and $0x7,%edx
- 0x000000000050238e <+382>: imul %rsi,%rdx
- 0x0000000000502392 <+386>: movzbl 0x20(%rbp),%esi
- 0x0000000000502396 <+390>: test $0x20,%sil
- 0x000000000050239a <+394>: je 0x421daf <unicodekeys_lookup_unicode.cold>
- 0x00000000005023a0 <+400>: and $0x40,%esi
- 0x00000000005023a3 <+403>: je 0x502517 <unicodekeys_lookup_unicode+775>
- 0x00000000005023a9 <+409>: mov %r10,%rsi
- 0x00000000005023ac <+412>: test $0x20,%dil
- 0x00000000005023b0 <+416>: je 0x502531 <unicodekeys_lookup_unicode+801>
- 0x00000000005023b6 <+422>: and $0x40,%edi
- 0x00000000005023b9 <+425>: je 0x50250e <unicodekeys_lookup_unicode+766>
- 0x00000000005023bf <+431>: lea 0x28(%rax),%rdi
- 0x00000000005023c3 <+435>: mov %r10,0x28(%rsp)
- 0x00000000005023c8 <+440>: mov %r11,0x20(%rsp)
- 0x00000000005023cd <+445>: mov %r9,0x18(%rsp)
- 0x00000000005023d2 <+450>: mov %r8,0x10(%rsp)
- 0x00000000005023d7 <+455>: mov %ecx,0xc(%rsp)
- 0x00000000005023db <+459>: callq 0x41c140 <memcmp@plt>
- 0x00000000005023e0 <+464>: mov 0xc(%rsp),%ecx
- 0x00000000005023e4 <+468>: mov 0x10(%rsp),%r8
- 0x00000000005023e9 <+473>: test %eax,%eax
- 0x00000000005023eb <+475>: mov 0x18(%rsp),%r9
- 0x00000000005023f0 <+480>: mov 0x20(%rsp),%r11
- 0x00000000005023f5 <+485>: mov 0x28(%rsp),%r10
- 0x00000000005023fa <+490>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x0000000000502400 <+496>: jmpq 0x421db8 <unicodekeys_lookup_unicode-918616>
- 0x0000000000502405 <+501>: mov 0x10(%rax),%rsi
- 0x0000000000502409 <+505>: cmp 0x10(%rbp),%rsi
- 0x000000000050240d <+509>: jne 0x5024a6 <unicodekeys_lookup_unicode+662>
- 0x0000000000502413 <+515>: test %rsi,%rsi
- 0x0000000000502416 <+518>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x000000000050241c <+524>: movzbl 0x20(%rax),%edi
- 0x0000000000502420 <+528>: mov %edi,%edx
- 0x0000000000502422 <+530>: xor 0x20(%rbp),%edx
- 0x0000000000502425 <+533>: and $0x1c,%dl
- 0x0000000000502428 <+536>: jne 0x5024a6 <unicodekeys_lookup_unicode+662>
- 0x000000000050242a <+538>: mov %edi,%edx
- 0x000000000050242c <+540>: shr $0x2,%dl
- 0x000000000050242f <+543>: and $0x7,%edx
- 0x0000000000502432 <+546>: imul %rsi,%rdx
- 0x0000000000502436 <+550>: movzbl 0x20(%rbp),%esi
- 0x000000000050243a <+554>: test $0x20,%sil
- 0x000000000050243e <+558>: je 0x421df4 <unicodekeys_lookup_unicode-918556>
- 0x0000000000502444 <+564>: and $0x40,%sil
- 0x0000000000502448 <+568>: je 0x502529 <unicodekeys_lookup_unicode+793>
- 0x000000000050244e <+574>: mov %r10,%rsi
- 0x0000000000502451 <+577>: test $0x20,%dil
- 0x0000000000502455 <+581>: je 0x421de2 <unicodekeys_lookup_unicode-918574>
- 0x000000000050245b <+587>: and $0x40,%dil
- 0x000000000050245f <+591>: je 0x502505 <unicodekeys_lookup_unicode+757>
- 0x0000000000502465 <+597>: lea 0x28(%rax),%rdi
- 0x0000000000502469 <+601>: mov %r10,0x28(%rsp)
- 0x000000000050246e <+606>: mov %r11,0x20(%rsp)
- 0x0000000000502473 <+611>: mov %r8,0x18(%rsp)
- 0x0000000000502478 <+616>: mov %r9,0x10(%rsp)
- 0x000000000050247d <+621>: mov %ecx,0xc(%rsp)
- 0x0000000000502481 <+625>: callq 0x41c140 <memcmp@plt>
- 0x0000000000502486 <+630>: mov 0xc(%rsp),%ecx
- 0x000000000050248a <+634>: mov 0x10(%rsp),%r9
- 0x000000000050248f <+639>: test %eax,%eax
- 0x0000000000502491 <+641>: mov 0x18(%rsp),%r8
- 0x0000000000502496 <+646>: mov 0x20(%rsp),%r11
- 0x000000000050249b <+651>: mov 0x28(%rsp),%r10
- 0x00000000005024a0 <+656>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x00000000005024a6 <+662>: shr $0xa,%r9
- 0x00000000005024aa <+666>: lea (%r8,%r8,4),%r8
- 0x00000000005024ae <+670>: lea 0x1(%r9,%r8,1),%r8
- 0x00000000005024b3 <+675>: and %rbx,%r8
- 0x00000000005024b6 <+678>: jmpq 0x502256 <unicodekeys_lookup_unicode+70>
- 0x00000000005024bb <+683>: nopl 0x0(%rax,%rax,1)
- 0x00000000005024c0 <+688>: cmp $0x1f,%ecx
- 0x00000000005024c3 <+691>: jg 0x421dd9 <unicodekeys_lookup_unicode-918583>
- 0x00000000005024c9 <+697>: movslq (%r15,%r8,4),%r12
- 0x00000000005024cd <+701>: test %r12,%r12
- 0x00000000005024d0 <+704>: jns 0x50226d <unicodekeys_lookup_unicode+93>
- 0x00000000005024d6 <+710>: jmpq 0x5022f7 <unicodekeys_lookup_unicode+231>
- 0x00000000005024db <+715>: mov %r9,%rsi
- 0x00000000005024de <+718>: lea (%r8,%r8,4),%rdi
- 0x00000000005024e2 <+722>: shr $0x5,%rsi
- 0x00000000005024e6 <+726>: lea 0x1(%rsi,%rdi,1),%r8
- 0x00000000005024eb <+731>: and %rbx,%r8
- 0x00000000005024ee <+734>: jmpq 0x5022a3 <unicodekeys_lookup_unicode+147>
- 0x00000000005024f3 <+739>: cmp $0x1f,%ecx
- 0x00000000005024f6 <+742>: jg 0x421deb <unicodekeys_lookup_unicode-918565>
- 0x00000000005024fc <+748>: movslq (%r15,%r8,4),%r12
- 0x0000000000502500 <+752>: jmpq 0x50231e <unicodekeys_lookup_unicode+270>
- 0x0000000000502505 <+757>: lea 0x38(%rax),%rdi
- 0x0000000000502509 <+761>: jmpq 0x502469 <unicodekeys_lookup_unicode+601>
- 0x000000000050250e <+766>: lea 0x38(%rax),%rdi
- 0x0000000000502512 <+770>: jmpq 0x5023c3 <unicodekeys_lookup_unicode+435>
- 0x0000000000502517 <+775>: mov %r11,%rsi
- 0x000000000050251a <+778>: test $0x20,%dil
- 0x000000000050251e <+782>: jne 0x5023b6 <unicodekeys_lookup_unicode+422>
- 0x0000000000502524 <+788>: jmpq 0x421dfd <unicodekeys_lookup_unicode-918547>
- 0x0000000000502529 <+793>: mov %r11,%rsi
- 0x000000000050252c <+796>: jmpq 0x502451 <unicodekeys_lookup_unicode+577>
- 0x0000000000502531 <+801>: jmpq 0x421dfd <unicodekeys_lookup_unicode-918547>
- Address range 0x421daf to 0x421e06:
- 0x0000000000421daf <-918625>: mov 0x38(%rbp),%rsi
- 0x0000000000421db3 <-918621>: jmpq 0x50251a <unicodekeys_lookup_unicode+778>
- 0x0000000000421db8 <-918616>: mov %r9,%rax
- 0x0000000000421dbb <-918613>: lea (%r8,%r8,4),%r8
- 0x0000000000421dbf <-918609>: shr $0x5,%rax
- 0x0000000000421dc3 <-918605>: lea 0x1(%rax,%r8,1),%r8
- 0x0000000000421dc8 <-918600>: and %rbx,%r8
- 0x0000000000421dcb <-918597>: cmp $0x7,%ecx
- 0x0000000000421dce <-918594>: jg 0x502310 <unicodekeys_lookup_unicode+256>
- 0x0000000000421dd4 <-918588>: jmpq 0x5022a3 <unicodekeys_lookup_unicode+147>
- 0x0000000000421dd9 <-918583>: mov (%r15,%r8,8),%r12
- 0x0000000000421ddd <-918579>: jmpq 0x5024cd <unicodekeys_lookup_unicode+701>
- 0x0000000000421de2 <-918574>: mov 0x38(%rax),%rdi
- 0x0000000000421de6 <-918570>: jmpq 0x502469 <unicodekeys_lookup_unicode+601>
- 0x0000000000421deb <-918565>: mov (%r15,%r8,8),%r12
- 0x0000000000421def <-918561>: jmpq 0x50231e <unicodekeys_lookup_unicode+270>
- 0x0000000000421df4 <-918556>: mov 0x38(%rbp),%rsi
- 0x0000000000421df8 <-918552>: jmpq 0x502451 <unicodekeys_lookup_unicode+577>
- 0x0000000000421dfd <-918547>: mov 0x38(%rax),%rdi
- 0x0000000000421e01 <-918543>: jmpq 0x5023c3 <unicodekeys_lookup_unicode+435>
- ./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);
- 0x0000000000502210 <+0>: push %r15
- 0x0000000000502212 <+2>: mov $0x1,%eax
- 0x0000000000502217 <+7>: lea 0x20(%rdi),%r15
- 196 return (&indices[index]);
- 0x000000000050221b <+11>: mov %rdx,%r9
- 0x000000000050221e <+14>: push %r14
- 0x0000000000502220 <+16>: mov %rax,%r14
- 0x0000000000502223 <+19>: lea 0x38(%rsi),%r11
- 0x0000000000502227 <+23>: lea 0x28(%rsi),%r10
- 0x000000000050222b <+27>: push %r13
- 0x000000000050222d <+29>: mov %rdx,%r13
- 0x0000000000502230 <+32>: push %r12
- 0x0000000000502232 <+34>: push %rbp
- 0x0000000000502233 <+35>: mov %rsi,%rbp
- 0x0000000000502236 <+38>: push %rbx
- 0x0000000000502237 <+39>: sub $0x38,%rsp
- 0x000000000050223b <+43>: movzbl 0x9(%rdi),%ecx
- 0x000000000050223f <+47>: shl %cl,%r14
- 0x0000000000502242 <+50>: movzbl 0x8(%rdi),%ecx
- 0x0000000000502246 <+54>: add %r15,%r14
- Objects/dictobject.c:
- warning: Source file is more recent than executable.
- 888 size_t mask = DK_MASK(dk);
- 0x0000000000502249 <+57>: shl %cl,%rax
- 0x000000000050224c <+60>: lea -0x1(%rax),%rbx
- 889 size_t perturb = hash;
- 890 size_t i = (size_t)hash & mask;
- 0x0000000000502250 <+64>: mov %rbx,%r8
- 0x0000000000502253 <+67>: and %rdx,%r8
- 893 ix = dictkeys_get_index(dk, i);
- 0x0000000000502256 <+70>: cmp $0x7,%ecx
- 0x0000000000502259 <+73>: jg 0x5022e0 <unicodekeys_lookup_unicode+208>
- 348 ix = indices[i];
- 0x000000000050225f <+79>: movsbq (%r15,%r8,1),%r12
- 894 if (ix >= 0) {
- 0x0000000000502264 <+84>: test %r12,%r12
- 0x0000000000502267 <+87>: js 0x502348 <unicodekeys_lookup_unicode+312>
- 919 }
- 920 Py_UNREACHABLE();
- 921 }
- 922
- 923 static inline Py_ALWAYS_INLINE
- 924 Py_ssize_t compare_unicode_generic(PyDictObject *mp, PyDictKeysObject *dk,
- 925 void *ep0, Py_ssize_t ix, PyObject *key, Py_hash_t hash)
- 926 {
- 927 PyDictUnicodeEntry *ep = &((PyDictUnicodeEntry *)ep0)[ix];
- 928 assert(ep->me_key != NULL);
- 929 assert(PyUnicode_CheckExact(ep->me_key));
- 930 assert(!PyUnicode_CheckExact(key));
- 931 // TODO: Thread safety
- 932
- 933 if (unicode_get_hash(ep->me_key) == hash) {
- 934 PyObject *startkey = ep->me_key;
- 935 Py_INCREF(startkey);
- 936 int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
- 937 Py_DECREF(startkey);
- 938 if (cmp < 0) {
- 939 return DKIX_ERROR;
- 940 }
- 941 if (dk == mp->ma_keys && ep->me_key == startkey) {
- 942 if (cmp > 0) {
- 943 return ix;
- 944 }
- 945 }
- 946 else {
- 947 /* The dict was mutated, restart */
- 948 return DKIX_KEY_CHANGED;
- 949 }
- 950 }
- 951 return DKIX_DUMMY;
- 952 }
- 953
- 954 static Py_ssize_t
- 955 unicodekeys_lookup_generic(PyDictObject *mp, PyDictKeysObject* dk, PyObject *key, Py_hash_t hash)
- 956 {
- 957 return do_lookup(mp, dk, key, hash, (generic_entries_func)DK_UNICODE_ENTRIES, compare_unicode_generic);
- 958 }
- 959
- 960 static inline Py_ALWAYS_INLINE
- 961 Py_ssize_t compare_unicode_unicode(PyDictObject *mp, PyDictKeysObject *dk,
- 962 void *ep0, Py_ssize_t ix, PyObject *key, Py_hash_t hash)
- 963 {
- 964 PyDictUnicodeEntry *ep = &((PyDictUnicodeEntry *)ep0)[ix];
- 965 assert(ep->me_key != NULL);
- 966 assert(PyUnicode_CheckExact(ep->me_key));
- 967 if (ep->me_key == key ||
- 0x000000000050226d <+93>: mov %r12,%rax
- 0x0000000000502270 <+96>: shl $0x4,%rax
- 0x0000000000502274 <+100>: mov (%r14,%rax,1),%rax
- 0x0000000000502278 <+104>: cmp %rax,%rbp
- 0x000000000050227b <+107>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 286 return _PyASCIIObject_CAST(o)->hash;
- 0x0000000000502281 <+113>: cmp 0x18(%rax),%r13
- 0x0000000000502285 <+117>: je 0x502360 <unicodekeys_lookup_unicode+336>
- 901 return DKIX_EMPTY;
- 902 }
- 903 perturb >>= PERTURB_SHIFT;
- 904 i = mask & (i*5 + perturb + 1);
- 0x000000000050228b <+123>: mov %r9,%rdx
- 0x000000000050228e <+126>: lea (%r8,%r8,4),%r12
- 0x0000000000502292 <+130>: shr $0x5,%rdx
- 0x0000000000502296 <+134>: lea 0x1(%r12,%rdx,1),%r8
- 0x000000000050229b <+139>: and %rbx,%r8
- 905
- 906 // Manual loop unrolling
- 907 ix = dictkeys_get_index(dk, i);
- 0x000000000050229e <+142>: cmp $0x7,%ecx
- 0x00000000005022a1 <+145>: jg 0x502310 <unicodekeys_lookup_unicode+256>
- 348 ix = indices[i];
- 0x00000000005022a3 <+147>: movsbq (%r15,%r8,1),%r12
- 908 if (ix >= 0) {
- 0x00000000005022a8 <+152>: test %r12,%r12
- 0x00000000005022ab <+155>: js 0x502328 <unicodekeys_lookup_unicode+280>
- 919 }
- 920 Py_UNREACHABLE();
- 921 }
- 922
- 923 static inline Py_ALWAYS_INLINE
- 924 Py_ssize_t compare_unicode_generic(PyDictObject *mp, PyDictKeysObject *dk,
- 925 void *ep0, Py_ssize_t ix, PyObject *key, Py_hash_t hash)
- 926 {
- 927 PyDictUnicodeEntry *ep = &((PyDictUnicodeEntry *)ep0)[ix];
- 928 assert(ep->me_key != NULL);
- 929 assert(PyUnicode_CheckExact(ep->me_key));
- 930 assert(!PyUnicode_CheckExact(key));
- 931 // TODO: Thread safety
- 932
- 933 if (unicode_get_hash(ep->me_key) == hash) {
- 934 PyObject *startkey = ep->me_key;
- 935 Py_INCREF(startkey);
- 936 int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
- 937 Py_DECREF(startkey);
- 938 if (cmp < 0) {
- 939 return DKIX_ERROR;
- 940 }
- 941 if (dk == mp->ma_keys && ep->me_key == startkey) {
- 942 if (cmp > 0) {
- 943 return ix;
- 944 }
- 945 }
- 946 else {
- 947 /* The dict was mutated, restart */
- 948 return DKIX_KEY_CHANGED;
- 949 }
- 950 }
- 951 return DKIX_DUMMY;
- 952 }
- 953
- 954 static Py_ssize_t
- 955 unicodekeys_lookup_generic(PyDictObject *mp, PyDictKeysObject* dk, PyObject *key, Py_hash_t hash)
- 956 {
- 957 return do_lookup(mp, dk, key, hash, (generic_entries_func)DK_UNICODE_ENTRIES, compare_unicode_generic);
- 958 }
- 959
- 960 static inline Py_ALWAYS_INLINE
- 961 Py_ssize_t compare_unicode_unicode(PyDictObject *mp, PyDictKeysObject *dk,
- 962 void *ep0, Py_ssize_t ix, PyObject *key, Py_hash_t hash)
- 963 {
- 964 PyDictUnicodeEntry *ep = &((PyDictUnicodeEntry *)ep0)[ix];
- 965 assert(ep->me_key != NULL);
- 966 assert(PyUnicode_CheckExact(ep->me_key));
- 967 if (ep->me_key == key ||
- 0x00000000005022ad <+157>: mov %r12,%rdi
- 0x00000000005022b0 <+160>: shl $0x4,%rdi
- 0x00000000005022b4 <+164>: mov (%r14,%rdi,1),%rax
- 0x00000000005022b8 <+168>: cmp %rax,%rbp
- 0x00000000005022bb <+171>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 286 return _PyASCIIObject_CAST(o)->hash;
- 0x00000000005022bd <+173>: cmp 0x18(%rax),%r13
- 0x00000000005022c1 <+177>: je 0x502405 <unicodekeys_lookup_unicode+501>
- 915 return DKIX_EMPTY;
- 916 }
- 917 perturb >>= PERTURB_SHIFT;
- 0x00000000005022c7 <+183>: shr $0xa,%r9
- 918 i = mask & (i*5 + perturb + 1);
- 0x00000000005022cb <+187>: lea (%r8,%r8,4),%rdx
- 0x00000000005022cf <+191>: lea 0x1(%r9,%rdx,1),%r8
- 0x00000000005022d4 <+196>: and %rbx,%r8
- 893 ix = dictkeys_get_index(dk, i);
- 0x00000000005022d7 <+199>: cmp $0x7,%ecx
- 0x00000000005022da <+202>: jle 0x50225f <unicodekeys_lookup_unicode+79>
- 0x00000000005022dc <+204>: nopl 0x0(%rax)
- 350 else if (log2size < 16) {
- 0x00000000005022e0 <+208>: cmp $0xf,%ecx
- 0x00000000005022e3 <+211>: jg 0x5024c0 <unicodekeys_lookup_unicode+688>
- 351 const int16_t *indices = (const int16_t*)(keys->dk_indices);
- 352 ix = indices[i];
- 0x00000000005022e9 <+217>: movswq (%r15,%r8,2),%r12
- 894 if (ix >= 0) {
- 0x00000000005022ee <+222>: test %r12,%r12
- 0x00000000005022f1 <+225>: jns 0x50226d <unicodekeys_lookup_unicode+93>
- 895 ix = check_lookup(mp, dk, ep0, ix, key, hash);
- 896 if (ix != DKIX_DUMMY) {
- 897 return ix;
- 898 }
- 899 }
- 900 else if (ix == DKIX_EMPTY) {
- 0x00000000005022f7 <+231>: cmp $0xffffffffffffffff,%r12
- 0x00000000005022fb <+235>: je 0x502352 <unicodekeys_lookup_unicode+322>
- 901 return DKIX_EMPTY;
- 902 }
- 903 perturb >>= PERTURB_SHIFT;
- 904 i = mask & (i*5 + perturb + 1);
- 0x00000000005022fd <+237>: mov %r9,%rdx
- 0x0000000000502300 <+240>: lea (%r8,%r8,4),%r8
- 0x0000000000502304 <+244>: shr $0x5,%rdx
- 0x0000000000502308 <+248>: lea 0x1(%r8,%rdx,1),%r8
- 0x000000000050230d <+253>: and %rbx,%r8
- 905
- 906 // Manual loop unrolling
- 907 ix = dictkeys_get_index(dk, i);
- 0x0000000000502310 <+256>: cmp $0xf,%ecx
- 0x0000000000502313 <+259>: jg 0x5024f3 <unicodekeys_lookup_unicode+739>
- 352 ix = indices[i];
- 0x0000000000502319 <+265>: movswq (%r15,%r8,2),%r12
- 908 if (ix >= 0) {
- 0x000000000050231e <+270>: test %r12,%r12
- 0x0000000000502321 <+273>: jns 0x5022ad <unicodekeys_lookup_unicode+157>
- 0x0000000000502323 <+275>: nopl 0x0(%rax,%rax,1)
- 909 ix = check_lookup(mp, dk, ep0, ix, key, hash);
- 910 if (ix != DKIX_DUMMY) {
- 911 return ix;
- 912 }
- 913 }
- 914 else if (ix == DKIX_EMPTY) {
- 0x0000000000502328 <+280>: cmp $0xffffffffffffffff,%r12
- 0x000000000050232c <+284>: jne 0x5024a6 <unicodekeys_lookup_unicode+662>
- 0x0000000000502332 <+290>: add $0x38,%rsp
- 0x0000000000502336 <+294>: mov %r12,%rax
- 0x0000000000502339 <+297>: pop %rbx
- 0x000000000050233a <+298>: pop %rbp
- 0x000000000050233b <+299>: pop %r12
- 0x000000000050233d <+301>: pop %r13
- 0x000000000050233f <+303>: pop %r14
- 0x0000000000502341 <+305>: pop %r15
- 0x0000000000502343 <+307>: retq
- 0x0000000000502344 <+308>: nopl 0x0(%rax)
- 900 else if (ix == DKIX_EMPTY) {
- 0x0000000000502348 <+312>: cmp $0xffffffffffffffff,%r12
- 0x000000000050234c <+316>: jne 0x5024db <unicodekeys_lookup_unicode+715>
- 0x0000000000502352 <+322>: mov $0xffffffffffffffff,%r12
- 0x0000000000502359 <+329>: jmp 0x502332 <unicodekeys_lookup_unicode+290>
- 0x000000000050235b <+331>: nopl 0x0(%rax,%rax,1)
- ./Include/cpython/unicodeobject.h:
- 280 return _PyASCIIObject_CAST(op)->length;
- 0x0000000000502360 <+336>: mov 0x10(%rax),%rsi
- 0x0000000000502364 <+340>: cmp 0x10(%rbp),%rsi
- 0x0000000000502368 <+344>: jne 0x421db8 <unicodekeys_lookup_unicode-918616>
- Objects/stringlib/eq.h:
- 11 if (PyUnicode_GET_LENGTH(a) == 0)
- 0x000000000050236e <+350>: test %rsi,%rsi
- 0x0000000000502371 <+353>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 12 return 1;
- 13 if (PyUnicode_KIND(a) != PyUnicode_KIND(b))
- 0x0000000000502373 <+355>: movzbl 0x20(%rax),%edi
- 0x0000000000502377 <+359>: movzbl 0x20(%rbp),%edx
- 0x000000000050237b <+363>: xor %edi,%edx
- 0x000000000050237d <+365>: and $0x1c,%edx
- 0x0000000000502380 <+368>: jne 0x421db8 <unicodekeys_lookup_unicode-918616>
- 14 return 0;
- 15 return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b),
- 0x0000000000502386 <+374>: mov %edi,%edx
- 0x0000000000502388 <+376>: shr $0x2,%dl
- 0x000000000050238b <+379>: and $0x7,%edx
- 0x000000000050238e <+382>: imul %rsi,%rdx
- ./Include/cpython/unicodeobject.h:
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x0000000000502392 <+386>: movzbl 0x20(%rbp),%esi
- 0x0000000000502396 <+390>: test $0x20,%sil
- 0x000000000050239a <+394>: je 0x421daf <unicodekeys_lookup_unicode.cold>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x00000000005023a0 <+400>: and $0x40,%esi
- 0x00000000005023a3 <+403>: je 0x502517 <unicodekeys_lookup_unicode+775>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x00000000005023a9 <+409>: 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)) {
- 0x00000000005023ac <+412>: test $0x20,%dil
- 0x00000000005023b0 <+416>: je 0x502531 <unicodekeys_lookup_unicode+801>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x00000000005023b6 <+422>: and $0x40,%edi
- 0x00000000005023b9 <+425>: je 0x50250e <unicodekeys_lookup_unicode+766>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x00000000005023bf <+431>: lea 0x28(%rax),%rdi
- 0x00000000005023c3 <+435>: mov %r10,0x28(%rsp)
- 0x00000000005023c8 <+440>: mov %r11,0x20(%rsp)
- 0x00000000005023cd <+445>: mov %r9,0x18(%rsp)
- 0x00000000005023d2 <+450>: mov %r8,0x10(%rsp)
- 0x00000000005023d7 <+455>: mov %ecx,0xc(%rsp)
- 0x00000000005023db <+459>: callq 0x41c140 <memcmp@plt>
- 0x00000000005023e0 <+464>: mov 0xc(%rsp),%ecx
- 0x00000000005023e4 <+468>: mov 0x10(%rsp),%r8
- 0x00000000005023e9 <+473>: test %eax,%eax
- 0x00000000005023eb <+475>: mov 0x18(%rsp),%r9
- 0x00000000005023f0 <+480>: mov 0x20(%rsp),%r11
- 0x00000000005023f5 <+485>: mov 0x28(%rsp),%r10
- 0x00000000005023fa <+490>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 0x0000000000502400 <+496>: jmpq 0x421db8 <unicodekeys_lookup_unicode-918616>
- 264 }
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 266 }
- 267 #define PyUnicode_DATA(op) PyUnicode_DATA(_PyObject_CAST(op))
- 268
- 269 /* Return pointers to the canonical representation cast to unsigned char,
- 270 Py_UCS2, or Py_UCS4 for direct character access.
- 271 No checks are performed, use PyUnicode_KIND() before to ensure
- 272 these will work correctly. */
- 273
- 274 #define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
- 275 #define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
- 276 #define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
- 277
- 278 /* Returns the length of the unicode string. */
- 279 static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
- 280 return _PyASCIIObject_CAST(op)->length;
- 0x0000000000502405 <+501>: mov 0x10(%rax),%rsi
- 0x0000000000502409 <+505>: cmp 0x10(%rbp),%rsi
- 0x000000000050240d <+509>: jne 0x5024a6 <unicodekeys_lookup_unicode+662>
- Objects/stringlib/eq.h:
- 11 if (PyUnicode_GET_LENGTH(a) == 0)
- 0x0000000000502413 <+515>: test %rsi,%rsi
- 0x0000000000502416 <+518>: je 0x502332 <unicodekeys_lookup_unicode+290>
- 12 return 1;
- 13 if (PyUnicode_KIND(a) != PyUnicode_KIND(b))
- 0x000000000050241c <+524>: movzbl 0x20(%rax),%edi
- 0x0000000000502420 <+528>: mov %edi,%edx
- 0x0000000000502422 <+530>: xor 0x20(%rbp),%edx
- 0x0000000000502425 <+533>: and $0x1c,%dl
- 0x0000000000502428 <+536>: jne 0x5024a6 <unicodekeys_lookup_unicode+662>
- 14 return 0;
- 15 return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b),
- 0x000000000050242a <+538>: mov %edi,%edx
- 0x000000000050242c <+540>: shr $0x2,%dl
- 0x000000000050242f <+543>: and $0x7,%edx
- 0x0000000000502432 <+546>: imul %rsi,%rdx
- ./Include/cpython/unicodeobject.h:
- 262 if (PyUnicode_IS_COMPACT(op)) {
- 0x0000000000502436 <+550>: movzbl 0x20(%rbp),%esi
- 0x000000000050243a <+554>: test $0x20,%sil
- 0x000000000050243e <+558>: je 0x421df4 <unicodekeys_lookup_unicode-918556>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x0000000000502444 <+564>: and $0x40,%sil
- 0x0000000000502448 <+568>: je 0x502529 <unicodekeys_lookup_unicode+793>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x000000000050244e <+574>: 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)) {
- 0x0000000000502451 <+577>: test $0x20,%dil
- 0x0000000000502455 <+581>: je 0x421de2 <unicodekeys_lookup_unicode-918574>
- 263 return _PyUnicode_COMPACT_DATA(op);
- 0x000000000050245b <+587>: and $0x40,%dil
- 0x000000000050245f <+591>: je 0x502505 <unicodekeys_lookup_unicode+757>
- 248 return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
- 0x0000000000502465 <+597>: lea 0x28(%rax),%rdi
- 0x0000000000502469 <+601>: mov %r10,0x28(%rsp)
- 0x000000000050246e <+606>: mov %r11,0x20(%rsp)
- 0x0000000000502473 <+611>: mov %r8,0x18(%rsp)
- 0x0000000000502478 <+616>: mov %r9,0x10(%rsp)
- 0x000000000050247d <+621>: mov %ecx,0xc(%rsp)
- 0x0000000000502481 <+625>: callq 0x41c140 <memcmp@plt>
- 0x0000000000502486 <+630>: mov 0xc(%rsp),%ecx
- 0x000000000050248a <+634>: mov 0x10(%rsp),%r9
- 0x000000000050248f <+639>: test %eax,%eax
- 0x0000000000502491 <+641>: mov 0x18(%rsp),%r8
- 0x0000000000502496 <+646>: mov 0x20(%rsp),%r11
- 0x000000000050249b <+651>: mov 0x28(%rsp),%r10
- 0x00000000005024a0 <+656>: je 0x502332 <unicodekeys_lookup_unicode+290>
- Objects/dictobject.c:
- 917 perturb >>= PERTURB_SHIFT;
- 0x00000000005024a6 <+662>: shr $0xa,%r9
- 918 i = mask & (i*5 + perturb + 1);
- 0x00000000005024aa <+666>: lea (%r8,%r8,4),%r8
- 0x00000000005024ae <+670>: lea 0x1(%r9,%r8,1),%r8
- 0x00000000005024b3 <+675>: and %rbx,%r8
- 892 for (;;) {
- 0x00000000005024b6 <+678>: jmpq 0x502256 <unicodekeys_lookup_unicode+70>
- 0x00000000005024bb <+683>: nopl 0x0(%rax,%rax,1)
- 355 else if (log2size >= 32) {
- 0x00000000005024c0 <+688>: cmp $0x1f,%ecx
- 0x00000000005024c3 <+691>: jg 0x421dd9 <unicodekeys_lookup_unicode-918583>
- 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];
- 0x00000000005024c9 <+697>: movslq (%r15,%r8,4),%r12
- 894 if (ix >= 0) {
- 0x00000000005024cd <+701>: test %r12,%r12
- 0x00000000005024d0 <+704>: jns 0x50226d <unicodekeys_lookup_unicode+93>
- 0x00000000005024d6 <+710>: jmpq 0x5022f7 <unicodekeys_lookup_unicode+231>
- 901 return DKIX_EMPTY;
- 902 }
- 903 perturb >>= PERTURB_SHIFT;
- 904 i = mask & (i*5 + perturb + 1);
- 0x00000000005024db <+715>: mov %r9,%rsi
- 0x00000000005024de <+718>: lea (%r8,%r8,4),%rdi
- 0x00000000005024e2 <+722>: shr $0x5,%rsi
- 0x00000000005024e6 <+726>: lea 0x1(%rsi,%rdi,1),%r8
- 0x00000000005024eb <+731>: and %rbx,%r8
- 905
- 906 // Manual loop unrolling
- 907 ix = dictkeys_get_index(dk, i);
- 0x00000000005024ee <+734>: jmpq 0x5022a3 <unicodekeys_lookup_unicode+147>
- 355 else if (log2size >= 32) {
- 0x00000000005024f3 <+739>: cmp $0x1f,%ecx
- 0x00000000005024f6 <+742>: jg 0x421deb <unicodekeys_lookup_unicode-918565>
- 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];
- 0x00000000005024fc <+748>: movslq (%r15,%r8,4),%r12
- 0x0000000000502500 <+752>: jmpq 0x50231e <unicodekeys_lookup_unicode+270>
- ./Include/cpython/unicodeobject.h:
- 250 return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
- 0x0000000000502505 <+757>: lea 0x38(%rax),%rdi
- 0x0000000000502509 <+761>: jmpq 0x502469 <unicodekeys_lookup_unicode+601>
- 0x000000000050250e <+766>: lea 0x38(%rax),%rdi
- 0x0000000000502512 <+770>: jmpq 0x5023c3 <unicodekeys_lookup_unicode+435>
- 0x0000000000502517 <+775>: 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)) {
- 0x000000000050251a <+778>: test $0x20,%dil
- 0x000000000050251e <+782>: jne 0x5023b6 <unicodekeys_lookup_unicode+422>
- 0x0000000000502524 <+788>: jmpq 0x421dfd <unicodekeys_lookup_unicode-918547>
- 250 return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
- 0x0000000000502529 <+793>: mov %r11,%rsi
- 0x000000000050252c <+796>: jmpq 0x502451 <unicodekeys_lookup_unicode+577>
- 0x0000000000502531 <+801>: jmpq 0x421dfd <unicodekeys_lookup_unicode-918547>
- Address range 0x421daf to 0x421e06:
- ./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);
- 0x0000000000421daf <-918625>: mov 0x38(%rbp),%rsi
- 258 return data;
- 0x0000000000421db3 <-918621>: jmpq 0x50251a <unicodekeys_lookup_unicode+778>
- Objects/dictobject.c:
- 904 i = mask & (i*5 + perturb + 1);
- 0x0000000000421db8 <-918616>: mov %r9,%rax
- 0x0000000000421dbb <-918613>: lea (%r8,%r8,4),%r8
- 0x0000000000421dbf <-918609>: shr $0x5,%rax
- 0x0000000000421dc3 <-918605>: lea 0x1(%rax,%r8,1),%r8
- 0x0000000000421dc8 <-918600>: and %rbx,%r8
- 905
- 906 // Manual loop unrolling
- 907 ix = dictkeys_get_index(dk, i);
- 0x0000000000421dcb <-918597>: cmp $0x7,%ecx
- 0x0000000000421dce <-918594>: jg 0x502310 <unicodekeys_lookup_unicode+256>
- 0x0000000000421dd4 <-918588>: jmpq 0x5022a3 <unicodekeys_lookup_unicode+147>
- 357 ix = indices[i];
- 0x0000000000421dd9 <-918583>: mov (%r15,%r8,8),%r12
- 0x0000000000421ddd <-918579>: jmpq 0x5024cd <unicodekeys_lookup_unicode+701>
- ./Include/cpython/unicodeobject.h:
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 0x0000000000421de2 <-918574>: mov 0x38(%rax),%rdi
- 258 return data;
- 0x0000000000421de6 <-918570>: jmpq 0x502469 <unicodekeys_lookup_unicode+601>
- Objects/dictobject.c:
- 357 ix = indices[i];
- 0x0000000000421deb <-918565>: mov (%r15,%r8,8),%r12
- 0x0000000000421def <-918561>: jmpq 0x50231e <unicodekeys_lookup_unicode+270>
- ./Include/cpython/unicodeobject.h:
- 265 return _PyUnicode_NONCOMPACT_DATA(op);
- 0x0000000000421df4 <-918556>: mov 0x38(%rbp),%rsi
- 258 return data;
- 0x0000000000421df8 <-918552>: jmpq 0x502451 <unicodekeys_lookup_unicode+577>
- 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);
- 0x0000000000421dfd <-918547>: mov 0x38(%rax),%rdi
- 258 return data;
- 0x0000000000421e01 <-918543>: jmpq 0x5023c3 <unicodekeys_lookup_unicode+435>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement