blob: 9b958ff7e7ddbfb3eff0f75c48c431af2086a265 [file] [log] [blame]
%verify "executed"
%verify "field already resolved"
%verify "field not yet resolved"
%verify "field cannot be resolved"
/*
* Jumbo 32-bit SPUT handler.
*
* for: sput/jumbo, sput-boolean/jumbo, sput-byte/jumbo, sput-char/jumbo,
* sput-short/jumbo
*/
/* exop vBBBB, field@AAAAAAAA */
movl rGLUE,%ecx
movl offGlue_methodClassDex(%ecx),%ecx # ecx<- DvmDex
movl 2(rPC),%eax # eax<- field ref AAAAAAAA
movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields
movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr
testl %eax,%eax # resolved entry null?
je .L${opcode}_resolve # if not, make it so
.L${opcode}_finish: # field ptr in eax
GET_VREG_R %ecx rINST
FETCH_INST_OPCODE 4 %edx
ADVANCE_PC 4
movl %ecx,offStaticField_value(%eax)
GOTO_NEXT_R %edx
%break
/*
* Go resolve the field
*/
.L${opcode}_resolve:
movl rGLUE,%ecx
movl 2(rPC),%eax # eax<- field ref AAAAAAAA
movl offGlue_method(%ecx),%ecx # ecx<- current method
EXPORT_PC # could throw, need to export
movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
movl %eax,OUT_ARG1(%esp)
movl %ecx,OUT_ARG0(%esp)
call dvmResolveStaticField # eax<- resolved StaticField ptr
testl %eax,%eax
jne .L${opcode}_finish # success, continue
jmp common_exceptionThrown # no, handle exception