Fix PowerPC support, from upstream via Brad. Allows removing forced -O0
(always nice for code which is supposed to run fast). Tested by landry@
This commit is contained in:
parent
5dd2076054
commit
cfd8f226fc
@ -1,8 +1,9 @@
|
||||
# $OpenBSD: Makefile,v 1.8 2011/03/26 10:05:24 sthen Exp $
|
||||
# $OpenBSD: Makefile,v 1.9 2011/04/05 08:09:00 sthen Exp $
|
||||
|
||||
COMMENT= library and toolset to operate arrays of data
|
||||
|
||||
DISTNAME= orc-0.4.11
|
||||
REVISION= 0
|
||||
CATEGORIES= devel
|
||||
MASTER_SITES= http://code.entropywave.com/download/orc/
|
||||
|
||||
@ -25,10 +26,4 @@ USE_LIBTOOL= Yes
|
||||
CONFIGURE_STYLE= autoconf
|
||||
AUTOCONF_VERSION= 2.65
|
||||
|
||||
# Workaround for a known issue with the
|
||||
# PowerPC AltiVec backend.
|
||||
.if ${MACHINE_ARCH} == "powerpc"
|
||||
CFLAGS+= -O0
|
||||
.endif
|
||||
|
||||
.include <bsd.port.mk>
|
||||
|
31
devel/orc/patches/patch-orc_orcpowerpc_c
Normal file
31
devel/orc/patches/patch-orc_orcpowerpc_c
Normal file
@ -0,0 +1,31 @@
|
||||
$OpenBSD: patch-orc_orcpowerpc_c,v 1.1 2011/04/05 08:09:00 sthen Exp $
|
||||
|
||||
don't clobber register r31
|
||||
|
||||
--- orc/orcpowerpc.c.orig Fri Mar 25 16:51:31 2011
|
||||
+++ orc/orcpowerpc.c Fri Mar 25 16:53:03 2011
|
||||
@@ -382,13 +382,13 @@ orc_powerpc_flush_cache (OrcCode *code)
|
||||
|
||||
ptr = code->code;
|
||||
for (i=0;i<size;i+=cache_line_size) {
|
||||
- __asm__ __volatile__ ("dcbst %0,%1" :: "r" (ptr), "r" (i));
|
||||
+ __asm__ __volatile__ ("dcbst %0,%1" :: "b" (ptr), "r" (i));
|
||||
}
|
||||
__asm__ __volatile ("sync");
|
||||
|
||||
ptr = (void *)code->exec;
|
||||
for (i=0;i<size;i+=cache_line_size) {
|
||||
- __asm__ __volatile__ ("icbi %0,%1" :: "r" (ptr), "r" (i));
|
||||
+ __asm__ __volatile__ ("icbi %0,%1" :: "b" (ptr), "r" (i));
|
||||
}
|
||||
__asm__ __volatile ("isync");
|
||||
#endif
|
||||
@@ -399,7 +399,7 @@ powerpc_load_constant (OrcCompiler *p, int i, int reg)
|
||||
{
|
||||
int j;
|
||||
int value = p->constants[i].value;
|
||||
- int greg = POWERPC_R31;
|
||||
+ int greg = p->gp_tmpreg;
|
||||
int label_skip, label_data;
|
||||
|
||||
switch (p->constants[i].type) {
|
53
devel/orc/patches/patch-orc_orcrules-altivec_c
Normal file
53
devel/orc/patches/patch-orc_orcrules-altivec_c
Normal file
@ -0,0 +1,53 @@
|
||||
$OpenBSD: patch-orc_orcrules-altivec_c,v 1.1 2011/04/05 08:09:00 sthen Exp $
|
||||
|
||||
- fix mullw rule
|
||||
- fix div255w rule
|
||||
|
||||
--- orc/orcrules-altivec.c.orig Fri Mar 25 16:53:32 2011
|
||||
+++ orc/orcrules-altivec.c Fri Mar 25 16:55:06 2011
|
||||
@@ -388,17 +388,6 @@ powerpc_rule_mulhub (OrcCompiler *p, void *user, OrcIn
|
||||
}
|
||||
|
||||
static void
|
||||
-powerpc_rule_mullw (OrcCompiler *p, void *user, OrcInstruction *insn)
|
||||
-{
|
||||
- int src1 = ORC_SRC_ARG (p, insn, 0);
|
||||
- int src2 = ORC_SRC_ARG (p, insn, 1);
|
||||
- int dest = ORC_DEST_ARG (p, insn, 0);
|
||||
-
|
||||
- powerpc_emit_vmulesh (p, dest, src1, src2);
|
||||
- powerpc_emit_vsldoi (p, dest, dest, dest, 2);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
powerpc_rule_mulhsw (OrcCompiler *p, void *user, OrcInstruction *insn)
|
||||
{
|
||||
int src1 = ORC_SRC_ARG (p, insn, 0);
|
||||
@@ -418,7 +407,6 @@ powerpc_rule_mulhuw (OrcCompiler *p, void *user, OrcIn
|
||||
powerpc_emit_vmuleuh (p, dest, src1, src2);
|
||||
}
|
||||
|
||||
-#ifdef alternate
|
||||
static void
|
||||
powerpc_rule_mullw (OrcCompiler *p, void *user, OrcInstruction *insn)
|
||||
{
|
||||
@@ -430,7 +418,6 @@ powerpc_rule_mullw (OrcCompiler *p, void *user, OrcIns
|
||||
powerpc_emit_vxor (p, tmp, tmp, tmp);
|
||||
powerpc_emit_vmladduhm (p, dest, src1, src2, POWERPC_V0);
|
||||
}
|
||||
-#endif
|
||||
|
||||
static void
|
||||
powerpc_rule_convsbw (OrcCompiler *p, void *user, OrcInstruction *insn)
|
||||
@@ -1028,9 +1015,9 @@ powerpc_rule_div255w (OrcCompiler *p, void *user, OrcI
|
||||
ORC_ASM_CODE(p," vspltish %s, 8\n", powerpc_get_regname(tmp2));
|
||||
powerpc_emit_VX(p, 0x1000034c, powerpc_regnum(tmp2), 8, 0);
|
||||
|
||||
- powerpc_emit_VX_2 (p, "vsrw", 0x10000284, tmp, dest, tmp2);
|
||||
+ powerpc_emit_VX_2 (p, "vsrh", 0x10000244, tmp, dest, tmp2);
|
||||
powerpc_emit_VX_2 (p, "vadduhm", 0x10000040, dest, dest, tmp);
|
||||
- powerpc_emit_VX_2 (p, "vsrw", 0x10000284, dest, dest, tmp2);
|
||||
+ powerpc_emit_VX_2 (p, "vsrh", 0x10000244, dest, dest, tmp2);
|
||||
}
|
||||
|
||||
void
|
Loading…
x
Reference in New Issue
Block a user