;-------------------------- ; Директивы компилятора ;-------------------------- ; Файл синтаксиса для ассемблера ARM Cortex-M7 (STM32H723) ; Основан на cortex-m4.ini. ; Ключевые изменения: ; 1. .CPU обновлён до CORTEX-M7 ; 2. .FPU обновлён до FPV5-SP-D16 и FPV5-D16 (для H723 с двойной точностью) ; 3. Добавлены инструкции двойной точности (VLDR.64, VSTR.64, VCVT.F64 и т.д.) ; 4. Добавлены директивы кэша и MPU для M7 ;------------------------------------------------------------- [$def_sym] type=DefineSymbol [$expr] type=Expression [$macro_symbol] type=TokenOne item0="A" item1="B" item2="C" item3="D" item4="E" item5="F" item6="G" item7="H" item8="X" item9="Y" [$macro_type] type=TokenList item0=$macro_symbol item0type=EdDIR [$VAR_TYPE] type=TokenOne item0=$macro_type item1=$def_sym [$\] type=TokenList item0="\" item0type=DELIM item1=$VAR_TYPE [$m_be] type=TokenOne item0=$\ item1=$def_sym item2=$expr [$m_b] type=TokenMayBe item0=$m_be [$\exp] type=TokenList item0=$m_b item1=$m_b item2=$m_b item3=$m_b item4=$m_b item5=$m_b item6=$m_b item7=$m_b item8=$m_b item9=$m_b item10=$m_b item11=$m_b item12=$m_b [$exp] type=Expression [$ifexpression] type=TokenOne item0=$exp item1=$\exp ;---------------------------------------------------------------------- ; Директивы условной компиляции ;---------------------------------------------------------------------- [.IFDEF] type=TokenList item0=".IFDEF" item0type=ASMDIR item1=$ifexpression [.IFNDEF] type=TokenList item0=".IFNDEF" item0type=ASMDIR item1=$ifexpression [.IF] type=TokenList item0=".IF" item0type=ASMDIR item1=$ifexpression [.ENDIF] type=TokenList item0=".ENDIF" item0type=ASMDIR [.ELSE] type=TokenList item0=".ELSE" item0type=ASMDIR ;---------------------------- ; .CODE ;---------------------------- [$code_param] type=TokenOne item0="16" item1="32" [.CODE] type=TokenList item0=".CODE" item0type=ASMDIR item1=$code_param item1type=PARAM ;---------------------------- ; .ALIGN ;---------------------------- [$align_expression] type=Expression [$align_add1] type=TokenList item0="," item0type=DELIM item1=$align_expression [$align_add] type=TokenMayBe item0=$align_add1 [.ALIGN] type=TokenList item0=".ALIGN" item0type=ASMDIR item1=$align_expression item2=$align_add item3=$align_add ;---------------------------- ; .BALIGN ;---------------------------- [$balign_expression] type=Expression [$balign_add1] type=TokenList item0="," item0type=DELIM item1=$balign_expression [$balign_add] type=TokenMayBe item0=$balign_add1 [.BALIGN] type=TokenList item0=".BALIGN" item0type=ASMDIR item1=$balign_expression item2=$balign_add item3=$balign_add ;-------------------------- ; .INCLUDE ;-------------------------- [$include_file] type=IncludeFile [.INCLUDE] type=TokenList item0=".INCLUDE" item0type=ASMDIR item1=$include_file ;-------------------------- ; .SECTION ;-------------------------- ; Добавлены секции, характерные для проектов STM32H7 (DTCM, ITCM, SRAM и т.д.) [$section_param] type=Section item0=".TEXT" item1=".BSS" item2=".DATA" item3=".RODATA" item4=".VECTORS" item5=".ASMCODE" item6=".DTCM" ; Data Tightly Coupled Memory (H7) item7=".ITCM" ; Instruction TCM (H7) item8=".RAM_D1" ; Domain 1 SRAM (H7) item9=".RAM_D2" ; Domain 2 SRAM (H7) item10=".RAM_D3" ; Domain 3 SRAM (H7) item11=".BKPSRAM" ; Backup SRAM [.SECTION] type=TokenList item0=".SECTION" item0type=ASMDIR item1=$section_param item1type=PARAM ;-------------------------- ; .THUMB ;-------------------------- [.THUMB] type=TokenList item0=".THUMB" item0type=ASMDIR ;-------------------------- ; .SYNTAX ;-------------------------- [$syntax_param] type=TokenOne item0="UNIFIED" item1="DIVIDED" [.SYNTAX] type=TokenList item0=".SYNTAX" item0type=ASMDIR item1=$syntax_param item1type=PARAM ;-------------------------- ; .CPU ;-------------------------- ; [ИЗМЕНЕНО] Обновлено с CORTEX-M4 на CORTEX-M7 [$cpu_param] type=TokenSplit item0="CORTEX" item1="-" item2="M7" [.CPU] type=TokenList item0=".CPU" item0type=ASMDIR item1=$cpu_param item1type=PARAM ;----------------------------- ; .FPU ;----------------------------- ; [ИЗМЕНЕНО] Для STM32H723: ядро Cortex-M7 с FPU версии 5 (FPv5) с двойной точностью (D16) ; Возможные значения: FPV5-SP-D16 (одинарная точность), FPV5-D16 (двойная точность) [$fpu_param] type=TokenSplit item0="FPV5" item1="-" item2="D16" ; Для H723 доступна двойная точность, если нужна только SP — заменить на SP-D16 [.FPU] type=TokenList item0=".FPU" item0type=ASMDIR item1=$fpu_param item1type=PARAM ;------------------------------- ; .WORD ;------------------------------- [$expression_w] type=ExpressionList size=32 [$expression_word] type=TokenOne item0=$expression_w item1=$\exp [.WORD] type=TokenList item0=".WORD" item0type=ASMDIR item1=$expression_word ;------------------------------- ; .SHORT .HWORD ;------------------------------- [$expression_short] type=ExpressionList size=16 [.SHORT] type=TokenList item0=".SHORT" item0type=ASMDIR item1=$expression_short [.HWORD] type=TokenList item0=".HWORD" item0type=ASMDIR item1=$expression_short ;------------------------------- ; .ASCII и .ASCIZ ;------------------------------- [$ascii_list] type=StringList size=8 [.ASCII] type=TokenList item0=".ASCII" item0type=ASMDIR item1=$ascii_list [.ASCIZ] type=TokenList item0=".ASCIZ" item0type=ASMDIR item1=$ascii_list ;------------------------------- ; .BYTE ;------------------------------- [$expression_byte] type=ExpressionList size=8 [.BYTE] type=TokenList item0=".BYTE" item0type=ASMDIR item1=$expression_byte ;------------------------------- ; .EQU / .SET ;------------------------------- [$define_s] type=DefineSymbol [$define_symbol] type=TokenOne item0=$\ item1=$define_s [.SET] type=TokenList item0=".SET" item0type=ASMDIR item1=$define_symbol item2="," item2type=DELIM item3=$expression_word [.EQUIV] type=TokenList item0=".EQUIV" item0type=ASMDIR item1=$define_symbol item2="," item2type=DELIM item3=$expression_word [.EQU] type=TokenList item0=".EQU" item0type=ASMDIR item1=$define_symbol item2="," item2type=DELIM item3=$expression_word ;------------------------------ ; .GLOBAL / .WEAK ;------------------------------ [.GLOBAL] type=TokenList item0=".GLOBAL" item0type=ASMDIR item1=$define_symbol [.WEAK] type=TokenList item0=".WEAK" item0type=ASMDIR item1=$define_symbol ;-------------------------- ; .SPACE ;-------------------------- [$space_expression] type=Expression [$space_fl1] type=TokenList item0="," item0type=DELIM item1=$space_expression [$space_fill] type=TokenMayBe item0=$space_fl1 [.SPACE] type=TokenList item0=".SPACE" item0type=ASMDIR item1=$space_expression item2=$space_fill ;--------------------------------------- ; Суффиксы условий и размерности команд ;--------------------------------------- [$type] type=PartsMayBe item0="B" item1="SB" item2="H" item3="SH" [$cond] type=PartsMayBe item0="EQ" item1="NE" item2="CS" item3="HS" item4="CC" item5="LO" item6="MI" item7="PL" item8="VS" item9="VC" item10="HI" item11="LS" item12="GE" item13="LT" item14="GT" item15="LE" item16="AL" [$s] type=PartsMayBe item0="S" [$q] type=PartsMayBe item0=".W" item1=".N" [$qw] type=PartsMayBe item0=".W" [$xy] type=PartsOne item0="B" item1="T" ;-------- Операторы данных ----------------------------------------- [$exp_imm16] type=Expression min=0 max=65535 [$imm16] type=TokenOne item0=$\ item1=$exp_imm16 [$exp_imm12] type=Expression min=0 max=4095 [$imm12] type=TokenOne item0=$\ item1=$exp_imm12 [$exp_imm8] type=Expression min=0 max=255 ;-------- Смещение для VLDR/VSTR (кратно 4, до 1020) -------- [$exp_vldr_imm] type=Expression min=-1020 max=1020 [$vldr_imm] type=TokenOne item0=$\ item1=$exp_vldr_imm [$imm8] type=TokenOne item0=$\ item1=$exp_imm8 [$exp_imm5] type=Expression min=0 max=31 [$imm5] type=TokenOne item0=$\ item1=$exp_imm5 [$reg] type=Register [$register_core] type=TokenOne item0=$reg item1=$\ [$register_spec] type=TokenOne item0="APSR" item1="IPSR" item2="EPSR" item3="IEPSR" item4="IAPSR" item5="EAPSR" item6="PSR" item7="MSP" item8="PSP" item9="PRIMASK" item10="BASEPRI" item11="BASEPRI_MAX" item12="FAULTMASK" item13="CONTROL" item14=$\ ;--------------------------------------------------------------------- ; формат Operand2 ;--------------------------------------------------------------------- [$operand2_value] type=Expression size=32 [$O2_SH_V] type=Expression min=0 max=32 [$operand2_shift_value] type=TokenOne item0=$O2_SH_V item1=$\ [$OP2_SH_TOK] type=TokenOne item0="ASR" item1="LSL" item2="LSR" item3="ROR" item4="RRX" [$operand2_shift_token] type=TokenOne item0=$OP2_SH_TOK item1=$\ [$operand2_shift] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$operand2_shift_token item2type=ASMCOM item3=$operand2_shift_value [$operand2] type=TokenOne item0=$operand2_shift item1=$register_core item2=$operand2_value ;--------------------------------------------- ; 3.4 Memory access instructions ;--------------------------------------------- ;--------------------------------- ; 3.4.1 ADR ;--------------------------------- [$adr_token] type=TokenParts item0="ADR" item1=$cond ;;;---------------$\------------------------ [$adr_r] type=Register item0="PC" item1="SP" item2="R13" item3="R15" [$adr_reg] type=TokenOne item0=$\ item1=$adr_r [$adr_exp] type=Expression min=0 max=1020 [$adr_express] type=TokenOne item0=$\ item1=$adr_exp ;;----------------------------------------------------- [ADR] type=TokenList item0=$adr_token item0type=ASMCOM item1=$adr_reg item1type=REG item2="," item2type=DELIM item3=$adr_express ;-------------------------------- ; 3.4.2 LDRD ;-------------------------------- [$ldrd_token] type=TokenParts item0="LDRD" item1=$cond [$strd_token] type=TokenParts item0="STRD" item1=$cond ;;----------------$\---------------------------------- [$ldrd_o] type=Expression min=-1020 max=1020 [$ldrd_ofs] type=TokenOne item0=$\ item1=$ldrd_o ;;--------------------------------------------------------- [$ldrd_immediate_0] type=TokenList item0="]" item0type=DELIM [$ldrd_immediate] type=TokenList item0="," item0type=DELIM item1=$ldrd_ofs item2="]" item2type=DELIM [$ldrd_pre_index] type=TokenList item0=$ldrd_immediate item1="!" item1type=DELIM [$ldrs_post_index] type=TokenList item0=$ldrd_immediate_0 item1="," item1type=DELIM item2=$ldrd_ofs [$ldrd_mode] type=TokenOne item0=$ldrd_pre_index item1=$ldrs_post_index item2=$ldrd_immediate_0 item3=$ldrd_immediate [$ldrd_strd_variants] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4="[" item4type=DELIM item5=$register_core item6=$ldrd_mode [LDRD] type=TokenList item0=$ldrd_token item0type=ASMCOM item1=$ldrd_strd_variants [STRD] type=TokenList item0=$strd_token item0type=ASMCOM item1=$ldrd_strd_variants ;-------------------------------- ; 3.4.8 LDREX and STREX ;-------------------------------- [$ldrex_token] type=TokenParts item0="LDREX" item1=$cond [$strex_token] type=TokenParts item0="STREX" item1=$cond ;;----------------$\---------------------------------- [$ldrex_express_o] type=Expression min=0 max=1020 [$ldrex_express_ofs] type=TokenOne item0=$\ item1=$ldrex_express_o ;;--------------------------------------------------------- [$ldrex_offset1] type=TokenList item0="," item0type=DELIM item1=$ldrex_express_ofs item2="]" item2type=DELIM [$ldrex_offset] type=TokenOne item0="]" item0type=DELIM item1=$ldrex_offset1 [$ldrex_oper] type=TokenList item0=$ldrex_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$ldrex_offset [$strex_oper] type=TokenList item0=$strex_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5="[" item5type=DELIM item6=$register_core item7=$ldrex_offset [$ldrex_strex_suff] type=PartsMayBe item0="B" item1="H" [$ldrexbh_token] type=TokenParts item0="LDREX" item1=$ldrex_strex_suff item2=$cond [$ldrexbh_oper] type=TokenList item0=$ldrexbh_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5="]" item5type=DELIM [$strexbh_token] type=TokenParts item0="STREX" item1=$ldrex_strex_suff item2=$cond [$strexbh_oper] type=TokenList item0=$strexbh_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5="[" item5type=DELIM item6=$register_core item7="]" item7type=DELIM [LDREX] type=TokenOne item0=$ldrex_oper item1=$ldrexbh_oper [STREX] type=TokenOne item0=$strex_oper item1=$strexbh_oper ;-------------------------------- ; 3.4.2 LDR ;-------------------------------- [$ldr_immediate_offset_coma_offset] type=TokenList item0=$imm12 [$ldr_immediate_offset_coma_offset_post1] type=TokenList item0="," item0type=DELIM item1=$imm12 [$ldr_immediate_offset_coma_offset_post2] type=TokenMayBe item0=$ldr_immediate_offset_coma_offset_post1 [$ldr_immediate_offset_coma_offset_pre] type=TokenMayBe item0="!" item0type=DELIM [$ldr_immediate_offset_coma_select_offset] type=TokenList item0=$ldr_immediate_offset_coma_offset item0type=NUMBER item1="]" item1type=DELIM item2=$ldr_immediate_offset_coma_offset_pre [$ldr_immediate_offset_coma_select_reg_lsl1] type=TokenList item0="," item0type=DELIM item1="LSL" item1type=ASMCOM item2=$imm12 item2type=NUMBER [$ldr_immediate_offset_coma_select_reg_lsl] type=TokenMayBe item0=$ldr_immediate_offset_coma_select_reg_lsl1 [$ldr_immediate_offset_coma_select_reg] type=TokenList item0=$register_core item1=$ldr_immediate_offset_coma_select_reg_lsl item2="]" item2type=DELIM [$ldr_immediate_offset_coma_select] type=TokenOne item0=$ldr_immediate_offset_coma_select_offset item1=$ldr_immediate_offset_coma_select_reg [$ldr_immediate_offset_coma] type=TokenList item0="," item0type=DELIM item1=$ldr_immediate_offset_coma_select [$ldr_immediate_offset_bracket] type=TokenList item0="]" item0type=DELIM item1=$ldr_immediate_offset_coma_offset_post2 [$ldr_immediate_offset_modeindex] type=TokenOne item0=$ldr_immediate_offset_coma item1=$ldr_immediate_offset_bracket [$ldr_oper] type=TokenParts item0="LDR" item1=$type item2=$cond [$ldr_symple] type=TokenList item0=$ldr_oper item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$ldr_immediate_offset_modeindex [$ldr_priv_oper] type=TokenParts item0="LDR" item1=$type item2="T" item3=$cond [$str_oper] type=TokenParts item0="STR" item1=$type item2=$cond [$str_symple] type=TokenList item0=$str_oper item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$ldr_immediate_offset_modeindex [$ldr_priv_offset1] type=TokenList item0="," item0type=DELIM item1=$imm12 [$ldr_priv_offset] type=TokenMayBe item0=$ldr_priv_offset1 [$ldr_priv] type=TokenList item0=$ldr_priv_oper item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$ldr_priv_offset item6="]" item6type=DELIM [$ldr_mem_Expression_prev] type=TokenMayBe item0="=" ;;;;;;;;;;;------------------$\------------------------ [$ldr_mem_Expression_val] type=TokenOne item0=$exp item1=$\exp ;;;;;;------------------------------------------------- [$ldr_mem_Expression] type=TokenList item0=$ldr_mem_Expression_prev item0type=DELIM item1=$ldr_mem_Expression_val [$ldr_mem] type=TokenList item0=$ldr_oper item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$ldr_mem_Expression [LDR] type=TokenOne item0=$ldr_symple item1=$ldr_priv item2=$ldr_mem [$str_priv_oper] type=TokenParts item0="STR" item1=$type item2="T" item3=$cond [$str_priv] type=TokenList item0=$str_priv_oper item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$ldr_priv_offset item6="]" item6type=DELIM [STR] type=TokenOne item0=$str_symple item1=$str_priv ;--------------------------------- ; 3.4.6 LDM and STM ;--------------------------------- [$ldm_stm_direction] type=PartsMayBe item0="IA" item1="DB" item2="FD" item3="EA" [$ldm_token] type=TokenParts item0="LDM" item1=$ldm_stm_direction item2=$cond [$stm_token] type=TokenParts item0="STM" item1=$ldm_stm_direction item2=$cond [$ldm_stm_suff_save] type=TokenMayBe item0="!" ;;---------------------------$\------------------------------------ [$\regpack] type=TokenList item0=$register_core item1="-" item2=$register_core [$\ldm_stm_register_l_var] type=TokenOne item0=$\ item1=$\regpack item2=$register_core [$z\reg_l] type=TokenList item0="," item1=$\ldm_stm_register_l_var [$\reg_l] type=TokenMayBe item0=$z\reg_l [$\reg_l_first] type=TokenOne item0=$\ item1=$\ldm_stm_register_l_var [$\reglist] type=TokenList item0=$\reg_l_first item1=$\reg_l item2=$\reg_l item3=$\reg_l item4=$\reg_l item5=$\reg_l item6=$\reg_l item7=$\reg_l ;;------------------------------$\------------------------------ [$ldm_stm_register_l] type=RegisterList [$ldm_stm_register_list] type=TokenOne item0=$\reglist item1=$ldm_stm_register_l ;;--------------------------------------------------------------- [$ldm_stm_oper] type=TokenList item0=$register_core item1=$ldm_stm_suff_save item2="," item2type=DELIM item3="{" item3type=DELIM item4=$ldm_stm_register_list item5="}" item5type=DELIM [LDM] type=TokenList item0=$ldm_token item0type=ASMCOM item1=$ldm_stm_oper [STM] type=TokenList item0=$stm_token item0type=ASMCOM item1=$ldm_stm_oper ;-------------------------------- ; 3.4.7 PUSH ;-------------------------------- ;;----------------$\---------------------------------- [$push_r] type=RegisterList item0="PC" item1="R15" item2="SP" item3="R13" [$push_register] type=TokenOne item0=$\reglist item1=$push_r ;;--------------------------------------------------------- [$push_oper] type=TokenParts item0="PUSH" item1=$cond [PUSH] type=TokenList item0=$push_oper item0type=ASMCOM item1="{" item1type=DELIM item2=$push_register item3="}" item3type=DELIM ;-------------------------------- ; 3.4.7 POP ;-------------------------------- ;;----------------$\---------------------------------- [$pop_r] type=RegisterList [$pop_register] type=TokenOne item0=$\reglist item1=$pop_r ;;--------------------------------------------------------- [$pop_oper] type=TokenParts item0="POP" item1=$cond [POP] type=TokenList item0=$pop_oper item0type=ASMCOM item1="{" item1type=DELIM item2=$pop_register item3="}" item3type=DELIM ;-------------------------------- ; 3.4.9 CLREX ;-------------------------------- [$clrex_token] type=TokenParts item0="CLREX" item1=$cond [CLREX] type=TokenList item0=$clrex_token item0type=ASMCOM ;--------------------------------------------- ; 3.5 General data processing instructions ;--------------------------------------------- ;---------------------------------- ; 3.5.1 ADD ;---------------------------------- [$adds_token] type=TokenParts item0="ADD" item1=$s item2=$cond [$add_token] type=TokenParts item0="ADD" item2=$cond [$adds_oper_variants_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$operand2 [$adds_oper_variants_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$operand2 [$adds_oper_variants] type=TokenOne item0=$adds_oper_variants_0 item1=$adds_oper_variants_1 [$add_oper_variants_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$imm12 [$add_oper_variants_0] type=TokenList item0=$register_core item1="," item2=$imm12 [$add_oper_variants] type=TokenOne item0=$add_oper_variants_0 item1=$add_oper_variants_1 [$adds_oper] type=TokenList item0=$adds_token item0type=ASMCOM item1=$adds_oper_variants [$add_oper] type=TokenList item0=$add_token item0type=ASMCOM item1=$add_oper_variants [ADD] type=TokenOne item0=$adds_oper item1=$add_oper ;---------------------------------- ; 3.5.1 NEG инструкция компилятора ;---------------------------------- [$negs_token] type=TokenParts item0="NEG" item1=$s item2=$cond [$neg_token] type=TokenParts item0="NEG" item2=$cond [$negs_oper] type=TokenList item0=$negs_token item0type=ASMCOM item1=$adds_oper_variants [$neg_oper] type=TokenList item0=$neg_token item0type=ASMCOM item1=$add_oper_variants [NEG] type=TokenOne item0=$negs_oper item1=$neg_oper ;---------------------------------- ; 3.5.1 SUB ;---------------------------------- [$subs_token] type=TokenParts item0="SUB" item1=$s item2=$cond [$sub_token] type=TokenParts item0="SUB" item2=$cond [$subs_oper] type=TokenList item0=$subs_token item0type=ASMCOM item1=$adds_oper_variants [$sub_oper] type=TokenList item0=$sub_token item0type=ASMCOM item1=$add_oper_variants [SUB] type=TokenOne item0=$subs_oper item1=$sub_oper ;---------------------------------- ; 3.5.1 ADC ;---------------------------------- [$adc_token] type=TokenParts item0="ADC" item1=$s item2=$cond [$adc_oper_2] type=TokenList item0=$adc_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$operand2 [$adc_oper_1] type=TokenList item0=$adc_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$operand2 [ADC] type=TokenOne item0=$adc_oper_1 item1=$adc_oper_2 ;---------------------------------- ; 3.5.1 SBC ;---------------------------------- [$sbc_token] type=TokenParts item0="SBC" item1=$s item2=$cond [$sbc_oper_2] type=TokenList item0=$sbc_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$operand2 [$sbc_oper_1] type=TokenList item0=$sbc_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$operand2 [SBC] type=TokenOne item0=$sbc_oper_1 item1=$sbc_oper_2 ;---------------------------------- ; 3.5.1 RSB ;---------------------------------- [$rsb_token] type=TokenParts item0="RSB" item1=$s item2=$cond [$rsb_oper_2] type=TokenList item0=$rsb_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$operand2 [$rsb_oper_1] type=TokenList item0=$rsb_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$operand2 [RSB] type=TokenOne item0=$rsb_oper_1 item1=$rsb_oper_2 ;------------------------------- ; 3.5.2 AND, ORR, EOR, BIC, and ORN ;------------------------------- [$and_orr_eor_bic_orn_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$operand2 [$and_orr_eor_bic_orn_oper_0] type=TokenList item0=$register_core item1="," item2=$register_core item3="," item3type=DELIM item4=$operand2 [$and_orr_eor_bic_orn_oper] type=TokenOne item0=$and_orr_eor_bic_orn_oper_0 item1=$and_orr_eor_bic_orn_oper_1 [$and_token] type=TokenParts item0="AND" item1=$s item2=$cond [AND] type=TokenList item0=$and_token item0type=ASMCOM item1=$and_orr_eor_bic_orn_oper [$orr_token] type=TokenParts item0="ORR" item1=$s item2=$cond [ORR] type=TokenList item0=$orr_token item0type=ASMCOM item1=$and_orr_eor_bic_orn_oper [$eor_token] type=TokenParts item0="EOR" item1=$s item2=$cond [EOR] type=TokenList item0=$eor_token item0type=ASMCOM item1=$and_orr_eor_bic_orn_oper [$bic_token] type=TokenParts item0="BIC" item1=$s item2=$cond [BIC] type=TokenList item0=$bic_token item0type=ASMCOM item1=$and_orr_eor_bic_orn_oper [$orn_token] type=TokenParts item0="ORN" item1=$s item2=$cond [ORN] type=TokenList item0=$orn_token item0type=ASMCOM item1=$and_orr_eor_bic_orn_oper ;------------------------------- ; 3.5.3 ASR, LSL, LSR, ROR, and RRX ;------------------------------- [$rrx_token] type=TokenParts item0="RRX" item1=$s item2=$cond [RRX] type=TokenList item0=$rrx_token item1=$register_core item2="," item2type=DELIM item3=$register_core ;;----------------$\---------------------------------- [$asr_lsl_lsr_ror_e] type=Expression min=0 max=32 [$asr_lsl_lsr_ror_expression] type=TokenOne item0=$\ item1=$asr_lsl_lsr_ror_e ;;--------------------------------------------------------- [$asr_lsl_lsr_ror_oper_val] type=TokenOne item0=$register_core item1=$asr_lsl_lsr_ror_expression [$asr_lsl_lsr_ror_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$asr_lsl_lsr_ror_oper_val [$asr_token] type=TokenParts item0="ASR" item1=$s item2=$cond [ASR] type=TokenList item0=$asr_token item0type=ASMCOM item1=$asr_lsl_lsr_ror_oper [$lsl_token] type=TokenParts item0="LSL" item1=$s item2=$cond [LSL] type=TokenList item0=$lsl_token item0type=ASMCOM item1=$asr_lsl_lsr_ror_oper [$lsr_token] type=TokenParts item0="LSR" item1=$s item2=$cond [LSR] type=TokenList item0=$lsr_token item0type=ASMCOM item1=$asr_lsl_lsr_ror_oper [$ror_token] type=TokenParts item0="ROR" item1=$s item2=$cond [ROR] type=TokenList item0=$ror_token item0type=ASMCOM item1=$asr_lsl_lsr_ror_oper ;----------------------------------------- ; 3.5.4 CLZ ;----------------------------------------- [$clz_token] type=TokenParts item0="CLZ" item1=$cond [CLZ] type=TokenList item0=$clz_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core ;----------------------------------------- ; 3.5.5 CMP and CMN ;----------------------------------------- [$cmp_token] type=TokenParts item0="CMP" item1=$cond ;;;;;;;--------------- $\------------------------ [$cmp_r] type=Register item0="R15" item1="PC" [$cmp_reg] type=TokenOne item0=$cmp_r item1=$\ ;;;;;;;;;----------------------------------------- [CMP] type=TokenList item0=$cmp_token item0type=ASMCOM item1=$cmp_reg item2="," item2type=DELIM item3=$operand2 [$cmn_token] type=TokenParts item0="CMN" item1=$cond [CMN] type=TokenList item0=$cmn_token item0type=ASMCOM item1=$cmp_reg item2="," item2type=DELIM item3=$operand2 ;----------------------------------------- ; 3.5.7 MOVT ;----------------------------------------- [$movt_token] type=TokenParts item0="MOVT" item2=$cond [MOVT] type=TokenList item0=$movt_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$imm16 ;----------------------------------------- ; 3.5.6 MOV ;----------------------------------------- [$mov_oper2_token] type=TokenParts item0="MOV" item1=$s item2=$cond [$mov_oper2] type=TokenList item0=$mov_oper2_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$operand2 [$mov_imm16_token] type=TokenParts item0="MOV" item1="W" item2=$cond [$mov_imm16] type=TokenList item0=$mov_imm16_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$imm16 [$mov_reg] type=TokenList item0=$mov_imm16_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core [MOV] type=TokenOne item0=$mov_oper2 item1=$mov_imm16 item2=$mov_reg ;----------------------------------------- ; 3.5.6 MVN ;----------------------------------------- [$mvn_token] type=TokenParts item0="MVN" item1=$s item2=$cond [MVN] type=TokenList item0=$mvn_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$operand2 ;------------------------------------ ; 3.5.8 REV, REV16, REVSH, and RBIT ;------------------------------------ [$rev_token_ext] type=PartsMayBe item0="16" item1="SH" [$rev_token] type=TokenParts item0="REV" item1=$rev_token_ext item2=$cond [REV] type=TokenList item0=$rev_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core [$rbit_token] type=TokenParts item0="RBIT" item1=$cond [RBIT] type=TokenList item0=$rbit_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core ;------------------------------------ ; 3.5.9 SADD16 and SADD8 ;------------------------------------ [$sadd8_sadd16_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$sadd8_sadd16_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$sadd8_sadd16_oper] type=TokenOne item0=$sadd8_sadd16_oper_1 item1=$sadd8_sadd16_oper_0 [$sadd8_token] type=TokenParts item0="SADD8" item1=$cond [$sadd16_token] type=TokenParts item0="SADD16" item1=$cond [SADD8] type=TokenList item0=$sadd8_token item0type=ASMCOM item1=$sadd8_sadd16_oper [SADD16] type=TokenList item0=$sadd16_token item0type=ASMCOM item1=$sadd8_sadd16_oper ;------------------------------------ ; 3.5.10 SHADD16 and SHADD8 ;------------------------------------ [$shadd8_shadd16_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$shadd8_shadd16_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$shadd8_shadd16_oper] type=TokenOne item0=$shadd8_shadd16_oper_1 item1=$shadd8_shadd16_oper_0 [$shadd8_token] type=TokenParts item0="SHADD8" item1=$cond [$shadd16_token] type=TokenParts item0="SHADD16" item1=$cond [SHADD8] type=TokenList item0=$shadd8_token item0type=ASMCOM item1=$shadd8_shadd16_oper [SHADD16] type=TokenList item0=$shadd16_token item0type=ASMCOM item1=$shadd8_shadd16_oper ;------------------------------------ ; 3.5.11 SHASX and SHSAX ;------------------------------------ [$shasx_shsax_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$shasx_shsax_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$shasx_shsax_oper] type=TokenOne item0=$shasx_shsax_oper_1 item1=$shasx_shsax_oper_0 [$shasx_token] type=TokenParts item0="SHASX" item1=$cond [$shsax_token] type=TokenParts item0="SHSAX" item1=$cond [SHASX] type=TokenList item0=$shasx_token item0type=ASMCOM item1=$shasx_shsax_oper [SHSAX] type=TokenList item0=$shsax_token item0type=ASMCOM item1=$shasx_shsax_oper ;------------------------------------ ; 3.5.12 SHSUB16 and SHSUB8 ;------------------------------------ [$shsub8_shsub16_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$shsub8_shsub16_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$shsub8_shsub16_oper] type=TokenOne item0=$shsub8_shsub16_oper_1 item1=$shsub8_shsub16_oper_0 [$shsub8_token] type=TokenParts item0="SHSUB8" item1=$cond [$shsub16_token] type=TokenParts item0="SHSUB16" item1=$cond [SHSUB8] type=TokenList item0=$shsub8_token item0type=ASMCOM item1=$shsub8_shsub16_oper [SHSUB16] type=TokenList item0=$shsub16_token item0type=ASMCOM item1=$shsub8_shsub16_oper ;------------------------------------ ; 3.5.13 SSUB16 and SSUB8 ;------------------------------------ [$ssub8_ssub16_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$ssub8_ssub16_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$ssub8_ssub16_oper] type=TokenOne item0=$ssub8_ssub16_oper_1 item1=$ssub8_ssub16_oper_0 [$ssub8_token] type=TokenParts item0="SSUB8" item1=$cond [$ssub16_token] type=TokenParts item0="SSUB16" item1=$cond [SSUB8] type=TokenList item0=$ssub8_token item0type=ASMCOM item1=$ssub8_ssub16_oper [SSUB16] type=TokenList item0=$ssub16_token item0type=ASMCOM item1=$ssub8_ssub16_oper ;------------------------------------ ; 3.5.11 SASX and SSAX ;------------------------------------ [$sasx_ssax_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$sasx_ssax_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$sasx_ssax_oper] type=TokenOne item0=$sasx_ssax_oper_1 item1=$sasx_ssax_oper_0 [$sasx_token] type=TokenParts item0="SASX" item1=$cond [$ssax_token] type=TokenParts item0="SSAX" item1=$cond [SASX] type=TokenList item0=$sasx_token item0type=ASMCOM item1=$sasx_ssax_oper [SSAX] type=TokenList item0=$ssax_token item0type=ASMCOM item1=$sasx_ssax_oper ;---------------------------------------- ; 3.5.15 TST and TEQ ;---------------------------------------- [$tst_teq_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$operand2 [$tst_token] type=TokenParts item0="TST" item1=$cond [$teq_token] type=TokenParts item0="TEQ" item1=$cond [TST] type=TokenList item0=$tst_token item0type=ASMCOM item1=$tst_teq_oper [TEQ] type=TokenList item0=$teq_token item0type=ASMCOM item1=$tst_teq_oper ;------------------------------------ ; 3.5.16 UADD16 and UADD8 ;------------------------------------ [$uadd16_uadd8_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uadd16_uadd8_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uadd16_uadd8_oper] type=TokenOne item0=$uadd16_uadd8_oper_0 item1=$uadd16_uadd8_oper_1 [$uadd16_token] type=TokenParts item0="UADD16" item1=$cond [$uadd8_token] type=TokenParts item0="UADD8" item1=$cond [UADD16] type=TokenList item0=$uadd16_token item0type=ASMCOM item1=$uadd16_uadd8_oper [UADD8] type=TokenList item0=$uadd8_token item0type=ASMCOM item1=$uadd16_uadd8_oper ;------------------------------------ ; 3.5.17 UASX and USAX ;------------------------------------ [$uasx_usax_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uasx_usax_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uasx_usax_oper] type=TokenOne item0=$uasx_usax_oper_1 item1=$uasx_usax_oper_0 [$uasx_token] type=TokenParts item0="UASX" item1=$cond [$usax_token] type=TokenParts item0="USAX" item1=$cond [UASX] type=TokenList item0=$uasx_token item0type=ASMCOM item1=$uasx_usax_oper [USAX] type=TokenList item0=$usax_token item0type=ASMCOM item1=$uasx_usax_oper ;------------------------------------ ; 3.5.18 UHADD16 and UHADD8 ;------------------------------------ [$uhadd16_uhadd8_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uhadd16_uhadd8_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uhadd16_uhadd8_oper] type=TokenOne item0=$uhadd16_uhadd8_oper_0 item1=$uhadd16_uhadd8_oper_1 [$uhadd16_token] type=TokenParts item0="UHADD16" item1=$cond [$uhadd8_token] type=TokenParts item0="UHADD8" item1=$cond [UHADD16] type=TokenList item0=$uhadd16_token item0type=ASMCOM item1=$uhadd16_uhadd8_oper [UHADD8] type=TokenList item0=$uhadd8_token item0type=ASMCOM item1=$uhadd16_uhadd8_oper ;------------------------------------ ; 3.5.19 UHASX and UHSAX ;------------------------------------ [$uhasx_uhsax_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uhasx_uhsax_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uhasx_uhsax_oper] type=TokenOne item0=$uhasx_uhsax_oper_1 item1=$uhasx_uhsax_oper_0 [$uhasx_token] type=TokenParts item0="UHASX" item1=$cond [$uhsax_token] type=TokenParts item0="UHSAX" item1=$cond [UHASX] type=TokenList item0=$uhasx_token item0type=ASMCOM item1=$uhasx_uhsax_oper [UHSAX] type=TokenList item0=$uhsax_token item0type=ASMCOM item1=$uhasx_uhsax_oper ;------------------------------------ ; 3.5.20 UHSUB16 and UHSUB8 ;------------------------------------ [$uhsub8_uhsub16_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uhsub8_uhsub16_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uhsub8_uhsub16_oper] type=TokenOne item0=$uhsub8_uhsub16_oper_1 item1=$uhsub8_uhsub16_oper_0 [$uhsub8_token] type=TokenParts item0="UHSUB8" item1=$cond [$uhsub16_token] type=TokenParts item0="UHSUB16" item1=$cond [UHSUB8] type=TokenList item0=$uhsub8_token item0type=ASMCOM item1=$uhsub8_uhsub16_oper [UHSUB16] type=TokenList item0=$uhsub16_token item0type=ASMCOM item1=$uhsub8_uhsub16_oper ;----------------------------------------------- ; 3.5.21 SEL ;----------------------------------------------- [$sel_token] type=TokenParts item0="SEL" item1=$cond item2=$q [$sel_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$sel_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$sel_oper] type=TokenOne item0=$sel_oper_0 item1=$sel_oper_1 [SEL] type=TokenList item0=$sel_token item0type=ASMCOM item1=$sel_oper ;----------------------------------------------- ; 3.5.23 USADA8 ;----------------------------------------------- [$usada8_token] type=TokenParts item0="USADA8" item1=$cond [$usada8_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5="," item5type=DELIM item6=$register_core [$usada8_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$usada8_oper] type=TokenOne item0=$usada8_oper_0 item1=$usada8_oper_1 [USADA8] type=TokenList item0=$usada8_token item0type=ASMCOM item1=$usada8_oper ;----------------------------------------------- ; 3.5.22 USAD8 ;----------------------------------------------- [$usad8_token] type=TokenParts item0="USAD8" item1=$cond [$usad8_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$usad8_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$usad8_oper] type=TokenOne item0=$usad8_oper_0 item1=$usad8_oper_1 [USAD8] type=TokenList item0=$usad8_token item0type=ASMCOM item1=$usad8_oper ;------------------------------------ ; 3.5.24 USUB16 and USUB8 ;------------------------------------ [$usub8_usub16_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$usub8_usub16_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$usub8_usub16_oper] type=TokenOne item0=$usub8_usub16_oper_1 item1=$usub8_usub16_oper_0 [$usub8_token] type=TokenParts item0="USUB8" item1=$cond [$usub16_token] type=TokenParts item0="USUB16" item1=$cond [USUB8] type=TokenList item0=$usub8_token item0type=ASMCOM item1=$usub8_usub16_oper [USUB16] type=TokenList item0=$usub16_token item0type=ASMCOM item1=$usub8_usub16_oper ;---------------------------------------- ; 3.6 Multiply and divide instructions ;---------------------------------------- ;-------------------------------- ; 3.6.1 MUL ;-------------------------------- [$mul_token] type=TokenParts item0="MUL" item1=$s item2=$cond [$mul_oper_0] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$mul_oper_1] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$mul_oper] type=TokenOne item0=$mul_oper_0 item1=$mul_oper_1 [MUL] type=TokenList item0=$mul_token item0type=ASMCOM item1=$mul_oper ;-------------------------------- ; 3.6.1 MLA, MLS ;-------------------------------- [$mla_token] type=TokenParts item0="MLA" item1=$cond [$mls_token] type=TokenParts item0="MLS" item1=$cond [$mla_mls_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5="," item5type=DELIM item6=$register_core [MLA] type=TokenList item0=$mla_token item0type=ASMCOM item1=$mla_mls_oper [MLS] type=TokenList item0=$mls_token item0type=ASMCOM item1=$mla_mls_oper ;-------------------------------- ; 3.6.2 UMULL, UMAAL and UMLAL ;-------------------------------- [$umull_token] type=TokenParts item0="UMULL" item1=$cond [$umaal_token] type=TokenParts item0="UMAAL" item1=$cond [$umlal_token] type=TokenParts item0="UMLAL" item1=$cond [$umull_umaal_umlal_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5="," item5type=DELIM item6=$register_core [UMULL] type=TokenList item0=$umull_token item0type=ASMCOM item1=$umull_umaal_umlal_oper [UMAAL] type=TokenList item0=$umaal_token item0type=ASMCOM item1=$umull_umaal_umlal_oper [UMLAL] type=TokenList item0=$umlal_token item0type=ASMCOM item1=$umull_umaal_umlal_oper ;-------------------------------- ; 3.6.4 SMLAD ;-------------------------------- [$smladX_token] type=TokenParts item0="SMLAD" item1=$xy item3=$cond [SMLAD] type=TokenList item0=$smladX_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core item6="," item6type=DELIM item7=$register_core ;-------------------------------- ; 3.6.5 SMLAL and SMLALD ;-------------------------------- [$smlald_token] type=TokenParts item0="SMLALD" item1=$cond [$smlaldXY_token] type=TokenParts item0="SMLALD" item1=$xy item2=$xy item3=$cond [$smlaldX_token] type=TokenParts item0="SMLALD" item1=$xy item2=$cond [$smlal_token] type=TokenParts item0="SMLAL" item1=$cond [$smlalXY_token] type=TokenParts item0="SMLAL" item1=$xy item2=$xy item3=$cond [$smlalX_token] type=TokenParts item0="SMLAL" item1=$xy item2=$cond [$smlal_smlald_token] type=TokenOne item0=$smlald_token item1=$smlaldXY_token item2=$smlaldX_token item3=$smlal_token item4=$smlalXY_token item5=$smlalX_token [$smlald_smlal_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5="," item5type=DELIM item6=$register_core [SMLAL] type=TokenList item0=$smlal_smlald_token item0type=ASMCOM item1=$smlald_smlal_oper ;-------------------------------- ; 3.6.3 SMLA and SMLAW ;-------------------------------- [$smlawXY_token] type=TokenParts item0="SMLAW" item1=$xy item2=$xy item3=$cond [$smlawY_token] type=TokenParts item0="SMLAW" item1=$xy item2=$cond [$smlawxy_oper] type=TokenList item0=$smlawXY_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core [$smlawy_oper] type=TokenList item0=$smlawY_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core item6="," item6type=DELIM item7=$register_core [SMLAW] type=TokenOne item0=$smlawxy_oper item1=$smlawy_oper [$smlaXY_token] type=TokenParts item0="SMLA" item1=$xy item2=$xy item3=$cond [$smlaY_token] type=TokenParts item0="SMLA" item1=$xy item2=$cond [$smlaxy_oper] type=TokenList item0=$smlaXY_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core [$smlay_oper] type=TokenList item0=$smlaY_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core item6="," item6type=DELIM item7=$register_core [SMLA] type=TokenOne item0=$smlaxy_oper item1=$smlay_oper ;------------------------------ ; 3.6.6 SMLSD and SMLSLD ;------------------------------ [$X] type=PartsMayBe item0="X" [$smlsd_token] type=TokenParts item0="SMLSD" item1=$X item2$cond [$smlsld_token] type=TokenParts item0="SMLSLD" item1=$xy item2$cond [$smlsld_smlsd_token] type=TokenOne item0=$smlsd_token item1=$smlsld_token [SMLS] type=TokenList item0=$smlsld_smlsd_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core item6="," item6type=DELIM item7=$register_core ;------------------------------ ; 3.6.7 SMMLA and SMMLS ;------------------------------ [$R] type=PartsMayBe item0="R" [$smmla_token] type=TokenParts item0="SMMLA" item1=$R item2$cond [$smmls_token] type=TokenParts item0="SMMLS" item1=$R item2$cond [$smmla_smmls_token] type=TokenOne item0=$smmla_token item1=$smmls_token [SMML] type=TokenList item0=$smmla_smmls_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core item6="," item6type=DELIM item7=$register_core ;------------------------------ ; 3.6.8 SMMUL ;------------------------------ [$smmul_token] type=TokenParts item0="SMMUL" item1=$R item2=$cond [SMMUL] type=TokenList item0=$smmul_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core ;------------------------------ ; 3.6.9 SMUAD and SMUSD ;------------------------------ [$smuad_token] type=TokenParts item0="SMUAD" item1=$R item2=$cond [$smusd_token] type=TokenParts item0="SMUSD" item1=$R item2=$cond [$smuad_smusd_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [SMUAD] type=TokenList item0=$smuad_token item0type=ASMCOM item1=$smuad_smusd_oper [SMUSD] type=TokenList item0=$smusd_token item0type=ASMCOM item1=$smuad_smusd_oper ;-------------------------------- ; 3.6.11 SMULL ;-------------------------------- [$smull_token] type=TokenParts item0="SMULL" item1=$cond [SMULL] type=TokenList item0=$smull_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$register_core item6="," item6type=DELIM item7=$register_core ;-------------------------------- ; 3.6.10 SMUL and SMULW ;-------------------------------- [$smulXY_token] type=TokenParts item0="SMUL" item1=$xy item2=$xy item3=$cond [$smulwY_token] type=TokenParts item0="SMULW" item1=$xy item2=$cond [$smul_smulw_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [SMULW] type=TokenList item0=$smulwY_token item0type=ASMCOM item1=$smul_smulw_oper [SMUL] type=TokenList item0=$smulXY_token item0type=ASMCOM item1=$smul_smulw_oper ;-------------------------- ; 3.6.12 SDIV and UDIV ;-------------------------- [$udiv_token] type=TokenParts item0="UDIV" item1=$cond [$sdiv_token] type=TokenParts item0="SDIV" item1=$cond [$udiv_sdiv_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$udiv_sdiv_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$udiv_sdiv_oper] type=TokenOne item0=$udiv_sdiv_oper_3reg item1=$udiv_sdiv_oper_2reg [UDIV] type=TokenList item0=$udiv_token item0type=ASMCOM item1=$udiv_sdiv_oper [SDIV] type=TokenList item0=$sdiv_token item0type=ASMCOM item1=$udiv_sdiv_oper ;----------------------------------------------- ; 3.7 Saturating instructions ;----------------------------------------------- ;----------------------------- ; 3.7.2 SSAT16 and USAT16 ;----------------------------- [$ssat16_token] type=TokenParts item0="SSAT16" item1=$cond [$usat16_token] type=TokenParts item0="USAT16" item1=$cond [$ssat16_usat16_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$imm5 item3="," item3type=DELIM item4=$register_core [SSAT16] type=TokenList item0=$ssat16_token item0type=ASMCOM item1=$ssat16_usat16_oper [USAT16] type=TokenList item0=$usat16_token item0type=ASMCOM item1=$ssat16_usat16_oper ;----------------------------- ; 3.7.1 SSAT and USAT ;----------------------------- [$ssat_token] type=TokenParts item0="SSAT" item1=$cond [$usat_token] type=TokenParts item0="USAT" item1=$cond [$ssat_usat_shift] type=TokenOne item0="ASR" item1="LSL" item2=$\ [$ssat_usat_oper_shift_1] type=TokenList item0="," item0type=DELIM item1=$ssat_usat_shift item1type=ASMCOM item2=$imm5 [$ssat_usat_oper_shift] type=TokenMayBe item0=$ssat_usat_oper_shift_1 [$ssat_usat_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$imm5 item3="," item3type=DELIM item4=$register_core item5=$ssat_usat_oper_shift [SSAT] type=TokenList item0=$ssat_token item0type=ASMCOM item1=$ssat_usat_oper [USAT] type=TokenList item0=$usat_token item0type=ASMCOM item1=$ssat_usat_oper ;-------------------------- ; 3.7.3 QADD and QSUB ;-------------------------- [$qadd_qsub_size] type=PartsMayBe item0="8" item1="16" [$qadd_token] type=TokenParts item0="QADD" item1=$qadd_qsub_size item2=$cond [$qsub_token] type=TokenParts item0="QSUB" item1=$qadd_qsub_size item2=$cond [$qadd_qsub_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$qadd_qsub_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$qadd_qsub_oper] type=TokenOne item0=$qadd_qsub_oper_3reg item1=$qadd_qsub_oper_2reg [QADD] type=TokenList item0=$qadd_token item0type=ASMCOM item1=$qadd_qsub_oper [QSUB] type=TokenList item0=$qsub_token item0type=ASMCOM item1=$qadd_qsub_oper ;-------------------------- ; 3.7.4 QASX and QSAX ;-------------------------- [$qasx_token] type=TokenParts item0="QASX" item1=$cond [$qsax_token] type=TokenParts item0="QSAX" item1=$cond [$qasx_qsax_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$qasx_qsax_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$qasx_qsax_oper] type=TokenOne item0=$qasx_qsax_oper_3reg item1=$qasx_qsax_oper_2reg [QASX] type=TokenList item0=$qasx_token item0type=ASMCOM item1=$qasx_qsax_oper [QSAX] type=TokenList item0=$qsax_token item0type=ASMCOM item1=$qasx_qsax_oper ;-------------------------- ; 3.7.5 QDADD and QDSUB ;-------------------------- [$qdadd_token] type=TokenParts item0="QDADD" item1=$cond [$qdsub_token] type=TokenParts item0="QDSUB" item1=$cond [$qdadd_qdsub_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$qdadd_qdsub_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$qdadd_qdsub_oper] type=TokenOne item0=$qdadd_qdsub_oper_3reg item1=$qdadd_qdsub_oper_2reg [QDADD] type=TokenList item0=$qdadd_token item0type=ASMCOM item1=$qdadd_qdsub_oper [QDSUB] type=TokenList item0=$qdsub_token item0type=ASMCOM item1=$qdadd_qdsub_oper ;-------------------------- ; 3.7.6 UQASX and UQSAX ;-------------------------- [$uqasx_token] type=TokenParts item0="UQASX" item1=$cond [$uqsax_token] type=TokenParts item0="UQSAX" item1=$cond [$uqasx_uqsax_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uqasx_uqsax_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uqasx_uqsax_oper] type=TokenOne item0=$uqasx_uqsax_oper_3reg item1=$uqasx_uqsax_oper_2reg [UQASX] type=TokenList item0=$uqasx_token item0type=ASMCOM item1=$uqasx_uqsax_oper [UQSAX] type=TokenList item0=$uqsax_token item0type=ASMCOM item1=$uqasx_uqsax_oper ;-------------------------- ; 3.7.7 UQADD and UQSUB ;-------------------------- [$uqadd_token] type=TokenParts item0="UQADD" item1=$cond [$uqsub_token] type=TokenParts item0="UQSUB" item1=$cond [$uqadd_uqsub_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core [$uqadd_uqsub_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core [$uqadd_uqsub_oper] type=TokenOne item0=$uqadd_uqsub_oper_3reg item1=$uqadd_uqsub_oper_2reg [UQADD] type=TokenList item0=$uqadd_token item0type=ASMCOM item1=$uqadd_uqsub_oper [UQSUB] type=TokenList item0=$uqsub_token item0type=ASMCOM item1=$uqadd_uqsub_oper ;----------------------------------------------- ; 3.8 Packing and unpacking instructions ;----------------------------------------------- ;-------------------------------- ; 3.8.1 PKHBT and PKHTB ;-------------------------------- [$pkhbt_token] type=TokenParts item0="PKHBT" item1=$cond [$pkhbt_oper_lsl_oper] type=TokenList item0="," item0type=DELIM item1="LSL" item1type=ASMCOM item2=$imm5 [$pkhbt_oper_lsl] type=TokenMayBe item0=$pkhbt_oper_lsl_oper [$pkhbt_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5=$pkhbt_oper_lsl [$pkhbt_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3=$pkhbt_oper_lsl [$pkhbt_oper] type=TokenOne item0=$pkhbt_oper_3reg item1=$pkhbt_oper_2reg [PKHBT] type=TokenList item0=$pkhbt_token item0type=ASMCOM item1=$pkhbt_oper [$pkhtb_token] type=TokenParts item0="PKHTB" item1=$cond [$pkhtb_oper_asr_oper] type=TokenList item0="," item0type=DELIM item1="ASR" item1type=ASMCOM item2=$imm5 [$pkhtb_oper_asr] type=TokenMayBe item0=$pkhtb_oper_asr_oper [$pkhtb_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5=$pkhtb_oper_asr [$pkhtb_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3=$pkhtb_oper_asr [$pkhtb_oper] type=TokenOne item0=$pkhtb_oper_3reg item1=$pkhtb_oper_2reg [PKHTB] type=TokenList item0=$pkhtb_token item0type=ASMCOM item1=$pkhtb_oper ;-------------------------------- ; 3.8.3 SXTA and UXTA ;-------------------------------- [$sxta_uxta_size_variants] type=PartsOne item0="B16" item1="B" item2="H" [$sxta_token] type=TokenParts item0="SXTA" item1=$sxta_uxta_size_variants item2=$cond [$uxta_token] type=TokenParts item0="UXTA" item1=$sxta_uxta_size_variants item2=$cond [$sxta_uxta_oper_shift_ror] type=TokenList item0="," item0type=DELIM item1="ROR" item1type=ASMCOM item2=$imm5 [$sxta_uxta_oper_shift] type=TokenMayBe item0=$sxta_uxta_oper_shift_ror [$sxta_uxta_oper_3reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5=$sxta_uxta_oper_shift [$sxta_uxta_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3=$sxta_uxta_oper_shift [$sxta_uxta_oper] type=TokenOne item0=$sxta_uxta_oper_3reg item1=$sxta_uxta_oper_2reg [SXTA] type=TokenList item0=$sxta_token item0type=ASMCOM item1=$sxta_uxta_oper [UXTA] type=TokenList item0=$uxta_token item0type=ASMCOM item1=$sxta_uxta_oper ;-------------------------------- ; 3.8.2 SXT and UXT ;-------------------------------- [$sxt_uxt_size_variants] type=PartsOne item0="B16" item1="B" item2="H" [$sxt_token] type=TokenParts item0="SXT" item1=$sxt_uxt_size_variants item2=$cond [$uxt_token] type=TokenParts item0="UXT" item1=$sxt_uxt_size_variants item2=$cond [$sxt_uxt_oper_shift_ror] type=TokenList item0="," item0type=DELIM item1="ROR" item1type=ASMCOM item2=$imm5 [$sxt_uxt_oper_shift] type=TokenMayBe item0=$sxt_uxt_oper_shift_ror [$sxt_uxt_oper_2reg] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3=$sxt_uxt_oper_shift [$sxt_uxt_oper_1reg] type=TokenList item0=$register_core item1=$sxt_uxt_oper_shift [$sxt_uxt_oper] type=TokenOne item0=$sxt_uxt_oper_2reg item1=$sxt_uxt_oper_1reg [SXT] type=TokenList item0=$sxt_token item0type=ASMCOM item1=$sxt_uxt_oper [UXT] type=TokenList item0=$uxt_token item0type=ASMCOM item1=$sxt_uxt_oper ;----------------------------------------------- ; 3.9 Bitfield instructions ;----------------------------------------------- ;----------------------------- ; 3.9.1 BFC and BFI ;----------------------------- [$bfc_token] type=TokenParts item0="BFC" item1=$cond [BFC] type=TokenList item0=$bfc_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$imm5 item4="," item4type=DELIM item5=$imm5 [$bfi_token] type=TokenParts item0="BFI" item1=$cond [BFI] type=TokenList item0=$bfi_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_core item4="," item4type=DELIM item5=$imm5 item6="," item6type=DELIM item7=$imm5 ;------------------------------ ; 3.9.2 SBFX and UBFX ;------------------------------ [$sbfx_token] type=TokenParts item0="SBFX" item1=$cond [$ubfx_token] type=TokenParts item0="UBFX" item1=$cond [$sbfx_ubfx_oper] type=TokenList item0=$register_core item1="," item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$imm5 item5="," item5type=DELIM item6=$imm5 [SBFX] type=TokenList item0=$sbfx_token item0type=ASMCOM item1=$sbfx_ubfx_oper [UBFX] type=TokenList item0=$ubfx_token item0type=ASMCOM item1=$sbfx_ubfx_oper ;-------------------------- ; 3.9.3 SXT and UXT совпадают с 3.8.2 ;-------------------------- ;-------------------------- ; 3.9.4 Branch and control instructions ;-------------------------- ;----------------------------------------------- ; 3.9.5 B, BL, BX, BLX ;----------------------------------------------- ;----------------------------- ; BLX ;----------------------------- [$blx_oper] type=TokenParts item0="BLX" item1=$cond item2=$q [BLX] type=TokenList item0=$blx_oper item0type=ASMCOM item1=$register_core ;----------------------------- ; BL ;----------------------------- [$bl_oper] type=TokenParts item0="BL" item1=$cond item2=$q ;;----------------$\---------------------------------- [$bl_l] type=Expression min=-16777216 max=16777214 [$bl_label] type=TokenOne item0=$\ item1=$bl_l ;;--------------------------------------------------------- [BL] type=TokenList item0=$bl_oper item0type=ASMCOM item1=$bl_label ;----------------------------- ; BX ;----------------------------- [$bx_oper] type=TokenParts item0="BX" item1=$cond [BX] type=TokenList item0=$bx_oper item0type=ASMCOM item1=$register_core ;---------------------------- ; B ;---------------------------- [$b_oper] type=TokenParts item0="B" item1=$cond item2=$qw ;;----------------$\---------------------------------- [$b_l] type=Expression min=-16777216 max=16777214 [$b_label] type=TokenOne item0=$\ item1=$b_l ;;--------------------------------------------------------- [B] type=TokenList item0=$b_oper item0type=ASMCOM item1=$b_label ;----------------------------------- ; 3.9.6 CBZ and CBNZ ;----------------------------------- ;;----------------$\---------------------------------- [$cbz_cbnz_e] type=Expression min=4 max=130 [$cbz_cbnz_expression] type=TokenOne item0=$\ item1=$cbz_cbnz_e ;;--------------------------------------------------------- [CBZ] type=TokenList item0="CBZ" item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$cbz_cbnz_expression [CBNZ] type=TokenList item0="CBNZ" item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$cbz_cbnz_expression ;--------------------------- ; 3.9.7 IT ;--------------------------- [$it_te] type=PartsMayBe item0="T" item1="E" [$it_token] type=TokenParts item0="IT" item1=$it_te item2=$it_te item3=$it_te ;;;;;---------------------$\------------------------ [$c_t] type=TokenParts item0=$cond [$cond_token] type=TokenOne item0=$c_t item1=$\ ;;;;;;;;;------------------------------------------ [IT] type=TokenList item0=$it_token item0type=ASMCOM item1=$cond_token item1type=ASMCOM ;----------------------- ; 3.9.8 TBB and TBH ;----------------------- [TBB] type=TokenList item0="TBB" item0type=ASMCOM item1="[" item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5="]" item5type=DELIM [TBH] type=TokenList item0="TBH" item0type=ASMCOM item1="[" item1type=DELIM item2=$register_core item3="," item3type=DELIM item4=$register_core item5="," item5type=DELIM item6="LSL" item6type=ASMCOM item7=$imm5 item8="]" item8type=DELIM ;--------------------------------------------- ; 3.10 Floating-point instructions (для Cortex-M7 с FPv5) ;--------------------------------------------- ; [ИСПРАВЛЕНО] Используем TokenParts для сборки мнемоник с суффиксами .F32/.F64 и условиями ; [ИСПРАВЛЕНО] Введён тип регистра FPU ($register_fpu) и его варианты ($reg_fpu_single, $reg_fpu_double) ;----------------------------- ; Типы регистров FPU ;----------------------------- [$reg_fpu] type=TokenOne item0="S0" item1="S1" item2="S2" item3="S3" item4="S4" item5="S5" item6="S6" item7="S7" item8="S8" item9="S9" item10="S10" item11="S11" item12="S12" item13="S13" item14="S14" item15="S15" item16="S16" item17="S17" item18="S18" item19="S19" item20="S20" item21="S21" item22="S22" item23="S23" item24="S24" item25="S25" item26="S26" item27="S27" item28="S28" item29="S29" item30="S30" item31="S31" [$reg_fpu_double] type=TokenOne item0="D0" item1="D1" item2="D2" item3="D3" item4="D4" item5="D5" item6="D6" item7="D7" item8="D8" item9="D9" item10="D10" item11="D11" item12="D12" item13="D13" item14="D14" item15="D15" [$register_fpu_single] type=TokenOne item0=$reg_fpu item1=$\ [$register_fpu_double] type=TokenOne item0=$reg_fpu_double item1=$\ ;----------------------------- ; Списки регистров FPU ;----------------------------- [$\fpu_reglist_single] type=TokenList item0=$register_fpu_single item1="-" item2=$register_fpu_single [$\fpu_reglist_double] type=TokenList item0=$register_fpu_double item1="-" item2=$register_fpu_double ;----------------------------- ; VLDR / VSTR (загрузка/сохранение одного регистра FPU) ;----------------------------- ; Добавлена поддержка смещения [$vldr_offset] type=TokenList item0="," item0type=DELIM item1=$vldr_imm item2="]" item2type=DELIM [VLDR] type=TokenList item0=$vldr_token item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$vldr_offset ; <-- Теперь поддерживает ", #imm]" item6="]" ; <-- Для случая без смещения item6type=DELIM [VLDR.F64] type=TokenList item0=$vldr_token_f64 item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$vldr_offset item6="]" item6type=DELIM [VSTR] type=TokenList item0=$vstr_token item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$vldr_offset item6="]" item6type=DELIM [VSTR.F64] type=TokenList item0=$vstr_token_f64 item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3="[" item3type=DELIM item4=$register_core item5=$vldr_offset item6="]" item6type=DELIM ;----------------------------- ; VADD, VSUB, VMUL, VDIV (арифметика FPU) ;----------------------------- [$vadd_token] type=TokenParts item0="VADD" item1=".F32" item2=$cond [$vadd_token_f64] type=TokenParts item0="VADD" item1=".F64" item2=$cond [VADD] type=TokenList item0=$vadd_token item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single item4="," item4type=DELIM item5=$register_fpu_single [VADD.F64] type=TokenList item0=$vadd_token_f64 item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double item4="," item4type=DELIM item5=$register_fpu_double ; (Аналогично для VSUB, VMUL, VDIV - опущено для краткости, но в полном файле нужно добавить) [VSUB] type=TokenList item0="VSUB.F32" item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single item4="," item4type=DELIM item5=$register_fpu_single [VSUB.F64] type=TokenList item0="VSUB.F64" item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double item4="," item4type=DELIM item5=$register_fpu_double [VMUL] type=TokenList item0="VMUL.F32" item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single item4="," item4type=DELIM item5=$register_fpu_single [VMUL.F64] type=TokenList item0="VMUL.F64" item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double item4="," item4type=DELIM item5=$register_fpu_double [VDIV] type=TokenList item0="VDIV.F32" item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single item4="," item4type=DELIM item5=$register_fpu_single [VDIV.F64] type=TokenList item0="VDIV.F64" item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double item4="," item4type=DELIM item5=$register_fpu_double ;----------------------------- ; VCVT (конвертация) ;----------------------------- [VCVT] type=TokenList item0="VCVT" item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single [VCVT.F64] type=TokenList item0="VCVT.F64" item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double ;----------------------------- ; VFMA / VFMS (умножение с накоплением) ;----------------------------- [VFMA] type=TokenList item0="VFMA.F32" item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single item4="," item4type=DELIM item5=$register_fpu_single [VFMA.F64] type=TokenList item0="VFMA.F64" item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double item4="," item4type=DELIM item5=$register_fpu_double [VFMS] type=TokenList item0="VFMS.F32" item0type=ASMCOM item1=$register_fpu_single item2="," item2type=DELIM item3=$register_fpu_single item4="," item4type=DELIM item5=$register_fpu_single [VFMS.F64] type=TokenList item0="VFMS.F64" item0type=ASMCOM item1=$register_fpu_double item2="," item2type=DELIM item3=$register_fpu_double item4="," item4type=DELIM item5=$register_fpu_double ;----------------------------- ; VMOV (пересылка между ARM и FPU) ;----------------------------- [VMOV] type=TokenList item0="VMOV" item0type=ASMCOM item1=$cond item2=$register_fpu_single item3="," item3type=DELIM item4=$register_core [VMOV.D] type=TokenList item0="VMOV" item0type=ASMCOM item1=$cond item2=$register_fpu_double item3="," item3type=DELIM item4=$register_core item5="," item5type=DELIM item6=$register_core ;----------------------------- ; VLDM / VSTM (множественная загрузка/сохранение) ;----------------------------- [VLDM] type=TokenList item0="VLDM" item0type=ASMCOM item1=$register_core item2="!" item2type=DELIM item3="," item3type=DELIM item4="{" item4type=DELIM item5=$\fpu_reglist_single ; <-- Теперь поддерживает список item6="}" item6type=DELIM [VSTM] type=TokenList item0="VSTM" item0type=ASMCOM item1=$register_core item2="!" item2type=DELIM item3="," item3type=DELIM item4="{" item4type=DELIM item5=$\fpu_reglist_single item6="}" item6type=DELIM ;----------------------------- ; VPUSH / VPOP (стековые операции FPU) ;----------------------------- [VPUSH] type=TokenList item0="VPUSH" item0type=ASMCOM item1="{" item1type=DELIM item2=$\fpu_reglist_single item3="}" item3type=DELIM [VPOP] type=TokenList item0="VPOP" item0type=ASMCOM item1="{" item1type=DELIM item2=$\fpu_reglist_single item3="}" item3type=DELIM ;------------------------------------------------------------- ; Директивы кэша и MPU для Cortex-M7 (специфичны для H7) ;------------------------------------------------------------- [.CACHE] type=TokenList item0=".CACHE" item0type=ASMDIR item1=$register_core [.MPU] type=TokenList item0=".MPU" item0type=ASMDIR item1=$register_core ;-------------------------------------------- ; 3.11 Miscellaneous instructions ;-------------------------------------------- ;---------------------- ; 3.11.1 BKPT ;---------------------- [BKPT] type=TokenList item0="BKPT" item0type=ASMCOM item1=$imm8 ;------------------------- ; 3.11.2 CPS ;------------------------- [$cps_effect] type=PartsOne item0="IE" item1="ID" [$cps_flags] type=TokenOne item0="I" item1="F" [$cps_token] type=TokenParts item0="CPS" item1=$cps_effect [CPS] type=TokenList item0=$cps_token item0type=ASMCOM item1=$cps_flags item1type=ASMCOM ;------------------------------- ; 3.11.3 DMB ;------------------------------- [$dmb_token] type=TokenParts item0="DMB" item1=$cond [DMB] type=TokenList item0=$dmb_token item0type=ASMCOM ;---------------------------------- ; 3.11.4 DSB ;---------------------------------- [$dsb_token] type=TokenParts item0="DSB" item1=$cond [DSB] type=TokenList item0=$dsb_token item0type=ASMCOM ;-------------------------------- ; 3.11.5 ISB ;-------------------------------- [$isb_token] type=TokenParts item0="ISB" item1=$cond [ISB] type=TokenList item0=$isb_token item0type=ASMCOM ;------------------------------ ; 3.11.6 MRS ;------------------------------ [$mrs_token] type=TokenParts item0="MRS" item1=$cond [MRS] type=TokenList item0=$mrs_token item0type=ASMCOM item1=$register_core item2="," item2type=DELIM item3=$register_spec item3type=REG ;---------------------------- ; 3.11.7 MSR ;---------------------------- [$msr_token] type=TokenParts item0="MSR" item1=$cond [MSR] type=TokenList item0=$msr_token item0type=ASMCOM item1=$register_spec item1type=REG item2="," item2type=DELIM item3=$register_core ;------------------------ ; 3.11.8 NOP ;------------------------ [$nop_token] type=TokenParts item0="NOP" item1=$cond [NOP] type=TokenList item0=$nop_token item0type=ASMCOM ;------------------------ ; 3.11.9 SEV ;------------------------ [$sev_token] type=TokenParts item0="SEV" item1=$cond [SEV] type=TokenList item0=$sev_token item0type=ASMCOM ;------------------------ ; 3.11.10 SVC ;------------------------ [$svc_token] type=TokenParts item0="SVC" item1=$cond [SVC] type=TokenList item0=$svc_token item0type=ASMCOM item1=$imm8 ;------------------------ ; 3.11.11 WFE ;------------------------ [$wfe_token] type=TokenParts item0="WFE" item1=$cond [WFE] type=TokenList item0=$wfe_token item0type=ASMCOM ;------------------------ ; 3.11.12 WFI ;------------------------ [$wfi_token] type=TokenParts item0="WFI" item1=$cond [WFI] type=TokenList item0=$wfi_token item0type=ASMCOM ;;;;;;;;;;---------------------$\------------------------------------ [$reg_spec] type=TokenList item0=$register_spec item0type=REG ;;;;;;;--для подсветки названий макросов как параметр макроса------- ;[$mac_n] ;type=TokenList ;item0="M__NAME" ;item0type=ASMDIR ;;;;;;;;;;;------------------------------------------------------------ [$zap] type=TokenList item0="," item0type=DELIM ;;;------------------------------------------------------------------- [$reg_list] type=TokenList item0=$register_core item1="-" item2=$register_core [$param_list] type=TokenOne item0=$mac_n item1=$reg_list item2=$reg_spec item3=$register_core item4=$operand2_shift_token item5=$exp [$param] type=TokenList item0=$zap item1=$param_list ;;;--------------------------------------------------------------------------------- [$\SPLIT_A] type=TokenSplit item0="\" item1="A" [$\SPLIT_B] type=TokenSplit item0="\" item1="B" [$\SPLIT_C] type=TokenSplit item0="\" item1="C" [$\SPLIT_D] type=TokenSplit item0="\" item1="D" [$\SPLIT_E] type=TokenSplit item0="\" item1="E" [$\SPLIT_F] type=TokenSplit item0="\" item1="F" [$\SPLIT_G] type=TokenSplit item0="\" item1="G" [$\SPLIT_H] type=TokenSplit item0="\" item1="H" [$\SPLIT_X] type=TokenSplit item0="\" item1="X" [$\SPLIT_Y] type=TokenSplit item0="\" item1="Y" [$\SPLIT_VARIANT_MACRO] type=TokenOne item0=$\SPLIT_A item1=$\SPLIT_B item2=$\SPLIT_C item3=$\SPLIT_D item4=$\SPLIT_E item5=$\SPLIT_F item6=$\SPLIT_G item7=$\SPLIT_H item8=$\SPLIT_X item9=$\SPLIT_Y ;;;;---------------------------------------------------------------------------------------------------- [$\SPLIT_VARIANT_MACRO_TYPE] type=TokenList item0=$\SPLIT_VARIANT_MACRO item0type=EdDIR [$\PARAM_VAR] type=TokenOne item0="," item1=$\SPLIT_VARIANT_MACRO_TYPE item2=$param item3=$\ [$first_inline] type=TokenMayBe item0=$\PARAM_VAR [\] type=TokenList item0=$\SPLIT_VARIANT_MACRO item0type=ASMDIR item1=$first_inline item2=$first_inline item3=$first_inline item4=$first_inline item5=$first_inline item6=$first_inline item7=$first_inline item8=$first_inline item9=$first_inline item10=$first_inline ;;;;;;;;---------------------------------------------------------------------------------------------------- ;;;;;;;-------------------------------------------------без подсветки---------------------------------- [$param_] type=TokenMayBe item0=$param [M__] type=TokenList item0=$define_symbol item1=$param_list item2=$param_ item3=$param_ item4=$param_ item5=$param_ item6=$param_ item7=$param_ item8=$param_ item9=$param_ item10=$param_ ;;;;;;;;------------------------------------------------------------------------------------------------------- ;;;;;;;--------------------------приставка макроса без параметров-------------------------------- [M_] type=TokenList item0=$define_symbol ;;;------------------------------------------------------------------------------------------- ;;;;;;;;;---------------------------------с одним параметром-------------------------- [M1_] type=TokenList item0=$define_symbol item1=$param_list [M2_] type=TokenList item0=$define_symbol item1=$param_list item2=$param [M3_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param [M4_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param [M5_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param item5=$param [M6_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param item5=$param item6=$param [M7_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param item5=$param item6=$param item7=$param [M8_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param item5=$param item6=$param item7=$param item8=$param [M9_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param item5=$param item6=$param item7=$param item8=$param item9=$param [M10_] type=TokenList item0=$define_symbol item1=$param_list item2=$param item3=$param item4=$param item5=$param item6=$param item7=$param item8=$param item9=$param item10=$param ;;;;;;------------------------------------------macro direcrives------------------------ [$symbol_list] type=TokenOne item0="A" item1="B" item2="C" item3="D" item4="E" item5="F" item6="G" item7="H" item8="X" item9="Y" [$par_m] type=TokenList item0=$symbol_list item0type=EdDIR [$par_s] type=TokenList item0=$define_symbol item0type=DefineSymbol [$par_v] type=TokenOne item0=$par_m item1=$par_s [$PARAM_NUM] type=TokenMayBe item0=$par_v ;;;;;;;;-------------------------------------------------------------------------------------- [.MACRO] type=TokenList item0=".MACRO" item0type=ASMDIR item1=$define_symbol item1type=ASMDIR item2=$PARAM_NUM item3=$PARAM_NUM item4=$PARAM_NUM item5=$PARAM_NUM item6=$PARAM_NUM item7=$PARAM_NUM item8=$PARAM_NUM item9=$PARAM_NUM item10=$PARAM_NUM item11=$PARAM_NUM [.ENDM] type=TokenList item0=".ENDM" item0type=ASMDIR ;;;;;---------------------------------------------------------------------------------------------------