--- simple_idct.c 2003/06/09 13:53:13 1.2.2.2 +++ simple_idct.c 2004/03/22 22:36:23 1.4 @@ -22,13 +22,13 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: simple_idct.c,v 1.2.2.2 2003/06/09 13:53:13 edgomez Exp $ + * $Id: simple_idct.c,v 1.4 2004/03/22 22:36:23 edgomez Exp $ * ****************************************************************************/ /* based upon some outcommented c code from mpeg2dec (idct_mmx.c - written by Aaron Holtzman ) + written by Aaron Holtzman ) */ #include "../portab.h" @@ -91,7 +91,7 @@ #else #define ROW0_MASK 0xffffLL #endif - if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) | + if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) | ((uint64_t *)row)[1]) == 0) { temp = (row[0] << 3) & 0xffff; temp += temp << 16; @@ -103,7 +103,7 @@ #else if (!(((uint32_t*)row)[1] | ((uint32_t*)row)[2] | - ((uint32_t*)row)[3] | + ((uint32_t*)row)[3] | row[1])) { temp = (row[0] << 3) & 0xffff; temp += temp << 16; @@ -146,13 +146,13 @@ MAC16(b0, W5, row[5]); MAC16(b0, W7, row[7]); - + MAC16(b1, -W1, row[5]); MAC16(b1, -W5, row[7]); - + MAC16(b2, W7, row[5]); MAC16(b2, W3, row[7]); - + MAC16(b3, W3, row[5]); MAC16(b3, -W1, row[7]); } @@ -236,33 +236,7 @@ int i; for(i=0; i<8; i++) idctRowCondDC(block + i*8); - + for(i=0; i<8; i++) idctSparseCol(block + i); } - - -/* Input permutation for the simple_idct_mmx */ -static const uint8_t simple_mmx_permutation[64]={ - 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D, - 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D, - 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D, - 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F, - 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F, - 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D, - 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F, - 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F, -}; - -#if defined(ARCH_IS_IA32) -/* wrapper function, as simple_idct_mmx expects data to be permutated */ -void simple_idct_mmx2(int16_t * const block) -{ - int16_t tmp[64]; - int i; - - for(i=0;i<64;i++) tmp[simple_mmx_permutation[i]] = block[i]; - simple_idct_mmx(tmp); - for(i=0;i<64;i++) block[i] = tmp[i]; -} -#endif