User manual
164
mikoBasic PRO for PIC32
MikroElektronika
0x9D000004 0x10400002 BEQ R2, R0, L__SSA_Test2
0x9D000008 0x70000000 NOP
L__SSA_Test7:
Without SSA enabled, sub procedure SSA_Test this example is consisted of 5 asm instructions :
;Example.mbas, 29 :: if (y+k) then
0x9D000000 0x87A30002 LH R3, 2(SP)
0x9D000004 0x87A20000 LH R2, 0(SP)
0x9D000008 0x00431021 ADDU R2, R2, R3
0x9D00000C 0x10400002 BEQ R2, R0, L__SSA_Test2
0x9D000010 0x70000000 NOP
L__SSA_Test7:
Proper Coding Recommendations
To get the maximum out of the SSA, user should regard the following rules during the coding process:
- Routines should not contain too many parameters (not more than 4 words).
- Don’t change the value of the parameter in the function body (it is better to use a new local variable).
- If the function1 parameters are passed as function2 parameters, then parameter order should
remain the same:
sub procedure f2(dim a as integer, dim b as integer)
end sub
sub procedure f1(dim x as integer, dim y as integer)
‘ routine call
f2(x,y) ‘ x->a and y->b (1 to 1 and 2 to 2) is far more efcient than :
f2(y,x) ‘ y->a and x->b (1 to 2 and 2 to 1)
end sub
- Large amount of nested loops and complex structures as its members should be avoided.
- When writing a code in assembly, keep in mind that there are registers reserved exclusively for
routine parameters.
- Using goto and label statements in nested loops should be avoided.
- Obtaining address of the local variable with the global pointer and using it to alter the variable’s address
should be avoided.
Notes:
- emcl les compiled with or without SSA enabled are fully compatible and can be used and mixed without
any restrictions, except pointers to functions.
- Functions, functions declarations and pointers that may point to these functions must be compiled with the
same option, either SSA enabled or disabled. If this is not the case, compiler will report an error.