@@ -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