%def op_return(instr="GET_VREG"): | |
/* | |
* Return a 32-bit value. | |
* | |
* for: return (sign-extend), return-object (zero-extend) | |
*/ | |
/* op vAA */ | |
.extern MterpThreadFenceForConstructor | |
.extern MterpSuspendCheck | |
jal MterpThreadFenceForConstructor | |
lw ra, THREAD_FLAGS_OFFSET(rSELF) | |
move a0, rSELF | |
and ra, ra, THREAD_SUSPEND_OR_CHECKPOINT_REQUEST | |
beqzc ra, 1f | |
jal MterpSuspendCheck # (self) | |
1: | |
srl a2, rINST, 8 # a2 <- AA | |
$instr a0, a2 # a0 <- vAA | |
b MterpReturn |