Fix sign extension issues in x86_64 code generation

movl expects an Immediate int64_t that is in the range -2GB to
2GB.  Cast uint32_t addresses to int32_t before passing as an
Immediate to movl.

In VisitIntegerValueOf, the base address may not fit in the disp32
field.  Fall back to storing the base address in a temporary
register if it is larger than 2GB.

Bug: 36281983
Test: m -j test-art-host with LibartImgHostBaseAddress == 0xa0000000
Change-Id: I5f8cc4f5a6220afc577707e3831113b0ead1d2b2
2 files changed