История изменений
Исправление KivApple, (текущая версия) :
Пробовал -Os и -O2. При этом код получается одинакового размера.
Умножение выглядит как-то так:
MOV.W 8(R7), R13 # Тут он извлекает int16_t из массива
MOV.W R13, R12
rpt #8 { rlax.w R12
rrum.w #4, R13 { rrum.w #4, R13
BIS.W R13, R12
MOV.W #__mspabi_fltlid, R4
BIT.W #0x8000, R12 { SUBC.W R13, R13 { INV.W R13, R13
CALL R4
MOV.W #__mspabi_mpyd, R5
MOV.W R12, R8
MOV.W R13, R9
MOV.W R14, R10
MOV.W R15, R11
MOV.W #-19705, R12
MOV.W #-1404, R13
MOV.W #29706, R14
MOV.W #16193, R15
CALL R5
MOV.W #__mspabi_cvtdf, R6
CALL R6
MOV.W R12, &gyro_x
MOV.W R13, &gyro_x+2
Исправление KivApple, :
Пробовал -Os и -O2. При этом код получается одинакового размера.
Умножение выглядит как-то так:
MOV.W 8(R7), R13
MOV.W R13, R12
rpt #8 { rlax.w R12
rrum.w #4, R13 { rrum.w #4, R13
BIS.W R13, R12
MOV.W #__mspabi_fltlid, R4
BIT.W #0x8000, R12 { SUBC.W R13, R13 { INV.W R13, R13
CALL R4
MOV.W #__mspabi_mpyd, R5
MOV.W R12, R8
MOV.W R13, R9
MOV.W R14, R10
MOV.W R15, R11
MOV.W #-19705, R12
MOV.W #-1404, R13
MOV.W #29706, R14
MOV.W #16193, R15
CALL R5
MOV.W #__mspabi_cvtdf, R6
CALL R6
MOV.W R12, &gyro_x
MOV.W R13, &gyro_x+2
Исходная версия KivApple, :
Пробовал -Os и -O2. При этом код получается одинакового размера.