comparison third_party/highlight/es/languages/armasm.js @ 157:2db6253f355d

[ThirdParty] Added highlight library for better readability on blog.
author June Park <parkjune1995@gmail.com>
date Tue, 13 Jan 2026 19:18:47 -0800
parents
children
comparison
equal deleted inserted replaced
156:cd35e600ae34 157:2db6253f355d
1 /*! `armasm` grammar compiled for Highlight.js 11.11.1 */
2 var hljsGrammar = (function () {
3 'use strict';
4
5 /*
6 Language: ARM Assembly
7 Author: Dan Panzarella <[email protected]>
8 Description: ARM Assembly including Thumb and Thumb2 instructions
9 Category: assembler
10 */
11
12 /** @type LanguageFn */
13 function armasm(hljs) {
14 // local labels: %?[FB]?[AT]?\d{1,2}\w+
15
16 const COMMENT = { variants: [
17 hljs.COMMENT('^[ \\t]*(?=#)', '$', {
18 relevance: 0,
19 excludeBegin: true
20 }),
21 hljs.COMMENT('[;@]', '$', { relevance: 0 }),
22 hljs.C_LINE_COMMENT_MODE,
23 hljs.C_BLOCK_COMMENT_MODE
24 ] };
25
26 return {
27 name: 'ARM Assembly',
28 case_insensitive: true,
29 aliases: [ 'arm' ],
30 keywords: {
31 $pattern: '\\.?' + hljs.IDENT_RE,
32 meta:
33 // GNU preprocs
34 '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '
35 // ARM directives
36 + 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',
37 built_in:
38 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ' // standard registers
39 + 'w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 ' // 32 bit ARMv8 registers
40 + 'w16 w17 w18 w19 w20 w21 w22 w23 w24 w25 w26 w27 w28 w29 w30 '
41 + 'x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 ' // 64 bit ARMv8 registers
42 + 'x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 '
43 + 'pc lr sp ip sl sb fp ' // typical regs plus backward compatibility
44 + 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 ' // more regs and fp
45 + 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 ' // coprocessor regs
46 + 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 ' // more coproc
47 + 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 ' // advanced SIMD NEON regs
48
49 // program status registers
50 + 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '
51 + 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '
52
53 // NEON and VFP registers
54 + 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '
55 + 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '
56 + 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '
57 + 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 '
58
59 + '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'
60 },
61 contains: [
62 {
63 className: 'keyword',
64 begin: '\\b(' // mnemonics
65 + 'adc|'
66 + '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'
67 + 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'
68 + 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'
69 + 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'
70 + 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'
71 + 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'
72 + 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'
73 + 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'
74 + 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'
75 + 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'
76 + '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'
77 + 'wfe|wfi|yield'
78 + ')'
79 + '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?' // condition codes
80 + '[sptrx]?' // legal postfixes
81 + '(?=\\s)' // followed by space
82 },
83 COMMENT,
84 hljs.QUOTE_STRING_MODE,
85 {
86 className: 'string',
87 begin: '\'',
88 end: '[^\\\\]\'',
89 relevance: 0
90 },
91 {
92 className: 'title',
93 begin: '\\|',
94 end: '\\|',
95 illegal: '\\n',
96 relevance: 0
97 },
98 {
99 className: 'number',
100 variants: [
101 { // hex
102 begin: '[#$=]?0x[0-9a-f]+' },
103 { // bin
104 begin: '[#$=]?0b[01]+' },
105 { // literal
106 begin: '[#$=]\\d+' },
107 { // bare number
108 begin: '\\b\\d+' }
109 ],
110 relevance: 0
111 },
112 {
113 className: 'symbol',
114 variants: [
115 { // GNU ARM syntax
116 begin: '^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:' },
117 { // ARM syntax
118 begin: '^[a-z_\\.\\$][a-z0-9_\\.\\$]+' },
119 { // label reference
120 begin: '[=#]\\w+' }
121 ],
122 relevance: 0
123 }
124 ]
125 };
126 }
127
128 return armasm;
129
130 })();
131 ;
132 export default hljsGrammar;