parrocchetto/dsPIC_DSC_G.726A_src/iaquan_annex.s
2019-04-17 21:32:44 +02:00

344 satır
14 KiB
ArmAsm

/**************************************************************************
*
* ITU-T SOFTWARE TOOLS' GENERAL PUBLIC LICENSE
*
* This "General Public License" is published in the Annex 1 of the
* ITU-T Recommendation on "SOFTWARE TOOLS FOR HOMOGENITY OF RESULTS
* IN THE STANDARDIZATION PROCESS OF SPEECH AND AUDIO CODERS",
* approved in Geneva, 2000.
*
* TERMS AND CONDITIONS
*
* 1. This License Agreement applies to any module or other work
* related to the ITU-T Software Tool Library, and developed by the
* User's Group on Software Tools. The "Module", below, refers to any
* such module or work, and a "work based on the Module" means either
* the Module or any work containing the Module or a portion of it,
* either verbatim or with modifications. Each licensee is addressed
* as "you".
*
* 2. You may copy and distribute verbatim copies of the Module's
* source code as you receive it, in any medium, provided that you:
* - conspicuously and appropriately publish on each copy an appropriate
* copyright notice and disclaimer of warranty;
* - keep intact all the notices that refer to this General Public
* License and to the absence of any warranty; and
* - give any other recipients of the Module a copy of this General
* Public License along with the Module.
* You may charge a fee for the physical act of transferring a copy.
*
* 3. You may modify your copy or copies of the Module or any portion
* of it, and copy and distribute such modifications under the terms
* of Paragraph 1 above, provided that you also do the following:
*
* o cause the modified files to carry prominent notices stating
* that you changed the files and the date of any change; and
*
* o cause the whole of any work that you distribute or publish,
* that in whole or in part contains the Module or any part
* thereof, either with or without modifications, to be licensed
* at no charge to all third parties under the terms of this
* General Public License (except that you may choose to grant
* warranty protection to some or all third parties, at your
* option).
*
* o If the modified module normally reads commands interactively
* when run, you must cause it, when started running for such
* interactive use in the simplest and most usual way, to print or
* display an announcement including an appropriate copyright
* notice and a notice that there is no warranty (or else, saying
* that you provide a warranty) and that users may redistribute
* the module under these conditions, and telling the user how to
* view a copy of this General Public License.
*
* You may charge a fee for the physical act of transferring a copy,
* and you may at your option offer warranty protection in exchange
* for a fee.
*
* Mere aggregation of another independent work with the Module (or
* its derivative) on a volume of a storage or distribution medium
* does not bring the other work under the scope of these terms.
*
* 4. You may copy and distribute the Module (or a portion or
* derivative of it, under Paragraph 2) in object code or executable
* form under the terms of Paragraphs 1 and 2 above provided that you
* also do one of the following:
*
* o accompany it with the complete corresponding machine-
* readable source code, which must be distributed under the terms
* of Paragraphs 1 and 2 above; or,
*
* o accompany it with a written offer, valid for at least three
* years, to give any third party free (except for a nominal
* charge for the cost of distribution) a complete machine-
* readable copy of the corresponding source code, to be
* distributed under the terms of Paragraphs 1 and 2 above; or,
*
* o accompany it with the information you received as to where
* the corresponding source code may be obtained. (This
* alternative is allowed only for noncommercial distribution and
* only if you received the module in object code or executable
* form alone.)
*
* Source code for a work means the preferred form of the work for
* making modifications to it. For an executable file, complete
* source code means all the source code for all modules it contains;
* but, as a special exception, it need not include source code for
* modules which are standard libraries that accompany the operating
* system on which the executable file runs, or for standard header
* files or definitions files that accompany that operating system.
*
* 5. You may not copy, modify, sublicense, distribute or transfer
* the Module except as expressly provided under this General Public
* License. Any attempt otherwise to copy, modify, sublicense,
* distribute or transfer the Module is void, and will automatically
* terminate your rights to use the Module under this License.
* However, parties who have received copies, or rights to use copies,
* from you under this General Public License will not have their
* licenses terminated so long as such parties remain in full
* compliance.
*
* 6. By copying, distributing or modifying the Module (or any work
* based on the Module) you indicate your acceptance of this license
* to do so, and all its terms and conditions.
*
* 7. Each time you redistribute the Module (or any work based on the
* Module), the recipient automatically receives a license from the
* original licensor to copy, distribute or modify the Module subject
* to these terms and conditions. You may not impose any further
* restrictions on the recipients' exercise of the rights granted
* herein.
*
* 8. The ITU-T may publish revised and/or new versions of this
* General Public License from time to time. Such new versions will
* be similar in spirit to the present version, but may differ in
* detail to address new problems or concerns.
*
* Each version is given a distinguishing version number. If the
* Module specifies a version number of the license which applies to
* it and "any later version", you have the option of following the
* terms and conditions either of that version or of any later version
* published by the ITU-T. If the Module does not specify a version
* number of the license, you may choose any version ever published by
* the ITU-T.
*
* 9. If you wish to incorporate parts of the Module into other free
* modules whose distribution conditions are different, write to the
* author to ask for permission. For software which is copyrighted by
* the ITU-T, write to the ITU-T Secretariat; exceptions may be made
* for this. This decision will be guided by the two goals of
* preserving the free status of all derivatives of this free software
* and of promoting the sharing and reuse of software generally.
*
*
* NO WARRANTY
*
* 10. BECAUSE THE MODULE IS LICENSED FREE OF CHARGE, THERE IS NO
* WARRANTY FOR THE MODULE, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
* EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
* AND/OR OTHER PARTIES PROVIDE THE MODULE "AS IS" WITHOUT WARRANTY OF
* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
* PERFORMANCE OF THE MODULE IS WITH YOU. SHOULD THE MODULE PROVE
* DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
* OR CORRECTION.
*
* 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
* WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
* MODIFY AND/OR REDISTRIBUTE THE MODULE AS PERMITTED ABOVE, BE LIABLE
* TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
* CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
* THE MODULE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
* RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
* A FAILURE OF THE MODULE TO OPERATE WITH ANY OTHER MODULES), EVEN IF
* SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGES.
*
* END OF TERMS AND CONDITIONS
***************************************************************************/
;------------------------------------------------------------------------------
;Global Declarations:
;------------------------------------------------------------------------------
.global _G726_iaq_spd1_scale1
;void G726_iaq_spd1_scale1(short *inp,short *dq, short *yup, long *ylp,short *table);
;------------------------------------------------------------------------------
;Code Section in Program Memory
;------------------------------------------------------------------------------
.section libg726a, code
/******************************************************************************
*
* Function Name: G726_iaq_spd1_scale1
*
* System: RISC
*
* Platform: dsPIC33F
*
* Description: Combined functions of
* 1)Inverse adaptive quantizer
* 2)speed control block1
* 3)scalefactor block1
*
* Cycle Count: 88
*
* Input Parameters: w0-inp, w1-dq, w2-yup, w3-ylp, W4-table
*
* Output Parameters: dq, state->yup, state->ylp
* (state->dmsp and state->dmlp are implicit outputs
* accessed by incrementing address of state->yup)
* 1.yup, 2. dmsp, 3. dmlp in structure G726_state
*
* History:
*
* Date | By | Remarks
* ---------------+-------------------+----------------------------------
* Oct-21-2005 Raghavendra S. Created.
* Dec-2010 Sankaralingam.M Modified
******************************************************************************/
.text
_G726_iaq_spd1_scale1:
push w8
;-----------------------------------------------------------
; iaquan_2
;-----------------------------------------------------------
mov w4,w6 ;dqln = *(table + i); ;Adeptte
mov.w [w0],w4 ;dqs = (i >> (rate-1));
mov.w [w0+8],w5 ;w4-i,w5-rate
sub w5,#1,w5
asr w4,w5,w5 ;w5-dqs
sl w4,w4 ;w6-table
add w6,w4,w6 ;w6-add dqln
mov.w [w0+2],w7
mov.w [w6],w4 ;w4-dqln
asr w7,#2,w7 ;dql = (dqln + (y >> 2));,w7-y
add w4,w7,w4 ;w4-dql
mov.w #0x0800,w7 ;ds = (dql & 0x800);
and w4,w7,w7 ;w7-ds
mov.w #128,w8 ;dqt = dmn + 128;
clr B
mov.w w8,ACCBL
mov.w #127,w8 ;dmn = dql & 127;
and w4,w8,w8 ;w8-dmn
asr w4,#7,w4 ;dex = (dql >> 7) & 15;
and #0xF,w4 ;w4-dex
lac w8,A
sftac A,#16
add A ;A-dqt
cp0 w7 ;dqmag = (ds) ? 0 : ((dqt << 7) >>
bra z,ITZ ;(14 - dex));
clr.w w7 ;w7-dqmag
bra IOUT
ITZ: sftac A,#-7
subr w4,#14,w4
sftac A,w4
mov.w ACCAL,w7 ;w7-dqmag
IOUT: sl w5,#0XF,w5 ;*dq=(short) ((dqs << 15) + dqmag);
add w5,w7,[w1] ;w1-dq
;-----------------------------------------------------------
;speed_con_blk1
;-----------------------------------------------------------
mov.w [w6+120],w4 ;fi = *(table + 60 + i);, w4-fi
mov.w #31,w7 ;tmp = 31 * ((long)dms);
mov.w [w0+4],w5 ;w5-dms
mpy w5*w7,A ;A-tmp
sl w4,#11,w8
sl w4,#9,w4
lac w4,B ;*(yup + 1)=((tmp+(fi << 9)) >> 5);
sftac B,#15
add A
sftac A,#6
mov.w ACCAL,w4
mov.w w4,[++w2] ;w2-yup+1
mov.w #127,w4 ;tmp1 = 127 * ((long)dml);
mov.w [w0+6],w5
mpy w4*w5,A ;*(yup + 2)=(tmp1+(fi << 11) ) >>7;
lac w8,B
sftac B,#15
add A
sftac A,#8
mov.w ACCAL,w4
mov.w w4,[++w2] ;w2-yup+2
;-----------------------------------------------------------
;scale_fac_blk1
;-----------------------------------------------------------
mov.w [w6+240],w5 ;wi = *(table + 120 + i);, w5-wi
mov.w [w0+2],w6 ;tmp1= 31 * ((long)y);, w6-y
mpy w6*w7,A
lac w5,B
sftac B,#10 ;yut =(short)((tmp1+(wi << 5))>>5);
add A
sftac A,#6 ;A-yut
mov.w ACCAL,w6 ;w6-yut
mov.w #544,w4 ;if (yut < 544)
sub w2,#4,w2
cp w6,w4
bra ge,YGT
mov.w w4,[w2] ;*yup = 544;
bra IMOUT
YGT: mov.w #5120,w4 ;else if (yut > 5120)
cp w6,w4
bra le,YLE
mov.w w4,[w2] ;*yup = 5120;
bra IMOUT
;else
YLE: mov.w w6,[w2] ;*yup = yut;
IMOUT: mov.d [w3],w4
mov.w #63,w8
mul.uu w4,w8,w6 ;tmp = 63 * (*ylp);
mul.uu w5,w8,w0
add w0,w7,w7
NOTC: lac w7,A
mov.w w6,ACCAL ;*ylp=(tmp+(((long)*yup) << 6))>>6;
mov.w [w2],w4
lac w4,B
sftac B,#10
add A
sftac A,#6
mov.w ACCAL,w4
mov.w ACCAH,w5
mov.d w4,[w3]
pop w8
return
;--------End of All Code Sections ---------------------------------------------
.end ;End of program code in this file