Skip to content

Commit 84e60a5

Browse files
authored
Support simple syntax for RIP-relative CALL (#107)
Support simple syntax for RIP-relative CALL
1 parent f189ad2 commit 84e60a5

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

Diff for: peachpy/x86_64/operand.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,11 @@ def __init__(self, address, size=None, mask=None, broadcast=None):
244244
from peachpy.x86_64.function import LocalVariable
245245
from peachpy.literal import Constant
246246
assert isinstance(address, (GeneralPurposeRegister64, XMMRegister, YMMRegister, ZMMRegister,
247-
MemoryAddress, Constant, LocalVariable)) or \
247+
MemoryAddress, Constant, LocalVariable, RIPRelativeOffset)) or \
248248
isinstance(address, MaskedRegister) and \
249249
isinstance(address.register, (XMMRegister, YMMRegister, ZMMRegister)) and \
250250
not address.mask.is_zeroing, \
251-
"Only MemoryAddress, 64-bit general-purpose registers, XMM/YMM/ZMM registers, " \
251+
"Only MemoryAddress, 64-bit general-purpose registers, RIP-Relative addresses, XMM/YMM/ZMM registers, " \
252252
"and merge-masked XMM/YMM/ZMM registers may be specified as an address"
253253
from peachpy.util import is_int
254254
assert size is None or is_int(size) and int(size) in SizeSpecification._size_name_map, \
@@ -279,6 +279,8 @@ def __init__(self, address, size=None, mask=None, broadcast=None):
279279
self.address = MemoryAddress(rsp, displacement=address.offset)
280280
self.symbol = address
281281
self.size = address.size
282+
elif isinstance(address, RIPRelativeOffset):
283+
self.address = address
282284
else:
283285
# Convert register to memory address expression
284286
self.address = MemoryAddress(address)

0 commit comments

Comments
 (0)