290 likes | 433 Views
ECSE436 Tutorial. Assembly and Linear Assembly Laurier Boulianne. Questions. Outline. Introduction to Assembly Linear Assembly AMR Reading. TMS320 Assemby Language. C6000 ISA. Instruction Packing. Sample Instructions. Sample Instruction. Instruction List. Instruction List.
E N D
ECSE436 Tutorial Assembly and Linear Assembly Laurier Boulianne
Outline • Introduction to Assembly • Linear Assembly • AMR • Reading
C program calling and ASM function -Values passed to the assembly functions using registers : A4,B4,A6,B6 and so on -Only registers A1,A2,B0,B1,B2 can be used as conditional registers -B3 contain the return address -A4 is the return value -Need to take into account the NOP
Linear Assembly • To effectively program a DSP using assembly language, you need to do the scheduling by hand! • Need to account for the number of clock cycles each functional unit takes, etc… • Difficult, so TI has linear assembly • you don’t have to schedule it, the compiler does it for you • can use CPU resources without worrying about scheduling, register allocation, etc…
What is Linear Assembly ? Enables you write assembly-like programs Do not have to worry about : • Registerusage • Pipelining • Delay slots • etc.
What is Linear Assembly ? C code TI Linear Assembly Efficiency Ease of use Assembly
What is Linear Assembly ? It is a cross between C and Assembly It lets you : • use symbolic names • forget pipeline issues • ignore putting NOPs • parallel bars • functional units • register names • more efficiently use CPU resources than C
Linear Assembly Extension in c is .c Extension in linear assembly is .sa
Example Dot Product From Chassaing //DOTPclasm.c short dotp4clasmfunc(short *a, short *b, short ncount); #include <stdio.h> #define count 4 short x[count] = {0,1,2,3}; short y[count] = {100, -20, 30, -20}; volatile int result = 0; main() { result = dotp4clasmfunc(x,y,count); printf("result = %d decimal \n", result); } Function written in LASM
Example Dot Product From Chassaing The LASM code .def _dotp4clasmfunc _dotp4clasmfunc: .cproc ap, bp, count .reg a, b, prod, sum zero sum loop: ldh *ap++,a ldh *bp++,b mpy a,b,prod add prod,sum,sum sub count,1,count [count] b loop .return sum .endproc
Example Dot Product From Chassaing Define and ASM function called from C .def _dotp4clasmfunc Name of the function Start a section of Linear assembly _dotp4clasmfunc: .cproc ap, bp, count Arguments of the function Set up your variables (similar to C) .reg a, b, prod, sum
Example Dot Product From Chassaing Initialize your sum to zero zero sum Load the value from memory pointed by ap, copy it to register a and increment the pointer by 1 ldh *ap++,a ldh stands for load half word (a short in C) Do the same thing with b ldh *bp++,b
Example Dot Product From Chassaing Multiply a and b and write the result to prod mpy a,b,prod Add sum and prod and write the result to sum add prod,sum,sum Decrement count by 1 sub count,1,count
Example Dot Product From Chassaing If count is different than 0, branch to loop [count] b loop Return sum as the output of your function (exactly Like the return command in C) .return sum End linear assembly function .endproc
AMR Addressing mode register Read Chassaing at pages : 82-83
AMR Addressing mode register
AMR Addressing mode register How to modify the AMR ? MVKL .S2 0x0004,B2 MVKH .S2 0x0005,B2 MVC .S2 B2,AMR MVC is the only function which can modify the content of a control register Be sure to reset the AMR at the end of your function Also, do the same inside your interrupt routine, check SPRU 187 to know how to modify the AMR from C There is a good example on how AMR works in SPRU189 at page 97-98
For more Information Read Chaissaing at pages : 87-88 and 112-115 Read Kuo and Gan at pages : 243-245 Read TMS320C6000 Optimizing Compiler User's Guide: Chapter 4(SPRU187) It contains the description of the directives (.trip, .cprog, .reg, etc.) Read TMS320C6000 CPU and Instruction Set Reference Guide (SPRU189) It contains the description of the instruction set (add, mpy, sub, mv, etc.)