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