29 lines
1.1 KiB
ArmAsm
29 lines
1.1 KiB
ArmAsm
%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
|