summaryrefslogtreecommitdiff
path: root/games-emulation/dosbox/files/dosbox-0.74-clang.patch
diff options
context:
space:
mode:
Diffstat (limited to 'games-emulation/dosbox/files/dosbox-0.74-clang.patch')
-rw-r--r--games-emulation/dosbox/files/dosbox-0.74-clang.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/games-emulation/dosbox/files/dosbox-0.74-clang.patch b/games-emulation/dosbox/files/dosbox-0.74-clang.patch
new file mode 100644
index 00000000000..df2923f5caf
--- /dev/null
+++ b/games-emulation/dosbox/files/dosbox-0.74-clang.patch
@@ -0,0 +1,48 @@
+Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=449060
+
+Two backports from Dosbox SVN needed for clang support:
+src/fpu/fpu_instructions_x86.h changes are revision 3841
+src/cpu/core_dynrec/risc_x64.h changes are revision 3894
+
+Index: src/fpu/fpu_instructions_x86.h
+===================================================================
+--- a/src/fpu/fpu_instructions_x86.h (revision 3840)
++++ b/src/fpu/fpu_instructions_x86.h (revision 3841)
+@@ -1161,12 +1161,12 @@
+
+ static void FPU_FLD_I16(PhysPt addr,Bitu store_to) {
+ fpu.p_regs[8].m1 = (Bit32u)mem_readw(addr);
+- FPUD_LOAD(fild,WORD,)
++ FPUD_LOAD(fild,WORD,s)
+ }
+
+ static void FPU_FLD_I16_EA(PhysPt addr) {
+ fpu.p_regs[8].m1 = (Bit32u)mem_readw(addr);
+- FPUD_LOAD_EA(fild,WORD,)
++ FPUD_LOAD_EA(fild,WORD,s)
+ }
+
+ static void FPU_FLD_I32(PhysPt addr,Bitu store_to) {
+@@ -1211,7 +1211,7 @@
+ }
+
+ static void FPU_FST_I16(PhysPt addr) {
+- FPUD_STORE(fistp,WORD,)
++ FPUD_STORE(fistp,WORD,s)
+ mem_writew(addr,(Bit16u)fpu.p_regs[8].m1);
+ }
+
+Index: src/cpu/core_dynrec/risc_x64.h
+===================================================================
+--- a/src/cpu/core_dynrec/risc_x64.h (revision 3893)
++++ b/src/cpu/core_dynrec/risc_x64.h (revision 3894)
+@@ -85,7 +85,8 @@
+
+ static INLINE void gen_reg_memaddr(HostReg reg,void* data) {
+ Bit64s diff = (Bit64s)data-((Bit64s)cache.pos+5);
+- if ((diff<0x80000000LL) && (diff>-0x80000000LL)) {
++// if ((diff<0x80000000LL) && (diff>-0x80000000LL)) { //clang messes itself up on this...
++ if ( (diff>>63) == (diff>>31) ) { //signed bit extend, test to see if value fits in a Bit32s
+ cache_addb(0x05+(reg<<3));
+ // RIP-relative addressing is offset after the instruction
+ cache_addd((Bit32u)(((Bit64u)diff)&0xffffffffLL));