util: Implement PIC version of m5ops for X86.

Using m5ops for X86 in shared objects requires PIC for the m5ops.
Typically, the PIC version is used to make m5op interfaces to other
languages like python and lua.

Change-Id: I2463904c13ea8b839d0386d3c743d8dad1e1e6bc
Reviewed-on: https://gem5-review.googlesource.com/7261
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Hanhwi Jang
2018-01-10 11:39:38 +09:00
parent 2e5da92295
commit 8cb6bb444a

View File

@@ -32,7 +32,21 @@
#include <gem5/asm/generic/m5ops.h>
#ifdef M5OP_ADDR
#if defined(M5OP_ADDR) && defined(M5OP_PIC)
/* Use the memory mapped m5op interface */
#define TWO_BYTE_OP(name, number) \
.globl name; \
.func name; \
name: \
mov m5_mem@gotpcrel(%rip), %r11; \
mov (%r11), %r11; \
mov $number, %rax; \
shl $8, %rax; \
mov 0(%r11, %rax, 1), %rax; \
ret; \
.endfunc;
#elif defined(M5OP_ADDR) && !defined(M5OP_PIC)
/* Use the memory mapped m5op interface */
#define TWO_BYTE_OP(name, number) \
.globl name; \
@@ -44,7 +58,6 @@ name: \
mov 0(%r11, %rax, 1), %rax; \
ret; \
.endfunc;
#else
/* Use the magic instruction based m5op interface. This does not work
* in virtualized environments.