Hello community, here is the log from the commit of package orc for openSUSE:Factory checked in at 2012-09-23 17:08:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/orc (Old) and /work/SRC/openSUSE:Factory/.orc.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "orc", Maintainer is "sts...@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/orc/orc.changes 2012-03-09 21:24:56.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.orc.new/orc.changes 2012-09-23 17:08:02.000000000 +0200 @@ -1,0 +2,7 @@ +Mon Sep 17 17:48:52 UTC 2012 - sch...@linux-m68k.org + +- ppc64.patch: Add support for PowerPC64 +- altivec.patch: Fix altivec implementation of cmpltf and cmplef operations +- Reenable check on ppc and ppc64 + +------------------------------------------------------------------- New: ---- altivec.patch ppc64.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ orc.spec ++++++ --- /var/tmp/diff_new_pack.9VtIuU/_old 2012-09-23 17:08:05.000000000 +0200 +++ /var/tmp/diff_new_pack.9VtIuU/_new 2012-09-23 17:08:05.000000000 +0200 @@ -26,6 +26,8 @@ Url: http://code.entropywave.com/projects/orc/ Source: http://code.entropywave.com/download/orc/%{name}-%{version}.tar.gz Source99: baselibs.conf +Patch1: ppc64.patch +Patch2: altivec.patch BuildRequires: gtk-doc BuildRequires: pkg-config Provides: %{name}-devel = %{version} @@ -62,6 +64,8 @@ %prep %setup -q +%patch1 +%patch2 %build %configure \ @@ -77,7 +81,7 @@ find %{buildroot}%{_libdir} -name '*.la' -delete -print %check -%ifnarch %arm ppc ppc64 +%ifnarch %arm make check %endif ++++++ altivec.patch ++++++ --- orc/orcrules-altivec.c +++ orc/orcrules-altivec.c @@ -1141,7 +1141,7 @@ powerpc_rule_cmpltf (OrcCompiler *p, void *user, OrcInstruction *insn) int src2 = ORC_SRC_ARG (p, insn, 1); int dest = ORC_DEST_ARG (p, insn, 0); - powerpc_emit_VXR (p, "vcmpgefp", 0x100001c6, dest, src2, src1, FALSE); + powerpc_emit_VXR (p, "vcmpgtfp", 0x100002c6, dest, src2, src1, FALSE); } static void @@ -1151,7 +1151,7 @@ powerpc_rule_cmplef (OrcCompiler *p, void *user, OrcInstruction *insn) int src2 = ORC_SRC_ARG (p, insn, 1); int dest = ORC_DEST_ARG (p, insn, 0); - powerpc_emit_VXR (p, "vcmpgtfp", 0x100002c6, dest, src2, src1, FALSE); + powerpc_emit_VXR (p, "vcmpgefp", 0x100001c6, dest, src2, src1, FALSE); } static void ++++++ ppc64.patch ++++++ --- orc/orcpowerpc.c +++ orc/orcpowerpc.c @@ -150,6 +150,48 @@ powerpc_emit_stwu (OrcCompiler *compiler, int regs, int rega, int offset) } void +powerpc_emit_ld (OrcCompiler *compiler, int regd, int rega, int imm) +{ + unsigned int insn; + + ORC_ASM_CODE(compiler," ld %s, %d(%s)\n", + powerpc_get_regname(regd), + imm, powerpc_get_regname(rega)); + insn = (58<<26) | (powerpc_regnum (regd)<<21) | (powerpc_regnum (rega)<<16); + insn |= imm&0xffff; + + powerpc_emit (compiler, insn); +} + +void +powerpc_emit_std (OrcCompiler *compiler, int regs, int rega, int offset) +{ + unsigned int insn; + + ORC_ASM_CODE(compiler," std %s, %d(%s)\n", + powerpc_get_regname(regs), + offset, powerpc_get_regname(rega)); + insn = (62<<26) | (powerpc_regnum (regs)<<21) | (powerpc_regnum (rega)<<16); + insn |= offset&0xffff; + + powerpc_emit (compiler, insn); +} + +void +powerpc_emit_stdu (OrcCompiler *compiler, int regs, int rega, int offset) +{ + unsigned int insn; + + ORC_ASM_CODE(compiler," stdu %s, %d(%s)\n", + powerpc_get_regname(regs), + offset, powerpc_get_regname(rega)); + insn = (62<<26) | (powerpc_regnum (regs)<<21) | (powerpc_regnum (rega)<<16); + insn |= (offset&0xffff) | 1; + + powerpc_emit (compiler, insn); +} + +void powerpc_emit_srawi (OrcCompiler *compiler, int regd, int rega, int shift, int record) { @@ -381,6 +423,9 @@ orc_powerpc_flush_cache (OrcCode *code) int size = code->code_size; ptr = code->code; +#ifdef __powerpc64__ + *(unsigned char **) ptr = (unsigned char *) code->exec + 24; +#endif for (i=0;i<size;i+=cache_line_size) { __asm__ __volatile__ ("dcbst %0,%1" :: "b" (ptr), "r" (i)); } @@ -500,13 +545,23 @@ powerpc_load_long_constant (OrcCompiler *p, int reg, orc_uint32 a, powerpc_emit (p, d); powerpc_emit_label (p, label_skip); - powerpc_emit_lwz (p, - greg, - POWERPC_R3, - (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[ORC_VAR_A2])); - powerpc_emit_lwz (p, - greg, greg, - (int)ORC_STRUCT_OFFSET(OrcCode, exec)); + if (p->is_64bit) { + powerpc_emit_ld (p, + greg, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[ORC_VAR_A2])); + powerpc_emit_ld (p, + greg, greg, + (int)ORC_STRUCT_OFFSET(OrcCode, exec)); + } else { + powerpc_emit_lwz (p, + greg, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[ORC_VAR_A2])); + powerpc_emit_lwz (p, + greg, greg, + (int)ORC_STRUCT_OFFSET(OrcCode, exec)); + } powerpc_add_fixup (p, 1, p->codeptr, label_data); { --- orc/orcpowerpc.h +++ orc/orcpowerpc.h @@ -6,6 +6,10 @@ ORC_BEGIN_DECLS +typedef enum { + ORC_TARGET_POWERPC_64BIT = (1<<0) +} OrcTargetPowerPCFlags; + #ifdef ORC_ENABLE_UNSTABLE_API enum { @@ -86,6 +90,9 @@ void powerpc_emit_addi (OrcCompiler *compiler, int regd, int rega, int imm); void powerpc_emit_lwz (OrcCompiler *compiler, int regd, int rega, int imm); void powerpc_emit_stw (OrcCompiler *compiler, int regs, int rega, int offset); void powerpc_emit_stwu (OrcCompiler *compiler, int regs, int rega, int offset); +void powerpc_emit_ld (OrcCompiler *compiler, int regd, int rega, int imm); +void powerpc_emit_std (OrcCompiler *compiler, int regs, int rega, int offset); +void powerpc_emit_stdu (OrcCompiler *compiler, int regs, int rega, int offset); void powerpc_emit_ret (OrcCompiler *compiler); void powerpc_emit_b (OrcCompiler *compiler, int label); --- orc/orcprogram-altivec.c +++ orc/orcprogram-altivec.c @@ -26,7 +26,17 @@ powerpc_emit_prologue (OrcCompiler *compiler) ORC_ASM_CODE (compiler, ".global %s\n", compiler->program->name); ORC_ASM_CODE (compiler, "%s:\n", compiler->program->name); - powerpc_emit_stwu (compiler, POWERPC_R1, POWERPC_R1, -16); + if (compiler->is_64bit) { + ORC_ASM_CODE (compiler, " .quad .%s,.TOC.@tocbase,0\n", + compiler->program->name); + ORC_ASM_CODE (compiler, ".%s:\n", compiler->program->name); + powerpc_emit (compiler, 0); powerpc_emit (compiler, 0); + powerpc_emit (compiler, 0); powerpc_emit (compiler, 0); + powerpc_emit (compiler, 0); powerpc_emit (compiler, 0); + powerpc_emit_stdu (compiler, POWERPC_R1, POWERPC_R1, -16); + } else { + powerpc_emit_stwu (compiler, POWERPC_R1, POWERPC_R1, -16); + } for(i=POWERPC_R13;i<=POWERPC_R31;i++){ if (compiler->used_regs[i]) { @@ -82,7 +92,13 @@ orc_powerpc_init (void) unsigned int orc_compiler_powerpc_get_default_flags (void) { - return 0; + unsigned int flags = 0; + +#ifdef __powerpc64__ + flags |= ORC_TARGET_POWERPC_64BIT; +#endif + + return flags; } void @@ -90,6 +106,10 @@ orc_compiler_powerpc_init (OrcCompiler *compiler) { int i; + if (compiler->target_flags & ORC_TARGET_POWERPC_64BIT) { + compiler->is_64bit = TRUE; + } + for(i=0;i<32;i++){ compiler->valid_regs[POWERPC_R0+i] = 1; compiler->valid_regs[POWERPC_V0+i] = 1; @@ -127,10 +147,17 @@ powerpc_load_inner_constants (OrcCompiler *compiler) case ORC_VAR_TYPE_SRC: case ORC_VAR_TYPE_DEST: if (compiler->vars[i].ptr_register) { - powerpc_emit_lwz (compiler, - compiler->vars[i].ptr_register, - POWERPC_R3, - (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i])); + if (compiler->is_64bit) { + powerpc_emit_ld (compiler, + compiler->vars[i].ptr_register, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i])); + } else { + powerpc_emit_lwz (compiler, + compiler->vars[i].ptr_register, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i])); + } } else { /* FIXME */ ORC_ASM_CODE(compiler,"ERROR"); @@ -319,10 +346,17 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler) if (compiler->vars[k].vartype == ORC_VAR_TYPE_SRC || compiler->vars[k].vartype == ORC_VAR_TYPE_DEST) { if (compiler->vars[k].ptr_register) { - powerpc_emit_lwz (compiler, - compiler->vars[k].ptr_register, - POWERPC_R3, - (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k])); + if (compiler->is_64bit) { + powerpc_emit_ld (compiler, + compiler->vars[k].ptr_register, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k])); + } else { + powerpc_emit_lwz (compiler, + compiler->vars[k].ptr_register, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k])); + } powerpc_emit_lwz (compiler, POWERPC_R0, POWERPC_R3, @@ -331,10 +365,17 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler) compiler->vars[k].ptr_register, compiler->vars[k].ptr_register, POWERPC_R0); - powerpc_emit_stw (compiler, - compiler->vars[k].ptr_register, - POWERPC_R3, - (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k])); + if (compiler->is_64bit) { + powerpc_emit_std (compiler, + compiler->vars[k].ptr_register, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k])); + } else { + powerpc_emit_stw (compiler, + compiler->vars[k].ptr_register, + POWERPC_R3, + (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k])); + } } else { ORC_ASM_CODE(compiler,"ERROR\n"); } -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org