| %default { "is_object":"0", "helper":"artGet32InstanceFromCode", "wide":"0"} |
| /* |
| * General instance field get. |
| * |
| * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short, iget-wide |
| */ |
| EXPORT_PC |
| movzbq rINSTbl, %rcx # rcx <- BA |
| movzwl 2(rPC), OUT_32_ARG0 # eax <- field ref CCCC |
| sarl $$4, %ecx # ecx <- B |
| GET_VREG OUT_32_ARG1, %rcx # the object pointer |
| movq OFF_FP_METHOD(rFP), OUT_ARG2 # referrer |
| movq rSELF, OUT_ARG3 |
| call SYMBOL($helper) |
| movq rSELF, %rcx |
| cmpq $$0, THREAD_EXCEPTION_OFFSET(%rcx) |
| jnz MterpException # bail out |
| andb $$0xf, rINSTbl # rINST <- A |
| .if $is_object |
| SET_VREG_OBJECT %eax, rINSTq # fp[A] <-value |
| .else |
| .if $wide |
| SET_WIDE_VREG %rax, rINSTq # fp[A] <-value |
| .else |
| SET_VREG %eax, rINSTq # fp[A] <-value |
| .endif |
| .endif |
| ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 |