%verify "executed" %verify "null object" /* For: iput-object-quick */ /* op vA, vB, offset@CCCC */ movzbl rINST_HI,%ecx # ecx<- BA sarl $$4,%ecx # ecx<- B GET_VREG(%ecx,%ecx) # vB (object we're operating on) movzbl rINST_HI,rINST_FULL andb $$0xf,rINST_LO # rINST_FULL<- A GET_VREG(rINST_FULL,rINST_FULL) # rINST_FULL<- v[A] movzwl 2(rPC),%eax # eax<- field byte offset testl %ecx,%ecx # is object null? je common_errNullObject movl rINST_FULL,(%ecx,%eax,1) GET_GLUE(%eax) jmp .L${opcode}_finish %break .L${opcode}_finish: testl rINST_FULL,rINST_FULL # did we store null? FETCH_INST_WORD(2) movl offGlue_cardTable(%eax),%eax # get card table base je 1f # skip card mark if null store shrl $$GC_CARD_SHIFT,%ecx # object head to card number movb %al,(%eax,%ecx) # mark card based on object head 1: ADVANCE_PC(2) GOTO_NEXT