@@ -244,11 +244,11 @@ def __init__(self, address, size=None, mask=None, broadcast=None):
244
244
from peachpy .x86_64 .function import LocalVariable
245
245
from peachpy .literal import Constant
246
246
assert isinstance (address , (GeneralPurposeRegister64 , XMMRegister , YMMRegister , ZMMRegister ,
247
- MemoryAddress , Constant , LocalVariable )) or \
247
+ MemoryAddress , Constant , LocalVariable , RIPRelativeOffset )) or \
248
248
isinstance (address , MaskedRegister ) and \
249
249
isinstance (address .register , (XMMRegister , YMMRegister , ZMMRegister )) and \
250
250
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, " \
252
252
"and merge-masked XMM/YMM/ZMM registers may be specified as an address"
253
253
from peachpy .util import is_int
254
254
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):
279
279
self .address = MemoryAddress (rsp , displacement = address .offset )
280
280
self .symbol = address
281
281
self .size = address .size
282
+ elif isinstance (address , RIPRelativeOffset ):
283
+ self .address = address
282
284
else :
283
285
# Convert register to memory address expression
284
286
self .address = MemoryAddress (address )
0 commit comments