100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze%default { "helper":"artSet32StaticFromCode" } 200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /* 300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * General SPUT handler wrapper. 400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * 500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * for: sput, sput-boolean, sput-byte, sput-char, sput-short 600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze */ 700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /* op vAA, field//BBBB */ 800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze .extern $helper 900b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze EXPORT_PC 1000b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze lhu a0, 2(rPC) # a0 <- field ref BBBB 1100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze srl a3, rINST, 8 # a3 <- AA 1200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_VREG a1, a3 # a1 <- fp[AA] 1300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze ld a2, OFF_FP_METHOD(rFP) 1400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze move a3, rSELF 1500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze PREFETCH_INST 2 # Get next inst, but don't advance rPC 1600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze jal $helper 1700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze bnezc v0, MterpException # 0 on success 1800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze ADVANCE 2 # Past exception point - now advance rPC 1900b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_INST_OPCODE v0 # extract opcode from rINST 2000b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GOTO_OPCODE v0 # jump to next instruction 21