summaryrefslogtreecommitdiff
path: root/user/dosbox/gcc8-pmmx.patch
blob: 3b86802ed809180dac4843e453b5ecd841dc2aa4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
From 771f1c8304253fcb95aef54da739f43712aea726 Mon Sep 17 00:00:00 2001
From: Jonathan Campbell <jonathan@castus.tv>
Date: Sun, 20 May 2018 19:30:58 -0700
Subject: [PATCH] Suddenly MinGW GCC 7.3.0 does not allow the dynamic core to
 declare EBP clobbered. Fix dynamic core entry appropriately

---
 src/cpu/core_dyn_x86/risc_x86.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/cpu/core_dyn_x86/risc_x86.h b/src/cpu/core_dyn_x86/risc_x86.h
index dea5ae0ca..d2a847a4f 100644
--- a/src/cpu/core_dyn_x86/risc_x86.h
+++ b/src/cpu/core_dyn_x86/risc_x86.h
@@ -130,13 +130,15 @@ static BlockReturn gen_runcode(Bit8u * code) {
 #else
 	register Bit32u tempflags=reg_flags & FMASK_TEST;
 	__asm__ volatile (
+		"pushl %%ebp							\n"
-		"call 1f ; 1: addl $run_return_adress-.,(%%esp)			\n"
+ 		"pushl $(run_return_adress)					\n"
 		"pushl  %2							\n"
 		"jmp  *%3							\n"
 		"run_return_adress:						\n"
+		"popl %%ebp							\n"
 		:"=a" (retval), "=c" (tempflags)
 		:"r" (tempflags),"r" (code)
-		:"%edx","%ebx","%edi","%esi","%ebp","cc","memory"
+		:"%edx","%ebx","%edi","%esi"/*,"%ebp"*/,"cc","memory" /* NTS: GCC 7.3.0 MinGW suddenly will not allow this code to declare EBP clobbered */
 	);
 	reg_flags=(reg_flags & ~FMASK_TEST) | (tempflags & FMASK_TEST);
 #endif