Index: src/runtime/lookup-asm/lookup-asm-x86-win32.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-x86-win32.S +++ src/runtime/lookup-asm/lookup-asm-x86-win32.S @@ -29,10 +29,13 @@ \name: mov edx, [esp+4] test edx, edx jz short ret_nil + bt edx, 0 + jc short .Ltagged_pointer_\name + mov edx, [edx] mov edx, [edx+32] .Lmain_\name: mov eax, [esp+8] @@ -45,16 +48,23 @@ mov edx, [edx+ecx*4] movzx ecx, byte ptr [eax] mov eax, [edx+ecx*4] test eax, eax - jz short 0f + jz \not_found ret -0: - jmp \not_found +.Ltagged_pointer_\name: + movzx edx, dl + shr edx, 1 + + mov eax, offset _objc_tagged_pointer_classes + mov edx, [eax+edx*4] + mov edx, [edx+32] + + jmp short .Lmain_\name .endm .macro generate_lookup_super name lookup \name: mov edx, [esp+4]