@@ -25,13 +25,16 @@ .globl objc_msg_lookup_super_stret .section .text .macro generate_lookup name not_found \name: - test %rcx, %rcx + test rcx, rcx jz short ret_nil + bt ecx, 0 + jc short .Ltagged_pointer_\name + mov r8, [rcx] mov r8, [r8+56] .Lmain_\name: mov r10, rcx @@ -55,10 +58,20 @@ 0: mov rcx, r10 mov rdx, r11 jmp \not_found + +.Ltagged_pointer_\name: + xor rcx, objc_tagged_pointer_secret + and cl, 0xE + movzx r8, cl + + mov r8, [objc_tagged_pointer_classes+r8*4] + mov r8, [r8+56] + + jmp short .Lmain_\name .endm .macro generate_lookup_super name lookup \name: mov r8, rcx