[an error occurred while processing this directive]
Кстати, отличия в 64 есть и нехилые+
(«Телесистемы»: Конференция 'Цифровые сигнальные процессоры (DSP) и их применение')

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

Отправлено andy_P 05 ноября 2004 г. 16:28
В ответ на: Система такая (+) отправлено SM 05 ноября 2004 г. 16:17


Взгляните на реализацию memcpy для 64 - прерывания не запрещаются, код к ним толерантный. Вообще-то 64 - серьезный продвиг по сравнению с 62 - казалось бы, изменения в архитектуре невелики, а работает здорово быстрее.

memcpy64.asm/ 1056409758 0 0 0 2988 `
;*****************************************************************************/
;* memcpy64 v4.36 - Memcpy for C6400 */
;* Copyright (c) 1993-2003 Texas Instruments Incorporated */
;*****************************************************************************/
;*
;* void *memcpy(void *restrict dst, const void *restrict src, unsigned int len)
;* {
;* char *restrict s_p = (char *)src;
;* char *restrict d_p = (char *)dst;
;* int loop = len >> 3;
;* int i;
;*
;* if (len & 1) *d_p++ = *s_p++;
;* if (len & 2) { *d_p++ = *s_p++; *d_p++ = *s_p++; }
;* if (len & 4) { _mem4(d_p) = _mem4(s_p); d_p += 4; s_p += 4; }
;* if (loop == 1) _memd8(d_p) = _memd8(s_p);
;*
;* if (loop >= 2)
;* for (i = 0; i < loop; i++, d_p += 8, s_p += 8)
;* _memd8(d_p) = _memd8(s_p);
;*
;* return dst;
;* }
;*
;*****************************************************************************

.if .TMS320C6400
.include "c60asm.i"
.global _memcpy
.text

_memcpy: .asmfunc

AND .D1 0x1,A6,A0

[ A0] LDB .D2T1 *B4++,A3
|| AND .S1 0x2,A6,A1

[ A1] LDB .D2T1 *B4++,A8

[ A1] LDB .D2T1 *B4++,A9
|| SHRU .S2X A6,0x3,B5
|| AND .S1 0x4,A6,A2

[ A2] LDNW .D2T1 *B4++(4),A16
|| SHRU .S2X A6,0x4,B2
|| CMPEQ .L2 0x1,B5,B1

[ B1] LDNDW .D2T1 *B4++(8),A7:A6
|| [!B2] RET .S2 B3
|| MV .D1 A4,A5
|| SUB .L2 B5,2,B0

[ A0] STB .D1T1 A3,*A5++
[ A1] STB .D1T1 A8,*A5++
[ A1] STB .D1T1 A9,*A5++
[ A2] STNW .D1T1 A16,*A5++(4)
[ B1] STNDW .D1T1 A7:A6,*A5++(8)
; RETURN OCCURS

;** -------PROLOG-------------------------------------------------------------*
[ B0] BDEC .S2 LOOP,B0
NOP 1

LDNDW .D2T1 *B4++(8),A7:A6
|| [ B0] BDEC .S2 LOOP,B0

MVK .D1 0x1,A0

;** -------KERNEL-------------------------------------------------------------*
LOOP:

[ B0] BDEC .S2 LOOP,B0
|| LDNDW .D2T1 *B4++(8),A7:A6

[ A0] SUB .S1 A0,1,A0
|| [!A0] STNDW .D1T1 A7:A6,*A5++(8)

;** -------EPILOG-------------------------------------------------------------*
RETNOP .S2 B3, 1
STNDW .D1T1 A7:A6,*A5++(8)
STNDW .D1T1 A7:A6,*A5++(8)
NOP 2
; RETURN OCCURS
.endasmfunc
.endif

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru