diff options
Diffstat (limited to 'vm/mterp/x86/OP_IGET_QUICK.S')
-rw-r--r-- | vm/mterp/x86/OP_IGET_QUICK.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/vm/mterp/x86/OP_IGET_QUICK.S b/vm/mterp/x86/OP_IGET_QUICK.S new file mode 100644 index 0000000..88d0725 --- /dev/null +++ b/vm/mterp/x86/OP_IGET_QUICK.S @@ -0,0 +1,17 @@ +%verify "executed" +%verify "null object" + /* For: iget-quick, iget-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) + movzwl 2(rPC),%eax # eax<- field byte offset + cmpl $$0,%ecx # is object null? + je common_errNullObject + movl (%ecx,%eax,1),%eax + movzbl rINST_HI,%ecx + FETCH_INST_WORD(2) + ADVANCE_PC(2) + andb $$0xf,%cl # rINST_FULL<- A + SET_VREG (%eax,%ecx) # fp[A]<- result + GOTO_NEXT |