diff --git a/devel/orc/Makefile b/devel/orc/Makefile index 754621bef51..a736a0535fd 100644 --- a/devel/orc/Makefile +++ b/devel/orc/Makefile @@ -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 diff --git a/devel/orc/patches/patch-orc_orcpowerpc_c b/devel/orc/patches/patch-orc_orcpowerpc_c new file mode 100644 index 00000000000..cf44043ea73 --- /dev/null +++ b/devel/orc/patches/patch-orc_orcpowerpc_c @@ -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;iexec; + for (i=0;iconstants[i].value; +- int greg = POWERPC_R31; ++ int greg = p->gp_tmpreg; + int label_skip, label_data; + + switch (p->constants[i].type) { diff --git a/devel/orc/patches/patch-orc_orcrules-altivec_c b/devel/orc/patches/patch-orc_orcrules-altivec_c new file mode 100644 index 00000000000..c65664b9d89 --- /dev/null +++ b/devel/orc/patches/patch-orc_orcrules-altivec_c @@ -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