diff --git a/syntax/arm.vim b/syntax/arm.vim index 0bb05a3..33eb9ef 100644 --- a/syntax/arm.vim +++ b/syntax/arm.vim @@ -44,20 +44,23 @@ if version >= 508 || !exists("did_arm_syntax_inits") HiLink armRelative armOperator " Link to standard syn groups so the 'colorschemes' work - HiLink armOperator Operator - HiLink armNumber Number HiLink armComment Comment + + HiLink armOperator Operator + HiLink armNumber Constant + HiLink armString String - HiLink armIdentifier Label - HiLink armLabel Label - HiLink gasDirective PreProc - HiLink armDirective PreProc + HiLink armIdentifier Function + HiLink armLabel Function + + HiLink gasDirective Preproc + HiLink armDirective Preproc HiLink armCPreProc Identifier HiLink armRegister Type HiLink armv6Register Type - HiLink armv6Instructions Function + HiLink armv6Instructions Keyword HiLink armTodo Todo delcommand HiLink diff --git a/syntax/armv4.vim b/syntax/armv4.vim index c3da57c..2135f97 100644 --- a/syntax/armv4.vim +++ b/syntax/armv4.vim @@ -32,19 +32,22 @@ if version >= 508 || !exists("did_armv4_syntax_inits") HiLink armRelative armOperator " Link to standard syn groups so the 'colorschemes' work - HiLink armOperator Operator - HiLink armNumber Number HiLink armComment Comment + + HiLink armOperator Operator + HiLink armNumber Constant + HiLink armString String - HiLink armIdentifier Label - HiLink armLabel Label - HiLink gasDirective PreProc - HiLink armDirective PreProc + HiLink armIdentifier Function + HiLink armLabel Function + + HiLink gasDirective Preproc + HiLink armDirective Preproc HiLink armCPreProc Identifier HiLink armRegister Type - HiLink armv4Instructions Function + HiLink armv4Instructions Keyword HiLink armTodo Todo delcommand HiLink diff --git a/syntax/armv5.vim b/syntax/armv5.vim index 598cc86..0dfa8e8 100644 --- a/syntax/armv5.vim +++ b/syntax/armv5.vim @@ -33,19 +33,22 @@ if version >= 508 || !exists("did_armv5_syntax_inits") HiLink armRelative armOperator " Link to standard syn groups so the 'colorschemes' work - HiLink armOperator Operator - HiLink armNumber Number HiLink armComment Comment + + HiLink armOperator Operator + HiLink armNumber Constant + HiLink armString String - HiLink armIdentifier Label - HiLink armLabel Label - HiLink gasDirective PreProc - HiLink armDirective PreProc + HiLink armIdentifier Function + HiLink armLabel Function + + HiLink gasDirective Preproc + HiLink armDirective Preproc HiLink armCPreProc Identifier HiLink armRegister Type - HiLink armv5Instructions Function + HiLink armv5Instructions Keyword HiLink armTodo Todo delcommand HiLink diff --git a/syntax/include/arm_base_syntax.vim b/syntax/include/arm_base_syntax.vim index 93f4c00..5071578 100644 --- a/syntax/include/arm_base_syntax.vim +++ b/syntax/include/arm_base_syntax.vim @@ -5,12 +5,10 @@ syn match armNumericOp "[+-/*%<>=&|^!]" " hex syn match armNumber "[#\$]\?0x\x\+\>" -syn match armNumber "[#\$]\?\d\x*h\>" " dec syn match armNumber "[#\$]\?\d\+\>" " bin syn match armNumber "[#\$]\?0b[01]\+\>" -syn match armNumber "[#\$]\?[01]\+b\>" " floats syn match armNumber "\d*\.\d\+\>" @@ -26,16 +24,17 @@ syn region armString start="'" skip=+\\'+ end="'\|$" " Assembler identifiers/labels/directives syn match armIdentifier "\<\h\w*\>" syn match armLabel "\<\h\w*:" -syn match armLabel "\<\d\{1,3\}[:fb]" -syn match armCPreProc "^\s*#\(include\|define\|undef\|if\|ifdef\|ifndef\|elif\|else\|endif\|error\|pragma\)\>" +syn match armLabel "\<\d\{1,3\}[:fb]\>" +syn match armCPreProc "^\s*#\s*\(include\|define\|undef\|if\|ifdef\|ifndef\|elif\|else\|endif\|error\|pragma\)\>" so :p:h/gas_directives.vim so :p:h/arm_directives.vim " Registers -syn keyword armRegister R0 R1 R2 R3 R4 R5 R6 R7 R8 -syn keyword armRegister R9 R10 R11 R12 R13 R14 R15 FP SP LR PC SPSR CPSR CPSR_c CPSR_cxsf BP -syn keyword armRegister A1 A2 A3 A4 V1 V2 V3 V4 V5 V6 V7 V8 +syn match armRegister "R\%(1[0-5]\|[0-9]\)" +syn keyword armRegister FP SP LR PC SPSR CPSR CPSR_c CPSR_cxsf BP +syn match armRegister "A[1-3]" +syn match armRegister "V[1-8]" " Conditional field to avoid repetition let armCond = '\%(AL\|CC\|CS\|EQ\|GE\|GT\|HI\|HS\|LE\|LO\|LS\|LT\|MI\|NE\|PL\|VC\|VS\)\?' diff --git a/syntax/include/armv6_base_syntax.vim b/syntax/include/armv6_base_syntax.vim index 2cf15e7..f20b716 100644 --- a/syntax/include/armv6_base_syntax.vim +++ b/syntax/include/armv6_base_syntax.vim @@ -2,14 +2,8 @@ so :p:h/armv5_base_syntax.vim " VFP/NEON registers -let i = 0 -while i < 32 - exe 'syn match armv6Register "S' . i . '\>"' - exe 'syn match armv6Register "D' . i . '\>"' - let i = i + 1 -endwhile - -syn keyword armv6Register Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 +syn match armv6Register "[SD]\%(3[01]\|[12]\?[0-9]\)" +syn match armv6Register "Q\%(1[0-5]\|[0-9]\)" " " ARMv6 instructions diff --git a/test/armv4-test.s b/test/armv4-test.s index 664bec6..24bdaae 100644 --- a/test/armv4-test.s +++ b/test/armv4-test.s @@ -8,6 +8,7 @@ adc r1, r15, R14 add A1, v1, V8 +sub r5, #0xFeeDB4c smull r0, r1,R2 smull r0, r1,R2 @@ -16,5 +17,6 @@ blx 0002f smlalBt r1,r15 SMLawTb V8, v3 SMLALtb A1, a4 +1.0f 0.f .1f @ vim:ft=armv4 diff --git a/test/armv7-test.s b/test/armv7-test.s index 4d3893f..faf25bf 100644 --- a/test/armv7-test.s +++ b/test/armv7-test.s @@ -1,10 +1,17 @@ adc r0, r1 add R1, R2 +0: +sub r14, 0b1110110 +1: and R2,r3 bic r3 , r4 eor r4,r5 mla r5,R6 mov R6,R7 +b 001b + +push {r0, r1, r2-r9} +pop {r1-r14} FSHTOS @@ -15,8 +22,16 @@ fcmpezs fcmpzs fdivs -vmul Q15, Q16, d31, s31, s32, d32 vdiv vsqrt +.float 3.14159 + +@ illegal +blx 0002f +1.0f 0.f .1f +vmul Q15, Q16, d31, s31, s32, d32 +vmull q01, q09, q14, q16 +push {q0-q14} +pop {s3-s32} @ vim:ft=arm