100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /* 200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * Return a 32-bit value. 300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * 400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze * for: return, return-object 500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze */ 600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze /* op vAA */ 700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze .extern MterpThreadFenceForConstructor 800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze .extern MterpSuspendCheck 900b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze jal MterpThreadFenceForConstructor 1000b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze lw ra, THREAD_FLAGS_OFFSET(rSELF) 1100b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze move a0, rSELF 1200b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze and ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST) 1300b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze beqzc ra, 1f 1400b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze jal MterpSuspendCheck # (self) 1500b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze1: 1600b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze srl a2, rINST, 8 # a2 <- AA 1700b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze GET_VREG_U a0, a2 # a0 <- vAA 1800b53b7f3f9ce5996b767b52c28dd846f47a723cAlexey Frunze b MterpReturn 19