dup2_x1

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