[an error occurred while processing this directive]
Это за вас давно TI сделала... rts.src, из него lmpy.asm (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 26 ноября 2003 г. 11:09
В ответ на: А скажите пожалуйста - про 32x32 в 55 от техаса ... отправлено интересующийся 32 битами 26 ноября 2003 г. 05:24


******************************************************************************
* lmpy.asm v2.56
* Copyright (c) 1997-2002 Texas Instruments Incorporated
******************************************************************************
.mmregs
.cpl_on
.arms_on
.model call=internal ; This function is recognized by name
; in the compiler.

.noremark 5673 ; The shifts in this file avoid SE CPU_89


*****************************************************************************
* _LMPY() - Multiply two 32-bit longs into a long.
*****************************************************************************
.global I$$LMPY
.global __mpyli
.noremark 5108

; inputs in AC0 and AC1
; AC0 -> IHI ILO
; AC1 -> JHI JLO
; for the computation the inputs are:
; IHI -> AC0_H
; ILO -> T0
; JHI -> AC1_H
; JLO -> SP(#0)
;
; result in AC0
;
; also uses T0

I$$LMPY:
__mpyli:
******************************************************************************
* ALLOCATE FRAME
******************************************************************************
push(AC1) ; Save off AC1_L (i.e. JLO) so it's available
; as an smem later on. Note that this
; also aligns the stack.

|| T0 = AC0 ; ILO

******************************************************************************
* A 32X32 MULTIPLY WITH A 64-BIT RESULT WOULD BE CALCULATED:
*
* IHI ILO
* X JHI JLO
* ----------
* ILO * JLO
* JLO * IHI
* ILO * JHI
* IHI * JHI
* ----------------------
* 64-bit result
*
* BUT WE NEED ONLY THE LOWER 32-BITS OF THIS CALCULATION. THEREFORE
* THE IHI * JHI CALCULATION ISN'T DONE AT ALL AND THE UPPER HALF OF THE
* JLO * IHI AND ILO * JHI CALCULATIONS IS THROWN AWAY. ALSO, THE
* ILO * JLO MULTIPLY MUST BE UNSIGNED, BUT THE SIGNNESS OF THE OTHER
* MULTIPLIES DOESN'T MATTER SINCE THE DIFFERENCE ALWAYS APPEARS IN THE
* UPPER 16-BITS.
******************************************************************************
AC0 = AC0 * *SP(#0) ; AC0 = IHI * JLO
AC1 = (AC1 * T0) + AC0 ; AC1 = (JLO * IHI) + (ILO * JHI)
AC0 = uns(T0 * *SP(#0)) ; AC0 = ILO * JLO
AC0 = AC0 + (AC1 << #16) ; final result

******************************************************************************
* CLEAN UP STACK FRAME AND RETURN.
******************************************************************************

|| SP = SP + #1 ; deallocate frame

return;
.end


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru