@@ -28,10 +28,13 @@ .macro generate_lookup $0: test rdi, rdi jz ret_nil + bt edi, 0 + jc Ltagged_pointer_$0 + mov r8, [rdi] mov r8, [r8+64] Lmain_$0: mov rax, [rsi] @@ -47,10 +50,21 @@ test rax, rax jz $1 ret + +Ltagged_pointer_$0: + and dil, 0xF + shr dil, 1 + movzx r8, dil + + mov rax, [rip+_objc_tagged_pointer_classes] + mov r8, [rax+r8*8] + mov r8, [r8+64] + + jmp Lmain_$0 .endmacro .macro generate_lookup_super $0: mov r8, rdi