@@ -30,10 +30,13 @@ .macro generate_lookup name not_found \name: test rdi, rdi jz short ret_nil + bt edi, 0 + jc short .Ltagged_pointer_\name + mov r8, [rdi] mov r8, [r8+64] .Lmain_\name: mov rax, [rsi] @@ -49,10 +52,20 @@ test rax, rax jz short \not_found@PLT ret + +.Ltagged_pointer_\name: + movzx r8, dil + shr r8, 1 + + mov rax, [rip+objc_tagged_pointer_classes@GOTPCREL] + mov r8, [rax+r8*8] + mov r8, [r8+64] + + jmp short .Lmain_\name .type \name, %function .size \name, .-\name .endm .macro generate_lookup_super name lookup