--- mx44-1.0.orig/debian/README.Debian +++ mx44-1.0/debian/README.Debian @@ -0,0 +1,8 @@ +mx44 for Debian +--------------- + +A shell-script was added that creates the directory ~/.mx44 if it doesn't exist, +and copies the default patches to it. This way, a new user can use the standard +patches and still save changes. + + -- Willem van Engen , Thu, 4 Aug 2005 21:35:13 +0000 --- mx44-1.0.orig/debian/mx44.manpages +++ mx44-1.0/debian/mx44.manpages @@ -0,0 +1 @@ +debian/mx44.1 --- mx44-1.0.orig/debian/changelog +++ mx44-1.0/debian/changelog @@ -0,0 +1,62 @@ +mx44 (1.0-0ubuntu5) maverick; urgency=low + + * Adjust build-dep on liback-dev for jack transition + + -- Lorenzo De Liso Wed, 21 Jul 2010 14:09:45 +0200 + +mx44 (1.0-0ubuntu4) maverick; urgency=low + + * No-change rebuild for jack transition + + -- Lorenzo De Liso Wed, 21 Jul 2010 13:35:27 +0200 + +mx44 (1.0-0ubuntu3) lucid; urgency=low + + * debian/control: MMX required so limit Architecture: i386 amd64 (LP: #511952) + + -- Kamal Mostafa Sun, 24 Jan 2010 07:48:36 -0800 + +mx44 (1.0-0ubuntu2) lucid; urgency=low + + * No-change rebuild for jack transition. + * Munge Maintainer field as per spec. + + -- Steve Kowalik Tue, 19 Jan 2010 12:48:50 +1100 + +mx44 (1.0-0ubuntu1) dapper; urgency=low + + * Ubuntu Dapper package. + * debian/copyright: updated FSF address. + * debian/copyright: added proper credits. + * debian/dirs: added /usr/share/applications for menu entry + * debian/mx44.desktop: created desktop file for menu entry + * debian/rules: added desktop menu entry install + * debian/rules: added dpatch routines + * debian/control: changed maintainer name. + * debian/control: updated standards version. + * debian/control: updated debuild version to 5. + * debian/control: added depends on dpatch. + * debian/control: fixed long description lines and spelling error. + * debian/compat: updated compat version to 5. + * debian/dirs: added dir for manpages + * debian/mx44.1: wrote basic man page + * debian/mx44.manpages: added man page for install + * debian/rules: install man page symlink + * debian/rules: renams 'mx44wrapper' to 'mx44' after install + * debian/patches/01-mmx-code-fixes.dpatch: minimal code changes, + derrived from Willem's major patchjob. Fixes compiles with gcc-4.0. + + -- Dana Olson Thu, 9 Feb 2006 18:41:56 -0500 + +mx44 (1.0-2) etch; urgency=low + + * Etch package + + -- Willem van Engen Fri, 30 Dec 2005 18:45:36 +0000 + +mx44 (1.0-1) unstable; urgency=low + + * Initial Release. + + -- Willem van Engen Thu, 4 Aug 2005 21:35:13 +0000 + --- mx44-1.0.orig/debian/copyright +++ mx44-1.0/debian/copyright @@ -0,0 +1,61 @@ +This package was debianized by Willem van Engen on +4 Aug 2005 21:35:13 +0000. + +It was downloaded from http://hem.passagen.se/ja_linux/ + +Copyright: 2002-2005 Jens M Andreasen + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +sse.h - part of mpeg2dec +----------------------------------------------------------------------------- +Copyright: 1999-2003 R. Fisher + This file is part of mpeg2dec, a free MPEG-2 video stream decoder. + See http://libmpeg2.sourceforge.net/ for updates. + + mpeg2dec is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + mpeg2dec is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + +mmx.h - MultiMedia eXtensions GCC interface library for IA32. +----------------------------------------------------------------------------- +Copyright: 1997-1998 H. Dietz and R. Fisher + +License: + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT + LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR ANY PARTICULAR PURPOSE. --- mx44-1.0.orig/debian/compat +++ mx44-1.0/debian/compat @@ -0,0 +1 @@ +5 --- mx44-1.0.orig/debian/control +++ mx44-1.0/debian/control @@ -0,0 +1,29 @@ +Source: mx44 +Section: sound +Priority: optional +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Dana Olson +Build-Depends: debhelper (>= 5.0.0), dpatch, libgtk2.0-dev, libjack-dev, libasound2-dev +Standards-Version: 3.6.2 + +Package: mx44 +Architecture: i386 amd64 +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: polyphonic, multichannel midi realtime software synthesizer + The Mx44 is a polyphonic multichannel midi realtime software + synthesizer. It is written in C and hand optimized for the (Intel) MMX + instruction set. It runs under Linux, using any kernel modified for + realtime performance. + . + The core algorithm is a 4 x 4 crossmodulating matrix (phase and + amplitude) with individual envelopes for each oscillator. Oscillators + have individual frequency intonation, can emphasize any of the eight + first harmonics and even do some internal crossmodulation. Envelopes + can be switched between VCA and VCF modes (ehrm, actually wave-shaping, + but it will quack like a duck by any other name.) The sustainloop of + the envelope can be brought into oscillation in the audible spectre as + well as provide slow LFO sweeps. There is also a minor load of key and + velocity related modifications for wowie zowie realtime ecstacy + emulation. + . + Homepage: http://hem.passagen.se/ja_linux/ --- mx44-1.0.orig/debian/mx44.desktop +++ mx44-1.0/debian/mx44.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=mx44 +Comment=Polyphonic, multichannel midi realtime software synthesizer +Exec=/usr/bin/mx44 +#Icon=/usr/share/icons/mx44.png +Terminal=false +Type=Application +Categories=Application;AudioVideo;Audio --- mx44-1.0.orig/debian/mx44.links +++ mx44-1.0/debian/mx44.links @@ -0,0 +1 @@ +/usr/share/man/man1/mx44.1.gz /usr/share/man/man1/mx44.bin.1.gz --- mx44-1.0.orig/debian/mx44.install +++ mx44-1.0/debian/mx44.install @@ -0,0 +1,4 @@ +debian/mx44.desktop /usr/share/applications/ +mx44 /usr/bin/ +mx44.bin /usr/bin/ +mx41patch /usr/share/mx44/ --- mx44-1.0.orig/debian/menu +++ mx44-1.0/debian/menu @@ -0,0 +1,2 @@ +?package(mx44):needs="X11" section="Apps/Sound"\ + title="mx44" command="/usr/bin/mx44" --- mx44-1.0.orig/debian/mx44wrapper +++ mx44-1.0/debian/mx44wrapper @@ -0,0 +1,16 @@ +#!/bin/sh + +CONFIGDIR=~/.mx44 +DFLPATCHNAME=mx41patch +DFLPATCHDIR=/usr/share/mx44 + +# Create ~/.mx44 with default patch if it doesn't exist already +if [ ! -e "$CONFIGDIR/$DFLPATCHNAME" ]; then + mkdir -p "$CONFIGDIR" + cp "$DFLPATCHDIR/$DFLPATCHNAME" "$CONFIGDIR" +fi + +# Start real synth +cd "$CONFIGDIR" +`dirname $0`/mx44.bin $@ + --- mx44-1.0.orig/debian/mx44.1 +++ mx44-1.0/debian/mx44.1 @@ -0,0 +1,69 @@ +.TH Mx44 1 "February 9 2006" "Version 1.0" "Mx44 Manual Page" + +.SH NAME +mx44 - polyphonic, multichannel midi realtime software synthesizer + + +.SH SYNOPSIS +.B mx44 +[\fIVOICES\fP] + + +.SH DESCRIPTION +.PP +The \fIMx44\fP is a polyphonic multichannel midi realtime software +synthesizer. It is written in C and hand optimized for the (Intel) MMX +instruction set. It runs under Linux, using any kernel modified for +realtime performance. The sourcecode is licensed under GPL. +.PP +The core algorithm is a 4 x 4 crossmodulating matrix (phase and +amplitude) with individual envelopes for each oscillator. Oscillators +have individual frequency intonation, can emphasize any of the eight +first harmonics and even do some internal crossmodulation. Envelopes can +be switched between VCA and VCF modes (ehrm, actually wawe-shaping, but +it will quack like a duck by any other name.) The sustainloop of the +envelope can be brought into oscillation in the audible spectre as well +as provide slow LFO sweeps. There is also a minor load of key and +velocity related modifications for wowie zowie realtime ecstacy +emulation. +.PP +It is very good for esoteric pads and ultra electric leads. I use it all +the time together with the Rosegarden sequencer or some of my old Atari +toys (like M!). I don't think you can make it sound like a realistic +grand piano though, but then again: Somebody out there, please prove me +wrong. ;-) +.PP +A 166 Mhz Pentium will provide you with 20 simultanious voices, whereas +a 400 Mhz Pentium II can with ease provide you with 88 simultanious +voices. My current 1.1Ghz Celery occasionally runs 200 voices (800 +oscillators). That ought to be enough for most people. Write any number +after the command to change the 48 voice default. + + +.SH OPTIONS +.l +.TP 8 +.B \fIVOICES\fP +Sets the maximum number of voices. Default is 48. + + +.SH FILES +Mx44's only data file is stored in /usr/share/mx44, and is copied to +\fB$HOME\fP/.mx44/ when the user launches the wrapper script. This +allows users to make changes to the patches. + + +.SH SUGGESTIONS AND BUG REPORTS +Any bugs found should be reported to the upstream author and/or package +maintainer. + + +.SH OTHER INFO +The project homepage is at http://hem.passagen.se/ja_linux/. + + +.SH AUTHOR +Mx44 was written by Jens M Andreasen . + +This manual page was written by Dana Olson , for +the Ubuntu project (but may be used by others). --- mx44-1.0.orig/debian/rules +++ mx44-1.0/debian/rules @@ -0,0 +1,52 @@ +#!/usr/bin/make -f + +include /usr/share/dpatch/dpatch.make + +build: patch + dh_testdir + $(MAKE) + touch build-stamp + +clean: unpatch + dh_testdir + dh_testroot + rm -f build-stamp + rm -f mx44.bin + rm -f mx44 + -$(MAKE) clean + dh_clean + +install: build + mv mx44 mx44.bin + cp debian/mx44wrapper mx44 + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_install + dh_installmenu + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure --- mx44-1.0.orig/debian/patches/00list +++ mx44-1.0/debian/patches/00list @@ -0,0 +1 @@ +01-mmx-code-fixes --- mx44-1.0.orig/debian/patches/01-mmx-code-fixes.dpatch +++ mx44-1.0/debian/patches/01-mmx-code-fixes.dpatch @@ -0,0 +1,297 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## mmx-code-fixes.dpatch by Dana Olson +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: MMX and GCC4 minimal code changes. Initial patching by Willem van +## DP: Engen, modifications by Dana Olson + +@DPATCH@ + +--- mx44-1.0/mmx.h 2005-04-24 10:43:08.000000000 -0400 ++++ mx44-1.0-patched/mmx.h 2006-02-09 15:08:34.000000000 -0500 +@@ -92,13 +92,13 @@ + char b[8]; /* 8 Byte (8-bit) values */ + unsigned char ub[8]; /* 8 Unsigned Byte */ + float s[2]; /* Single-precision (32-bit) value */ +-} mmx_t; +- ++} __attribute__ ((aligned (8))) mmx_t; /* On an 8-byte (64-bit) boundary */ + + ++#if 0 + /* Function to test if multimedia instructions are supported... + */ +-static inline int ++inline extern int + mm_support(void) + { + /* Returns 1 if MMX instructions are supported, +@@ -106,12 +106,9 @@ + 5 if AMD MMX and 3DNow! instructions are supported + 0 if hardware does not support any of these + */ +- + register int rval = 0; + +- __asm__ //__volatile__ +- ( +- "\n\t" ++ __asm__ __volatile__ ( + /* See if CPUID instruction is supported ... */ + /* ... Get copies of EFLAGS into eax and ecx */ + "pushf\n\t" +@@ -171,10 +168,8 @@ + + /* Cyrix Section */ + /* See if extended CPUID is supported */ +- "movl $0x80000000, %%eax\n\t" +- "cpuid\n\t" +- "cmpl $0x80000000, %%eax\n\t" +- "jl MMXtest\n\t" /* Try standard CPUID instead */ ++ "cmpl $0x2, %%eax\n\t" ++ "jne MMXtest\n\t" /* Try standard CPUID instead */ + + /* Extended CPUID supported, so get extended features */ + "movl $0x80000001, %%eax\n\t" +@@ -239,9 +234,13 @@ + "\nNotSupported6:\n\t" + "#movl $106, %0:\n\n\t" + "\nNotSupported7:\n\t" +- "#movl $107, %0:\n\t" ++ "#movl $107, %0:\n\n\t" + "movl $0, %0:\n\n\t" +- "Return:\n\t" : "=a" (rval):: "eax", "ebx", "ecx", "edx" ++ ++ "Return:\n\t" ++ : "=a" (rval) ++ : /* no input */ ++ : "eax", "ebx", "ecx", "edx" + ); + + /* Return */ +@@ -256,7 +255,7 @@ + /* Returns 1 if MMX instructions are supported, 0 otherwise */ + return ( mm_support() & 0x1 ); + } +- ++#endif + + /* Helper functions for the instruction macros that follow... + (note that memory-to-register, m2r, instructions are nearly +@@ -274,37 +273,43 @@ + #define mmx_i2r(op, imm, reg) \ + { \ + mmx_t mmx_trace; \ +- mmx_trace = (imm); \ +- fprintf(stderr, #op "_i2r(" #imm "=0x%016llx, ", mmx_trace.q); \ ++ mmx_trace.uq = (imm); \ ++ printf(#op "_i2r(" #imm "=0x%08x%08x, ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ ("movq %%" #reg ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #reg "=0x%016llx) => ", mmx_trace.q); \ ++ printf(#reg "=0x%08x%08x) => ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ (#op " %0, %%" #reg \ + : /* nothing */ \ + : "X" (imm)); \ + __asm__ __volatile__ ("movq %%" #reg ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #reg "=0x%016llx\n", mmx_trace.q); \ ++ printf(#reg "=0x%08x%08x\n", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + } + + #define mmx_m2r(op, mem, reg) \ + { \ + mmx_t mmx_trace; \ + mmx_trace = (mem); \ +- fprintf(stderr, #op "_m2r(" #mem "=0x%016llx, ", mmx_trace.q); \ ++ printf(#op "_m2r(" #mem "=0x%08x%08x, ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ ("movq %%" #reg ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #reg "=0x%016llx) => ", mmx_trace.q); \ ++ printf(#reg "=0x%08x%08x) => ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ (#op " %0, %%" #reg \ + : /* nothing */ \ + : "X" (mem)); \ + __asm__ __volatile__ ("movq %%" #reg ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #reg "=0x%016llx\n", mmx_trace.q); \ ++ printf(#reg "=0x%08x%08x\n", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + } + + #define mmx_r2m(op, reg, mem) \ +@@ -313,14 +318,17 @@ + __asm__ __volatile__ ("movq %%" #reg ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #op "_r2m(" #reg "=0x%016llx, ", mmx_trace.q); \ ++ printf(#op "_r2m(" #reg "=0x%08x%08x, ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + mmx_trace = (mem); \ +- fprintf(stderr, #mem "=0x%016llx) => ", mmx_trace.q); \ ++ printf(#mem "=0x%08x%08x) => ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ (#op " %%" #reg ", %0" \ + : "=X" (mem) \ + : /* nothing */ ); \ + mmx_trace = (mem); \ +- fprintf(stderr, #mem "=0x%016llx\n", mmx_trace.q); \ ++ printf(#mem "=0x%08x%08x\n", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + } + + #define mmx_r2r(op, regs, regd) \ +@@ -329,32 +337,38 @@ + __asm__ __volatile__ ("movq %%" #regs ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #op "_r2r(" #regs "=0x%016llx, ", mmx_trace.q); \ ++ printf(#op "_r2r(" #regs "=0x%08x%08x, ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ ("movq %%" #regd ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #regd "=0x%016llx) => ", mmx_trace.q); \ ++ printf(#regd "=0x%08x%08x) => ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ (#op " %" #regs ", %" #regd); \ + __asm__ __volatile__ ("movq %%" #regd ", %0" \ + : "=X" (mmx_trace) \ + : /* nothing */ ); \ +- fprintf(stderr, #regd "=0x%016llx\n", mmx_trace.q); \ ++ printf(#regd "=0x%08x%08x\n", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + } + + #define mmx_m2m(op, mems, memd) \ + { \ + mmx_t mmx_trace; \ + mmx_trace = (mems); \ +- fprintf(stderr, #op "_m2m(" #mems "=0x%016llx, ", mmx_trace.q); \ ++ printf(#op "_m2m(" #mems "=0x%08x%08x, ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + mmx_trace = (memd); \ +- fprintf(stderr, #memd "=0x%016llx) => ", mmx_trace.q); \ ++ printf(#memd "=0x%08x%08x) => ", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + __asm__ __volatile__ ("movq %0, %%mm0\n\t" \ + #op " %1, %%mm0\n\t" \ + "movq %%mm0, %0" \ + : "=X" (memd) \ + : "X" (mems)); \ + mmx_trace = (memd); \ +- fprintf(stderr, #memd "=0x%016llx\n", mmx_trace.q); \ ++ printf(#memd "=0x%08x%08x\n", \ ++ mmx_trace.d[1], mmx_trace.d[0]); \ + } + + #else +@@ -363,14 +377,14 @@ + */ + + #define mmx_i2r(op, imm, reg) \ +- __asm__ __volatile__ (#op " $" #imm "0, %%" #reg \ ++ __asm__ __volatile__ (#op " %0, %%" #reg \ + : /* nothing */ \ +- : /* nothing */) ++ : "X" (imm) ) + + #define mmx_m2r(op, mem, reg) \ + __asm__ __volatile__ (#op " %0, %%" #reg \ + : /* nothing */ \ +- : "X" (mem)) ++ : "m" (mem)) + + #define mmx_r2m(op, reg, mem) \ + __asm__ __volatile__ (#op " %%" #reg ", %0" \ +@@ -394,7 +408,6 @@ + (this is both a load and a store... + in fact, it is the only way to store) + */ +-#define movq_i2r(var, reg) mmx_i2r(movq, var, reg) + #define movq_m2r(var, reg) mmx_m2r(movq, var, reg) + #define movq_r2m(reg, var) mmx_r2m(movq, reg, var) + #define movq_r2r(regs, regd) mmx_r2r(movq, regs, regd) +@@ -538,7 +551,6 @@ + movq_r2m(mm0, vard); \ + } + #else +- + #define pand_m2r(var, reg) mmx_m2r(pand, var, reg) + #define pand_r2r(regs, regd) mmx_r2r(pand, regs, regd) + #define pand(vars, vard) mmx_m2m(pand, vars, vard) +@@ -600,17 +612,17 @@ + + /* 1x64, 2x32, and 4x16 Parallel Shift Left Logical + */ +-#define psllq_i2r(imm, reg) mmx_m2r(psllq, imm, reg) ++#define psllq_i2r(imm, reg) mmx_i2r(psllq, imm, reg) + #define psllq_m2r(var, reg) mmx_m2r(psllq, var, reg) + #define psllq_r2r(regs, regd) mmx_r2r(psllq, regs, regd) + #define psllq(vars, vard) mmx_m2m(psllq, vars, vard) + +-#define pslld_i2r(imm, reg) mmx_m2r(pslld, imm, reg) ++#define pslld_i2r(imm, reg) mmx_i2r(pslld, imm, reg) + #define pslld_m2r(var, reg) mmx_m2r(pslld, var, reg) + #define pslld_r2r(regs, regd) mmx_r2r(pslld, regs, regd) + #define pslld(vars, vard) mmx_m2m(pslld, vars, vard) + +-#define psllw_i2r(imm, reg) mmx_m2r(psllw, imm, reg) ++#define psllw_i2r(imm, reg) mmx_i2r(psllw, imm, reg) + #define psllw_m2r(var, reg) mmx_m2r(psllw, var, reg) + #define psllw_r2r(regs, regd) mmx_r2r(psllw, regs, regd) + #define psllw(vars, vard) mmx_m2m(psllw, vars, vard) +@@ -618,17 +630,17 @@ + + /* 1x64, 2x32, and 4x16 Parallel Shift Right Logical + */ +-#define psrlq_i2r(imm, reg) mmx_m2r(psrlq, imm, reg) ++#define psrlq_i2r(imm, reg) mmx_i2r(psrlq, imm, reg) + #define psrlq_m2r(var, reg) mmx_m2r(psrlq, var, reg) + #define psrlq_r2r(regs, regd) mmx_r2r(psrlq, regs, regd) + #define psrlq(vars, vard) mmx_m2m(psrlq, vars, vard) + +-#define psrld_i2r(imm, reg) mmx_m2r(psrld, imm, reg) ++#define psrld_i2r(imm, reg) mmx_i2r(psrld, imm, reg) + #define psrld_m2r(var, reg) mmx_m2r(psrld, var, reg) + #define psrld_r2r(regs, regd) mmx_r2r(psrld, regs, regd) + #define psrld(vars, vard) mmx_m2m(psrld, vars, vard) + +-#define psrlw_i2r(imm, reg) mmx_m2r(psrlw, imm, reg) ++#define psrlw_i2r(imm, reg) mmx_i2r(psrlw, imm, reg) + #define psrlw_m2r(var, reg) mmx_m2r(psrlw, var, reg) + #define psrlw_r2r(regs, regd) mmx_r2r(psrlw, regs, regd) + #define psrlw(vars, vard) mmx_m2m(psrlw, vars, vard) +@@ -636,12 +648,12 @@ + + /* 2x32 and 4x16 Parallel Shift Right Arithmetic + */ +-#define psrad_i2r(imm, reg) mmx_m2r(psrad, imm, reg) ++#define psrad_i2r(imm, reg) mmx_i2r(psrad, imm, reg) + #define psrad_m2r(var, reg) mmx_m2r(psrad, var, reg) + #define psrad_r2r(regs, regd) mmx_r2r(psrad, regs, regd) + #define psrad(vars, vard) mmx_m2m(psrad, vars, vard) + +-#define psraw_i2r(imm, reg) mmx_m2r(psraw, imm, reg) ++#define psraw_i2r(imm, reg) mmx_i2r(psraw, imm, reg) + #define psraw_m2r(var, reg) mmx_m2r(psraw, var, reg) + #define psraw_r2r(regs, regd) mmx_r2r(psraw, regs, regd) + #define psraw(vars, vard) mmx_m2m(psraw, vars, vard) +@@ -711,7 +723,7 @@ + + #define emms() \ + { \ +- fprintf(stderr, "emms()\n"); \ ++ printf("emms()\n"); \ + __asm__ __volatile__ ("emms"); \ + } +