Duplicate top two operand stack words and put three down
Bytecode
Type | Description |
u1 | dup2_x1 = 0x5D (93) |
Stack ..., word3, word2, word1 => ..., word2, word1, word3, word2, word1
Description
Duplicates the top two-word item on the stack and inserts the
duplicate before the previous (single-word) item on the stack. Alternatively, this
instruction could also be used to duplicate two single-word items and insert them before
the third single-word item on the stack.
The top two words on the operand stack are duplicated and the copies inserted, in the original order, three words down in the operand stack.
The dup2_x1 instruction must not be used unless each of word1 and word2 is a word that contains a 32-bit data type or both together are the two words that contain a single 64-bit datum, and unless word3 is a word that contains a 32-bit data type.
Except for restrictions preserving the integrity of 64-bit data types, the dup2_x1 instruction operates on untyped words, ignoring the types of the data they contain.
Example
bipush 100 dconst_0 ; stack now contains: ; 0.0 | double-word1 ; 0.0 | double-word2 ; 100 integer-word1 dup2_x1 ; stack now contains: ; 0.0 | double-word1 ; 0.0 | double-word2 ; 100 integer-word1 ; 0.0 | double-word1 ; 0.0 | double-word2