| %default { "is_object":"0", "helper":"artGet32InstanceFromCode"} |
| /* |
| * General instance field get. |
| * |
| * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short |
| */ |
| EXPORT_PC |
| movzwl 2(rPC), %eax # eax <- 0000CCCC |
| movl %eax, OUT_ARG0(%esp) # field ref CCCC |
| movzbl rINSTbl, %ecx # ecx <- BA |
| sarl $$4, %ecx # ecx <- B |
| GET_VREG %ecx, %ecx |
| movl %ecx, OUT_ARG1(%esp) # the object pointer |
| movl OFF_FP_METHOD(rFP), %eax |
| movl %eax, OUT_ARG2(%esp) # referrer |
| mov rSELF, %ecx |
| movl %ecx, OUT_ARG3(%esp) # self |
| call SYMBOL($helper) |
| movl rSELF, %ecx |
| RESTORE_IBASE_FROM_SELF %ecx |
| cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx) |
| jnz MterpException # bail out |
| andb $$0xf, rINSTbl # rINST <- A |
| .if $is_object |
| SET_VREG_OBJECT %eax, rINST # fp[A] <-value |
| .else |
| SET_VREG %eax, rINST # fp[A] <-value |
| .endif |
| ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 |