# return-wide

## Purpose

Return from a double-width (64-bit) value-returning method.

## Details

Op & Format | Mnemonic / Syntax | Arguments
--- | --- | ---
10 11x | return-wide vAA | `A:` return value register-pair (8 bits)

## Constraints

- The return type of the current method must be double or long.
- A+1 must be a valid register index in the current stack frame (which includes A being valid).
- Register vA must be the lower half of a register pair.
- The type of vA must match the return type of the method.

## Behavior

- If the method is synchronized, the object's monitor is released in a way similar to the monitor-exit instruction.
- The stack frame of the current method invocation is removed from the stack. This includes all its registers becoming invalid.
- If the stack is now empty, the current thread terminates.
- Otherwise, the following happens:
  - The stack frame that caused this method invocation becomes valid. This includes all its registers and their old values.
  - Execution continues at the bytecode instruction immediately following the invoke instruction that caused this method invocation.
  - The return value can be consumed by (exactly) the first instruction following the invoke-kind or invoke-kind/range instruction that caused this method invocation, and this instructions needs to be a move-result-wide instruction.

## Exceptions

None.