Refactor __PIC__ codepaths on x86_64

This commit is contained in:
Aaron Culliney 2016-04-21 22:08:44 -07:00
parent a5a498f96c
commit 90b52702d6
2 changed files with 39 additions and 39 deletions

View File

@ -41,7 +41,7 @@
orLQ $0x0100, SP_Reg_X; \
orLQ _XAX, SP_Reg_X;
#ifdef __LP64__
#if __LP64__
# define SZ_PTR 8
# define ROR_BIT 63
// x86_64 registers
@ -120,33 +120,33 @@
#endif
/* Symbol naming issues */
#ifdef NO_UNDERSCORES
#define SYM(foo) foo
#define SYMX(foo, INDEX, SCALE) foo(,INDEX,SCALE)
#define SYMX_PROLOGUE(foo)
#define ENTRY(foo) .globl foo; .balign 16; foo##:
#define CALL(foo) foo
#else /* !NO_UNDERSCORES */
#if defined(__APPLE__)
# ifdef __LP64__
# warning "2014/06/22 -- Mac requires PIC indexing
# define APPLE_ASSEMBLER_IS_BROKEN 1
# define SYM(foo) _##foo(%rip)
# define SYMX(foo, INDEX, SCALE) (_X8,INDEX,SCALE)
# define SYMX_PROLOGUE(foo) leaLQ _##foo(%rip), _X8;
# else
# define SYM(foo) _##foo
# define SYMX(foo, INDEX, SCALE) _##foo(,INDEX,SCALE)
# define SYMX_PROLOGUE(foo)
# endif
# define ENTRY(foo) .globl _##foo; .balign 16; _##foo##:
#if NO_UNDERSCORES
# define _UNDER(x) x
#else
# define SYM(foo) _##foo
# define SYMX(foo, INDEX, SCALE) _##foo(,INDEX,SCALE)
# define SYMX_PROLOGUE(foo)
# define ENTRY(foo) .globl _##foo; .balign 16; _##foo##:
# define _UNDER(x) _##x
#endif
#define ENTRY(x) .globl _UNDER(x); .balign 16; _UNDER(x)##:
#if !__PIC__
# define CALL(x) _UNDER(x)
# define SYM(x) _UNDER(x)
# define SYMX(x, INDEX, SCALE) _UNDER(x)(,INDEX,SCALE)
# define SYMX_PROLOGUE(x)
#else
# if __LP64__
# define CALL(x) _UNDER(x)@PLT
# define SYM(x) _UNDER(x)@GOTPCREL(%rip)
# define SYMX_PROLOGUE(x) leaLQ _UNDER(x)@GOTPCREL(%rip), _X8;
# define SYMX(x, INDEX, SCALE) (_X8,INDEX,SCALE)
# else
# warning FIXME ... this is not PIC!
# define CALL(x) _UNDER(x)
# define SYM(x) _UNDER(x)
# define SYMX_PROLOGUE(x)
# define SYMX(x, INDEX, SCALE) _UNDER(x)(,INDEX,SCALE)
# endif
#endif
#define CALL(foo) _##foo
#endif /* !NO_UNDERSCORES */
#endif // whole file

View File

@ -531,7 +531,7 @@ ENTRY(op_ADC_dec)
DebugBCDCheck
bt $C_Flag_Bit, AF_Reg_X
adcb A_Reg, %al
#if !defined(__LP64__)
#if !__LP64__
daa
movb %al, A_Reg
FlagNVZC
@ -920,7 +920,7 @@ ENTRY(op_UNK) /* make undefined opcodes fault */
ENTRY(op_BRK)
incw PC_Reg
movw PC_Reg, %ax
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
xchgb %al, %ah
Push(%al)
shrw $8, %ax
@ -1295,7 +1295,7 @@ ENTRY(op_JSR) // 0x20
GetAbs
movw PC_Reg, %ax
decw %ax
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
xchgb %al, %ah
Push(%al)
shrw $8, %ax
@ -1542,7 +1542,7 @@ ENTRY(op_PHX)
---------------------------------- */
ENTRY(op_PHY)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
movb Y_Reg, %al
Push(%al)
#else
@ -1567,7 +1567,7 @@ ENTRY(op_PLA) // 0x68
ENTRY(op_PLP) // 0x28
Pop(%al)
SYMX_PROLOGUE(cpu65_flags_decode)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
movb SYMX(cpu65_flags_decode,_XAX,1), %al
movb %al, F_Reg
#else
@ -1593,7 +1593,7 @@ ENTRY(op_PLX)
---------------------------------- */
ENTRY(op_PLY)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
Pop(%al)
movb %al, Y_Reg
#else
@ -1669,7 +1669,7 @@ ENTRY(op_ROR_abs_x) // 0x7e
ENTRY(op_RTI) // 0x40
Pop(%al)
SYMX_PROLOGUE(cpu65_flags_decode)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
movb SYMX(cpu65_flags_decode,_XAX,1), %al
movb %al, F_Reg
#else
@ -1677,7 +1677,7 @@ ENTRY(op_RTI) // 0x40
#endif
orb $(B_Flag|X_Flag), F_Reg
Pop(%al)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
shlw $8, %ax
Pop(%al)
xchgb %al, %ah
@ -1693,7 +1693,7 @@ ENTRY(op_RTI) // 0x40
ENTRY(op_RTS) // 0x60
Pop(%al)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
shlw $8, %ax
Pop(%al)
xchgb %al, %ah
@ -1716,7 +1716,7 @@ ENTRY(op_SBC_dec)
bt $C_Flag_Bit, AF_Reg_X
cmc
xchgb A_Reg, %al
#if !defined(__LP64__)
#if !__LP64__
sbbb A_Reg, %al
das
movb %al, A_Reg
@ -2189,7 +2189,7 @@ ex_irq: testb $I_Flag, F_Reg // Already interrupt
jz 1f
JumpNextInstruction // Yes (ignored) ...
1: movw PC_Reg, %ax // No (handle IRQ) ...
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
xchgb %al, %ah
Push(%al)
shrw $8, %ax
@ -2232,7 +2232,7 @@ ENTRY(cpu65_run)
movzbLQ SYM(cpu65_a), AF_Reg_X
movzbLQ SYM(cpu65_f), _XAX
SYMX_PROLOGUE(cpu65_flags_decode)
#ifdef APPLE_ASSEMBLER_IS_BROKEN
#if __PIC__
movb SYMX(cpu65_flags_decode,_XAX,1), %al
movb %al, F_Reg
#else