dload <varnum>
or
wide
dload <varnum>
In
the first form, <varnum> is an unsigned integer in the range 0 to 0xFF.
In the second (wide) form, <varnum> is an unsigned integer in the range 0
to 0xFFFE.
Stack
Before
Description
After
...
result-word1
result-word2
...
dload retrieves a double-precision floating point number held in local variable and pushes it onto the operand stack.
Since double-precision floats are 64-bits wide, and each local variable only holds up to 32 bits, Java uses two consecutive local variables, <varnum> and <varnum> + 1 to store a double. So dload <varnum> actually places the values of both <varnum> and <varnum> + 1 onto the operand stack.
Both <varnum> and <varnum> + 1 must be valid local variable numbers in the current frame, and together they must be holding a double.
Remember that attempting to treat two-word values as two independent single-word values will produce a verification error. So trying to retrieve <varnum> or <varnum> + 1 independently (e.g. iload <varnum>) will produce a verification error. Similarly, if you store a non-double value in <varnum>, then <varnum> + 1 becomes invalidated until a new value is stored in it.
Example
dload 2 ; push the double held in local variables 2 and 3 onto the stackBytecode
For local variable numbers in the range 0-255, use:
Type
|
Description
|
|
u1
|
dload
opcode = 0x18 (24)
|
|
u1
|
<varnum>
|
Type
|
Description
|
| u1
|
wide
opcode = 0xC4 (196)
|
| u1
|
dload
opcode = 0x18 (24)
|
| u2
|
<varnum>
|
fload, iload, aload, lload, wide