Long integer shift left
Bytecode
Type | Description |
u1 | lshl opcode = 0x79 (121) |
Stack ..., value1.word1, value1.word2, value2 => ..., result.word1, result.word2
Description
Pops a long integer and an int from the stack. Shifts value2 (the long integer)
left by the amount indicated in the low six bits of value1 (an int). The long
integer result is then pushed back onto the stack.
This is the same as computing the expression: x * 2s
where s is value1 and x is value2.
; This is like the Java code: ; long x; ; x <<= 3; ; lload_1 ; load long integer in local variable 1 onto stack iconst_3 ; push the integer 3 onto the stack lshl ; shift left lstore_1 ; store the long result in local variable 1
Notes
This is equivalent (even if overflow occurs) to multiplication by 2 to
the power s. The shift distance actually used is therefore always in the range 0
to 63, inclusive, as if value2 were subjected to a bitwise logical AND with the
mask value 0x3f.