| %verify "executed" |
| %verify "null object" |
| /* For: iput-object-quick */ |
| # op vA, vB, offset /* CCCC */ |
| GET_OPB(a2) # a2 <- B |
| GET_VREG(a3, a2) # a3 <- fp[B], the object pointer |
| FETCH(a1, 1) # a1 <- field byte offset |
| GET_OPA4(a2) # a2 <- A(+) |
| beqz a3, common_errNullObject # object was null |
| GET_VREG(a0, a2) # a0 <- fp[A] |
| FETCH_ADVANCE_INST(2) # advance rPC, load rINST |
| addu t0, a3, a1 |
| sw a0, 0(t0) # obj.field (always 32 bits) <- a0 |
| beqz a0, 1f |
| lw a2, offThread_cardTable(rSELF) # a2 <- card table base |
| srl t1, a3, GC_CARD_SHIFT |
| addu t2, a2, t1 |
| sb a2, 0(t2) |
| 1: |
| GET_INST_OPCODE(t0) # extract opcode from rINST |
| GOTO_OPCODE(t0) # jump to next instruction |