summaryrefslogtreecommitdiffstats
path: root/vm/mterp/mips/OP_RETURN_WIDE.S
diff options
context:
space:
mode:
Diffstat (limited to 'vm/mterp/mips/OP_RETURN_WIDE.S')
-rw-r--r--vm/mterp/mips/OP_RETURN_WIDE.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/vm/mterp/mips/OP_RETURN_WIDE.S b/vm/mterp/mips/OP_RETURN_WIDE.S
new file mode 100644
index 000000000..bd93d6a03
--- /dev/null
+++ b/vm/mterp/mips/OP_RETURN_WIDE.S
@@ -0,0 +1,13 @@
+%verify "executed"
+ /*
+ * Return a 64-bit value. Copies the return value into the "thread"
+ * structure, then jumps to the return handler.
+ */
+ /* return-wide vAA */
+ GET_OPA(a2) # a2 <- AA
+ EAS2(a2, rFP, a2) # a2 <- &fp[AA]
+ addu a3, rSELF, offThread_retval # a3 <- &self->retval
+ LOAD64(a0, a1, a2) # a0/a1 <- vAA/vAA+1
+ STORE64(a0, a1, a3) # retval <- a0/a1
+ b common_returnFromMethod
+