Hallo Leute
Ich habe hier einen codepart den ich vom C30 Compiler auf den XC16
Compiler portieren will. Das funktioniert auch alles super, bis auf ein
Stück Code wo der Compiler mit aktivierter Optimierung aus dem Tritt
gerät. Es handelt sich grob gesagt um folgendes Stück Code:
1 | extern sint16 Math_CalcSinTaylor(uint16 phiX_u16)
|
2 | {
|
3 | register sint16 AkkuA_s16 asm("A");
|
4 | register sint16 AkkuB_s16 asm("B");
|
5 | ...
|
6 | ...
|
7 | ...
|
8 | /* x^2 = x*x */
|
9 | AkkuB_s16 = __builtin_mpy(phiX_s16, phiX_s16, 0, 0, 0, 0, 0, 0);
|
10 | phiX2_s16 = __builtin_sac(AkkuB_s16, 0); /* store */
|
11 | ...
|
12 | ...
|
13 | ...
|
14 | }
|
Die Fehlermeldung bei aktivierter Optimierungsstufe (egal welche)
lautet:
1 | ../source/Core/HAL/Math.c: In function 'Math_CalcSinTaylor':
|
2 | ../source/Core/HAL/Math.c:401:1: error: Argument 0 should be an accumulator register (__builtin_sacr)
|
3 | ../source/Core/HAL/Math.c:401:1: error: Expected DSP accumulator result (__builtin_mac)
|
Daraus schliesse ich, dass der Compiler die Definition der Variablen
AkkuA_s16 und AkkuB_s16 wegschmeisst.
Wie kann ich das denn verhindern?
Grüße
Daimonion