blob: 35376283bd9b8b3cfbd002b7a37e36fd2df248ea [file] [log] [blame]
%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