← Back to Instruction Set: Quick Reference
Shift right (a >> b)
Opcodes 0x1A-0x1B (2 wire formats)
M[dstOffset] = M[aOffset] >> M[bOffset]Performs right bit shift (logical, zero-fill). Both operands must have the same integral type tag (UINT1, UINT8, UINT16, UINT32, UINT64, UINT128). If the shift amount is greater than or equal to the bit-width of the operand type, the result is 0. The result inherits the tag from the operands.
| Component | Value | Scales with |
|---|---|---|
| L2 Base | 18 | - |
| DA Base | 0 | - |
| L2 Addressing | 3 | 3 L2 gas per indirect memory offset 3 L2 gas per relative memory offset |
* See Gas Metering for details on how gas costs are computed and applied.
| Name | Type | Description |
|---|---|---|
aOffset |
Memory offset | Memory offset of the value to shift |
bOffset |
Memory offset | Memory offset of the shift amount |
dstOffset |
Memory offset | Memory offset where the result will be written |
See Wire Format page for an explanation of wire format variants and opcode naming (e.g., why ADD_8 vs ADD_16).
SHR_8 (Opcode 0x1A):
---
title: "SHR_8"
config:
packet:
bitsPerRow: 40
---
packet-beta
0-7: "Opcode (0x1A)"
8-15: "Addressing modes"
16-23: "Operand: aOffset"
24-31: "Operand: bOffset"
32-39: "Operand: dstOffset"
SHR_16 (Opcode 0x1B):
---
title: "SHR_16"
config:
packet:
bitsPerRow: 64
---
packet-beta
0-7: "Opcode (0x1B)"
8-15: "Addressing modes"
16-31: "Operand: aOffset"
32-47: "Operand: bOffset"
48-63: "Operand: dstOffset"
See Addressing page for a detailed explanation.
8-bit bitmask: 2 bits per memory offset operand (indirect flag + relative flag)
Memory offset operands (aOffset, bOffset, dstOffset) are encoded as follows:
---
title: "Addressing Mode Bitmask"
config:
packet:
bitWidth: 128
bitsPerRow: 8
---
packet-beta
0: "aOffset is indirect"
1: "aOffset is relative"
2: "bOffset is indirect"
3: "bOffset is relative"
4: "dstOffset is indirect"
5: "dstOffset is relative"
6: "Unused"
7: "Unused"
T[aOffset] == T[bOffset]
T[dstOffset] = T[aOffset]
- TAG_MISMATCH: Operands have different type tags
- MEMORY_ACCESS_OUT_OF_RANGE: Memory offset operand exceeds addressable memory