DSP Built-in Routines
mikroC PRO for dsPIC30/33 and PIC24 includes a collection of DSP Built-in Routines. This section describes the programmer interface to DSP instructions.
Bare in mind that most optimal DSP code can only be achieved by direct asm coding. We strongly discourage usage of these built-in routines for performance critical applications.
For the sake of compatibility each of these functions can be called by its alias formed by replacing 'DSP
' name part with '__builtin
'.
However, these aliases will not be visible in code assistant.

A
' and 'B
'.
Library Routines
- DSP_ADDAB
- DSP_ADD
- DSP_CLR
- DSP_CLR_prefetch
- DSP_ED
- DSP_EDAC
- DSP_LAC
- DSP_MAC
- DSP_MOVSAC
- DSP_MPY
- DSP_MPYN
- DSP_MSC
- DSP_SAC
- DSP_SACR
- DSP_SFTAC
- DSP_SUBAB
DSP_ADDAB
Prototype |
int DSP_ADDAB(const int acc_a, const int acc_b); |
---|---|
Description |
Add accumulators Assembler Operator / Machine Instruction : |
Parameters |
Both arguments can be ommited. |
Returns |
Returns the addition result to an accumulator. |
Requires |
Nothing. |
Example |
A = DSP_ADDAB(); |
Notes |
An error message will be displayed if the result is not an accumulator register. |
DSP_ADD
Prototype |
int DSP_ADD(const int acc, int value, const int shift); |
---|---|
Description |
Add value to the accumulator specified by result with a shift specified by literal shift. Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the shifted addition result to an accumulator. |
Requires |
Nothing. |
Example |
int value; A = DSP_ADD(A, value, 0); |
Notes |
An error message will be displayed if :
|
DSP_CLR
Prototype |
int DSP_CLR(void); |
---|---|
Description |
Clear the specified accumulator. Assembler Operator / Machine Instruction : |
Parameters |
None. |
Returns |
Returns the cleared value result to an accumulator. |
Requires |
Nothing. |
Example |
A = DSP_CLR(); |
Notes |
An error message will be displayed if the result is not an accumulator register. |
DSP_CLR_prefetch
Prototype |
int DSP_CLR_prefetch(int **xptr, int *xval, const int xincr, int **yptr, int *yval, const int yincr, int *AWB); |
---|---|
Description |
Clear an accumulator and prefetch data ready for a future MAC operation.
If AWB is non null, the other accumulator will be written back into the referenced variable. Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the cleared value result to an accumulator. |
Requires |
Nothing. |
Example |
int xdata x_memory_buffer[256]; int ydata y_memory_buffer[256]; int *xmemory; int *ymemory; int awb; int xVal, yVal; xmemory = x_memory_buffer; ymemory = y_memory_buffer; A = DSP_CLR_prefetch(&xmemory, &xVal, 2, &ymemory, &yVal, 2, &awb); /* After this instruction: - result will be cleared, - xVal will contain x_memory_buffer[0], - yVal will contain y_memory_buffer[0], - xmemory and ymemory will be incremented by 2, ready for the next MAC operation*/ |
Notes |
An error message will be displayed if :
The compiler may need to spill W13 to ensure that it is available for the write-back. It may be recommended to users that the register be claimed for this purpose. |
DSP_ED
Prototype |
int DSP_ED(int sqr, int **xptr, const int xincr, int **yptr, const int yincr, int *distance); |
---|---|
Description |
Squares Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the squared result to an accumulator. |
Requires |
Nothing. |
Example |
int *xmemory, *ymemory; int distance; A = DSP_ED(distance, &xmemory, 2, &ymemory, 2, &distance); |
Notes |
An error message will be displayed if :
|
DSP_EDAC
Prototype |
int DSP_EDAC(const int acc, int sqr, int **xptr, const int xincr, int **yptr, const int yincr, int *distance); |
---|---|
Description |
Squares Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the computed result to specified accumulator. |
Requires |
Nothing. |
Example |
int *xmemory, *ymemory; int distance; A = DSP_EDAC(A, distance, &xmemory, 2, &ymemory, 2, &distance); |
Notes |
An error message will be displayed if :
|
DSP_LAC
Prototype |
int DSP_LAC(int value, int shift); |
---|---|
Description |
Shifts Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the shifted result to an accumulator. |
Requires |
Nothing. |
Example |
int value; A = DSP_LAC(value,3); |
Notes |
An error message will be displayed if :
|
DSP_MAC
Prototype |
int DSP_MAC(const int acc, int a, int b, int **xptr, int *xval, const int xincr, int **yptr, int *yval, const int yincr, int *AWB); |
---|---|
Description |
Computes
If Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the computed result to an accumulator. |
Requires |
Nothing. |
Example |
int *xmemory; int *ymemory; int xVal, yVal; A = DSP_MAC(A, xVal, yVal, &xmemory, &xVal, 2, &ymemory, &yVal, 2, 0); |
Notes |
An error message will be displayed if :
|
DSP_MOVSAC
Prototype |
void DSP_MOVSAC(int **xptr, int *xval, const int xincr, int **yptr, int *yval, const int yincr, int *AWB, const int AWB_acc); |
---|---|
Description |
Computes nothing, but prefetches data ready for a future MAC operation.
If Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Nothing, just prefetches data. |
Requires |
Nothing. |
Example |
int *xmemory; int *ymemory; int xVal, yVal; DSP_MOVSAC(&xmemory, &xVal, 2, &ymemory, &yVal, 2, 0, A); |
Notes |
An error message will be displayed if :
|
DSP_MPY
Prototype |
int DSP_MPY(int a, int b, int **xptr, int *xval, const int xincr, int **yptr, int *yval, const int yincr); |
---|---|
Description |
Computes
Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the computed result to an accumulator. |
Requires |
Nothing. |
Example |
int *xmemory; int *ymemory; int xVal, yVal; A = DSP_MPY(xVal, yVal, &xmemory, &xVal, 2, &ymemory, &yVal, 2); |
Notes |
An error message will be displayed if :
|
DSP_MPYN
Prototype |
int DSP_MPYN(int a, int b, int **xptr, int *xval, const int xincr, int **yptr, int *yval, const int yincr); |
---|---|
Description |
Computes
Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the addition result to an accumulator. |
Requires |
Nothing. |
Example |
int *xmemory; int *ymemory; int xVal, yVal; A = DSP_MPYN(xVal, yVal, &xmemory, &xVal, 2, &ymemory, &yVal, 2); |
Notes |
An error message will be displayed if :
|
DSP_MSC
Prototype |
int DSP_MSC(const int acc, int a, int b, int **xptr, int *xval, const int xincr, int **yptr, int *yval, const int yincr, int *AWB); |
---|---|
Description |
Computes
If Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the computed result to an accumulator. |
Requires |
Nothing. |
Example |
int *xmemory; int *ymemory; int xVal, yVal; A = DSP_MSC(A, xVal, yVal, &xmemory, &xVal, 2, &ymemory, &yVal, 2, 0); |
Notes |
An error message will be displayed if :
|
DSP_SAC
Prototype |
int DSP_SAC(const int acc, const int shift); |
---|---|
Description |
Shifts accumulator by Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the shifted accumulator value. |
Requires |
Nothing. |
Example |
int result; result = DSP_SAC(A, 3); |
Notes |
An error message will be displayed if :
|
DSP_SACR
Prototype |
int DSP_SACR(const int acc, const int shift); |
---|---|
Description |
Shifts value by Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the shifted accumulator value. |
Requires |
Nothing. |
Example |
int result; result = DSP_SACR(A, 3); |
Notes |
An error message will be displayed if :
|
DSP_SFTAC
Prototype |
int DSP_SFTAC(const int acc, int shift); |
---|---|
Description |
Shifts accumulator by Assembler Operator / Machine Instruction : |
Parameters |
|
Returns |
Returns the shifted accumulator value. |
Requires |
Nothing. |
Example |
int i; A = DSP_SFTAC(A, i); |
Notes |
An error message will be displayed if :
|
DSP_SUBAB
Prototype |
int DSP_SUBAB(const int acc_a, const int acc_b); |
---|---|
Description |
Subtracts accumulators Assembler Operator / Machine Instruction : |
Parameters |
Both arguments can be ommited. |
Returns |
Returns the subtraction result to an accumulator. |
Requires |
Nothing. |
Example |
A = DSP_SUBAB(); |
Notes |
An error message will be displayed if the result is not an accumulator register. |
What do you think about this topic ? Send us feedback!