[97579] trunk/dports/emulators/dosbox

ryandesign at macports.org ryandesign at macports.org
Sun Sep 9 06:50:04 PDT 2012


Revision: 97579
          https://trac.macports.org/changeset/97579
Author:   ryandesign at macports.org
Date:     2012-09-09 06:50:04 -0700 (Sun, 09 Sep 2012)
Log Message:
-----------
dosbox: disable 64-bit build because it is slower (#35354); blacklist clang because it fails to compile i386

Modified Paths:
--------------
    trunk/dports/emulators/dosbox/Portfile

Removed Paths:
-------------
    trunk/dports/emulators/dosbox/files/patch-src-cpu-core_dynrec-risc_x64.h.diff

Modified: trunk/dports/emulators/dosbox/Portfile
===================================================================
--- trunk/dports/emulators/dosbox/Portfile	2012-09-09 13:36:00 UTC (rev 97578)
+++ trunk/dports/emulators/dosbox/Portfile	2012-09-09 13:50:04 UTC (rev 97579)
@@ -6,7 +6,7 @@
 
 name                dosbox
 version             0.74
-revision            3
+revision            4
 categories          emulators
 platforms           darwin
 maintainers         nomaintainer
@@ -34,11 +34,12 @@
                     lib/libSDL_sound.dylib \
                     lib/libpng.dylib
 
-patchfiles          patch-src-cpu-core_dynrec-risc_x64.h.diff
-
 # Assembly language issues
 universal_variant no
 
+# error: ambiguous instructions require an explicit suffix
+compiler.blacklist  clang
+
 configure.args      --disable-sdltest \
                     --disable-alsatest
 configure.cxxflags-append   -mdynamic-no-pic
@@ -55,7 +56,9 @@
         ${destroot}${prefix}/share/doc/${name}
 }
 
-supported_archs     i386 ppc x86_64
+# The 64-bit build is broken in 0.74 ("core dynamic" crashes), but even if that
+# is fixed, the 64-bit build is much slower.
+supported_archs     i386 ppc
 
 platform darwin {
     configure.args-append --build=${configure.build_arch}-apple-darwin${os.major}

Deleted: trunk/dports/emulators/dosbox/files/patch-src-cpu-core_dynrec-risc_x64.h.diff
===================================================================
--- trunk/dports/emulators/dosbox/files/patch-src-cpu-core_dynrec-risc_x64.h.diff	2012-09-09 13:36:00 UTC (rev 97578)
+++ trunk/dports/emulators/dosbox/files/patch-src-cpu-core_dynrec-risc_x64.h.diff	2012-09-09 13:50:04 UTC (rev 97579)
@@ -1,306 +0,0 @@
---- src/cpu/core_dynrec/risc_x64.h	(revision 3673)
-+++ src/cpu/core_dynrec/risc_x64.h	(revision 3674)
-@@ -84,7 +84,7 @@
- }
- 
- 
--static INLINE void gen_memaddr(HostReg reg,void* data) {
-+static INLINE void gen_reg_memaddr(HostReg reg,void* data) {
- 	Bit64s diff = (Bit64s)data-((Bit64s)cache.pos+5);
- 	if ((diff<0x80000000LL) && (diff>-0x80000000LL)) {
- 		cache_addb(0x05+(reg<<3));
-@@ -98,13 +98,28 @@
- 	}
- }
- 
-+static INLINE void gen_memaddr(Bitu op,void* data,Bitu off) {
-+	Bit64s diff;
-+	diff = (Bit64s)data-((Bit64s)cache.pos+off+5);
-+	if ((diff<0x80000000LL) && (diff>-0x80000000LL)) {
-+		// RIP-relative addressing is offset after the instruction 
-+		cache_addb(op+1);
-+		cache_addd((Bit32u)(((Bit64u)diff)&0xffffffffLL)); 
-+	} else if ((Bit64u)data<0x100000000LL) {
-+		cache_addb(op);
-+		cache_addb(0x25);
-+		cache_addd((Bit32u)(((Bit64u)data)&0xffffffffLL));
-+	} else {
-+		E_Exit("DRC64:Unhandled memory reference");
-+	}
-+}
- 
- // move a 32bit (dword==true) or 16bit (dword==false) value from memory into dest_reg
- // 16bit moves may destroy the upper 16bit of the destination register
- static void gen_mov_word_to_reg(HostReg dest_reg,void* data,bool dword) {
- 	if (!dword) cache_addb(0x66);
- 	cache_addb(0x8b); // mov reg,[data]
--	gen_memaddr(dest_reg,data);
-+	gen_reg_memaddr(dest_reg,data);
- } 
- 
- // move a 16bit constant value into dest_reg
-@@ -125,7 +140,7 @@
- static void gen_mov_word_from_reg(HostReg src_reg,void* dest,bool dword) {
- 	if (!dword) cache_addb(0x66);
- 	cache_addb(0x89);	// mov [data],reg
--	gen_memaddr(src_reg,dest);
-+	gen_reg_memaddr(src_reg,dest);
- }
- 
- // move an 8bit value from memory into dest_reg
-@@ -134,7 +149,7 @@
- // registers might not be directly byte-accessible on some architectures
- static void gen_mov_byte_to_reg_low(HostReg dest_reg,void* data) {
- 	cache_addb(0x8a);	// mov reg,[data]
--	gen_memaddr(dest_reg,data);
-+	gen_reg_memaddr(dest_reg,data);
- }
- 
- // move an 8bit value from memory into dest_reg
-@@ -144,7 +159,7 @@
- static void gen_mov_byte_to_reg_low_canuseword(HostReg dest_reg,void* data) {
- 	cache_addb(0x66);
- 	cache_addb(0x8b);	// mov reg,[data]
--	gen_memaddr(dest_reg,data);
-+	gen_reg_memaddr(dest_reg,data);
- }
- 
- // move an 8bit constant value into dest_reg
-@@ -169,7 +184,7 @@
- // move the lowest 8bit of a register into memory
- static void gen_mov_byte_from_reg_low(HostReg src_reg,void* dest) {
- 	cache_addb(0x88);	// mov [data],reg
--	gen_memaddr(src_reg,dest);
-+	gen_reg_memaddr(src_reg,dest);
- }
- 
- 
-@@ -193,7 +208,7 @@
- // add a 32bit value from memory to a full register
- static void gen_add(HostReg reg,void* op) {
- 	cache_addb(0x03);					// add reg,[data]
--	gen_memaddr(reg,op);
-+	gen_reg_memaddr(reg,op);
- }
- 
- // add a 32bit constant value to a full register
-@@ -212,9 +227,8 @@
- 
- // move a 32bit constant value into memory
- static void gen_mov_direct_dword(void* dest,Bit32u imm) {
--	cache_addw(0x04c7);					// mov [data],imm
--	cache_addb(0x25);
--	cache_addd((Bit32u)(((Bit64u)dest)&0xffffffffLL));
-+	cache_addb(0xc7);					// mov [data],imm
-+	gen_memaddr(0x04,dest,4);
- 	cache_addd(imm);
- }
- 
-@@ -235,9 +249,8 @@
- 
- // add an 8bit constant value to a memory value
- static void gen_add_direct_byte(void* dest,Bit8s imm) {
--	cache_addw(0x0483);					// add [data],imm
--	cache_addb(0x25);
--	cache_addd((Bit32u)(((Bit64u)dest)&0xffffffffLL));
-+	cache_addb(0x83);					// add [data],imm
-+	gen_memaddr(0x4,dest,1);
- 	cache_addb(imm);
- }
- 
-@@ -248,18 +261,20 @@
- 		return;
- 	}
- 	if (!dword) cache_addb(0x66);
--	cache_addw(0x0481);					// add [data],imm
--	cache_addb(0x25);
--	cache_addd((Bit32u)(((Bit64u)dest)&0xffffffffLL));
--	if (dword) cache_addd((Bit32u)imm);
--	else cache_addw((Bit16u)imm);
-+	cache_addb(0x81);					// add [data],imm
-+	if (dword) {
-+		gen_memaddr(0x4,dest,4);		// size of following immediate value
-+		cache_addd((Bit32u)imm);
-+	} else {
-+		gen_memaddr(0x4,dest,2);		// size of following immediate value
-+		cache_addw((Bit16u)imm);
-+	}
- }
- 
- // subtract an 8bit constant value from a memory value
- static void gen_sub_direct_byte(void* dest,Bit8s imm) {
--	cache_addw(0x2c83);					// sub [data],imm
--	cache_addb(0x25);
--	cache_addd((Bit32u)(((Bit64u)dest)&0xffffffffLL));
-+	cache_addb(0x83);					// sub [data],imm
-+	gen_memaddr(0x2c,dest,1);
- 	cache_addb(imm);
- }
- 
-@@ -270,11 +285,14 @@
- 		return;
- 	}
- 	if (!dword) cache_addb(0x66);
--	cache_addw(0x2c81);					// sub [data],imm
--	cache_addb(0x25);
--	cache_addd((Bit32u)(((Bit64u)dest)&0xffffffffLL));
--	if (dword) cache_addd((Bit32u)imm);
--	else cache_addw((Bit16u)imm);
-+	cache_addw(0x81);					// sub [data],imm
-+	if (dword) {
-+		gen_memaddr(0x2c,dest,4);		// size of following immediate value
-+		cache_addd((Bit32u)imm);
-+	} else {
-+		gen_memaddr(0x2c,dest,2);		// size of following immediate value
-+		cache_addw((Bit16u)imm);
-+	}
- }
- 
- 
-@@ -324,10 +342,18 @@
- 
- // generate a call to a parameterless function
- static void INLINE gen_call_function_raw(void * func) {
-+	cache_addb(0x48); 
-+	cache_addw(0xec83); 
-+	cache_addb(0x08);	// sub rsp,0x08 (align stack to 16 byte boundary)
-+
- 	cache_addb(0x48);
- 	cache_addb(0xb8);	// mov reg,imm64
- 	cache_addq((Bit64u)func);
- 	cache_addw(0xd0ff);
-+
-+	cache_addb(0x48); 
-+	cache_addw(0xc483); 
-+	cache_addb(0x08);	// add rsp,0x08 (reset alignment)
- }
- 
- // generate a call to a function with paramcount parameters
-@@ -350,9 +376,13 @@
- 	cache_addw(0xc483);		// add rsp,0x08
- 	cache_addb(0x08);
- 
-+	// stack is 16 byte aligned now
-+
-+
- 	cache_addb(0x50);		// push rax (==old rsp)
- 
--	Bit64u proc_addr=(Bit64u)cache.pos;
-+	// returned address relates to where the address is stored in gen_call_function_raw
-+	Bit64u proc_addr=(Bit64u)cache.pos-4;
- 
- 	// Do the actual call to the procedure
- 	cache_addb(0x48);
-@@ -596,6 +626,8 @@
- #ifdef DRC_FLAGS_INVALIDATION
- // called when a call to a function can be replaced by a
- // call to a simpler function
-+// check gen_call_function_raw and gen_call_function_setup
-+// for the targeted code
- static void gen_fill_function_ptr(Bit8u * pos,void* fct_ptr,Bitu flags_type) {
- #ifdef DRC_FLAGS_INVALIDATION_DCODE
- 	// try to avoid function calls but rather directly fill in code
-@@ -604,36 +636,46 @@
- 		case t_ADDw:
- 		case t_ADDd:
- 			*(Bit32u*)(pos+0)=0xf001f889;	// mov eax,edi; add eax,esi
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_ORb:
- 		case t_ORw:
- 		case t_ORd:
- 			*(Bit32u*)(pos+0)=0xf009f889;	// mov eax,edi; or eax,esi
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_ANDb:
- 		case t_ANDw:
- 		case t_ANDd:
- 			*(Bit32u*)(pos+0)=0xf021f889;	// mov eax,edi; and eax,esi
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_SUBb:
- 		case t_SUBw:
- 		case t_SUBd:
- 			*(Bit32u*)(pos+0)=0xf029f889;	// mov eax,edi; sub eax,esi
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_XORb:
- 		case t_XORw:
- 		case t_XORd:
- 			*(Bit32u*)(pos+0)=0xf031f889;	// mov eax,edi; xor eax,esi
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_CMPb:
- 		case t_CMPw:
-@@ -641,37 +683,45 @@
- 		case t_TESTb:
- 		case t_TESTw:
- 		case t_TESTd:
--			*(Bit32u*)(pos+0)=0x90900aeb;	// skip
-+			*(Bit32u*)(pos+0)=0x909012eb;	// skip
- 			*(Bit32u*)(pos+4)=0x90909090;
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_INCb:
- 		case t_INCw:
- 		case t_INCd:
- 			*(Bit32u*)(pos+0)=0xc0fff889;	// mov eax,edi; inc eax
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_DECb:
- 		case t_DECw:
- 		case t_DECd:
- 			*(Bit32u*)(pos+0)=0xc8fff889;	// mov eax,edi; dec eax
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		case t_NEGb:
- 		case t_NEGw:
- 		case t_NEGd:
- 			*(Bit32u*)(pos+0)=0xd8f7f889;	// mov eax,edi; neg eax
--			*(Bit32u*)(pos+4)=0x909006eb;	// skip
-+			*(Bit32u*)(pos+4)=0x90900eeb;	// skip
- 			*(Bit32u*)(pos+8)=0x90909090;
-+			*(Bit32u*)(pos+12)=0x90909090;
-+			*(Bit32u*)(pos+16)=0x90909090;
- 			break;
- 		default:
--			*(Bit64u*)(pos+2)=(Bit64u)fct_ptr;		// fill function pointer
-+			*(Bit64u*)(pos+6)=(Bit64u)fct_ptr;		// fill function pointer
- 			break;
- 	}
- #else
--	*(Bit64u*)(pos+2)=(Bit64u)fct_ptr;
-+	*(Bit64u*)(pos+6)=(Bit64u)fct_ptr;		// fill function pointer
- #endif
- }
- #endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20120909/3219a7de/attachment.html>


More information about the macports-changes mailing list