[an error occurred while processing this directive]
|
Вот есть такой код написанный на Linear Assembly для DM642:
---------------------------------------------------------------
ldw *data[1], next_val ;preload next value
|| cmplt res1, 0, flag_less ;get sign of the result
|| cmplt res2b, 0, flag_less2
[flag_less] neg res1, res1
|| [flag_less2] neg res2b, res2b ;operate on the second variable
shru res1, 16, res1
|| shru res2b, 16, res2b ;operate on the second variable
[flag_less] neg res1, tmp
||[!flag_less] mv res1, tmp ;get valid signed result
||[flag_less2] neg res2b, tmp2
||[!flag_less2] mv res2b, tmp2 ;get valid signed result
----------------------------------------------------------------
А вот че он сгенерил:
-----------------------------------------------------------------
LDW .D1T1 *+data(4),next_val ; |22| preload next value
NOP 2
CMPGT .L1 0x0,res1',flag_less ; |22| get sign of the result
CMPGT .L2 0x0,res2b,flag_less2 ; |22|
[ flag_less] NEG .L1 res1',res1' ; |26|
|| [ flag_less2] NEG .L2 res2b,res2b ; |26| operate on the second variable
SHRU .S2 res2b,0x10,res2b' ; |29| operate on the second variable
|| SHRU .S1 res1',0x10,res1' ; |29|
[!flag_less2] MV .L2 res2b',tmp2 ; |32| get valid signed result
|| [ flag_less2] NEG .S2 res2b',tmp2 ; |32|
|| [ flag_less] NEG .L1 res1',tmp ; |32|
|| [!flag_less] MV .S1 res1',tmp ; |32| get valid signed result
--------------------------------------------------------
Спрашивается нахрена NOP 2 после LDW если резултат LWD нужен аж хрен знает где в конце loop'a ?
E-mail: info@telesys.ru