LINUX.ORG.RU

История изменений

Исправление 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. При этом код получается одинакового размера.