/* * MMI optimized DSP utils * Copyright (c) 2000, 2001 Fabrice Bellard. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * MMI optimization by Leon van Stuivenberg */ #include "../dsputil.h" void ff_mmi_idct(DCTELEM * block); #include "mmi.h" static void clear_blocks_mmi(DCTELEM * blocks) { /* $4 = blocks */ int i; for (i = 0; i < 6; i++) { sq($0, 0, $4); sq($0, 16, $4); sq($0, 32, $4); sq($0, 48, $4); sq($0, 64, $4); sq($0, 80, $4); sq($0, 96, $4); sq($0, 112, $4); __asm__ __volatile__("addi $4, $4, 128"); } } static void put_pixels_clamped_mmi(const DCTELEM * block, UINT8 * pixels, int line_size) { /* $4 = block, $5 = pixels, $6 = line_size */ __asm__ __volatile__("li $11, 255":::"$11"); lq($4, 0, $12); pcpyld($11, $11, $11); pcpyh($11, $11); #define PUT(rs) \ ppacb($0, $##rs, $##rs); \ sd3(rs, 0, 5); \ __asm__ __volatile__ ("add $5, $5, $6"); pminh($12, $11, $12); pmaxh($12, $0, $12); lq($4, 16, $13); PUT(12); pminh($13, $11, $13); pmaxh($13, $0, $13); lq($4, 32, $12); PUT(13); pminh($12, $11, $12); pmaxh($12, $0, $12); lq($4, 48, $13); PUT(12); pminh($13, $11, $13); pmaxh($13, $0, $13); lq($4, 64, $12); PUT(13); pminh($12, $11, $12); pmaxh($12, $0, $12); lq($4, 80, $13); PUT(12); pminh($13, $11, $13); pmaxh($13, $0, $13); lq($4, 96, $12); PUT(13); pminh($12, $11, $12); pmaxh($12, $0, $12); lq($4, 112, $13); PUT(12); pminh($13, $11, $13); pmaxh($13, $0, $13); PUT(13); } /* todo static void add_pixels_clamped_mmi(const DCTELEM * block, UINT8 * pixels, int line_size) { } */ void dsputil_init_mmi(void) { put_pixels_clamped = put_pixels_clamped_mmi; //add_pixels_clamped = add_pixels_clamped_mmi; clear_blocks = clear_blocks_mmi; ff_idct = ff_mmi_idct; }