mipsasm.js 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. Language: MIPS Assembly
  3. Author: Nebuleon Fumika <[email protected]>
  4. Description: MIPS Assembly (up to MIPS32R2)
  5. Category: assembler
  6. */
  7. function(hljs) {
  8. //local labels: %?[FB]?[AT]?\d{1,2}\w+
  9. return {
  10. case_insensitive: true,
  11. aliases: ['mips'],
  12. lexemes: '\\.?' + hljs.IDENT_RE,
  13. keywords: {
  14. meta:
  15. //GNU preprocs
  16. '.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 .ltorg ',
  17. built_in:
  18. '$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 ' + // integer registers
  19. '$16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 ' + // integer registers
  20. 'zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 ' + // integer register aliases
  21. 't0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 ' + // integer register aliases
  22. 'k0 k1 gp sp fp ra ' + // integer register aliases
  23. '$f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 ' + // floating-point registers
  24. '$f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 ' + // floating-point registers
  25. 'Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi ' + // Coprocessor 0 registers
  26. 'HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId ' + // Coprocessor 0 registers
  27. 'EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ' + // Coprocessor 0 registers
  28. 'ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt ' // Coprocessor 0 registers
  29. },
  30. contains: [
  31. {
  32. className: 'keyword',
  33. begin: '\\b('+ //mnemonics
  34. // 32-bit integer instructions
  35. 'addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|' +
  36. 'bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\.hb)?|jr(\.hb)?|lbu?|lhu?|' +
  37. 'll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|' +
  38. 'multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|' +
  39. 'srlv?|subu?|sw[lr]?|xori?|wsbh|' +
  40. // floating-point instructions
  41. 'abs\.[sd]|add\.[sd]|alnv.ps|bc1[ft]l?|' +
  42. 'c\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\.[sd]|' +
  43. '(ceil|floor|round|trunc)\.[lw]\.[sd]|cfc1|cvt\.d\.[lsw]|' +
  44. 'cvt\.l\.[dsw]|cvt\.ps\.s|cvt\.s\.[dlw]|cvt\.s\.p[lu]|cvt\.w\.[dls]|' +
  45. 'div\.[ds]|ldx?c1|luxc1|lwx?c1|madd\.[sd]|mfc1|mov[fntz]?\.[ds]|' +
  46. 'msub\.[sd]|mth?c1|mul\.[ds]|neg\.[ds]|nmadd\.[ds]|nmsub\.[ds]|' +
  47. 'p[lu][lu]\.ps|recip\.fmt|r?sqrt\.[ds]|sdx?c1|sub\.[ds]|suxc1|' +
  48. 'swx?c1|' +
  49. // system control instructions
  50. 'break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|' +
  51. 'rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|' +
  52. 'tlti?u?|tnei?|wait|wrpgpr'+
  53. ')',
  54. end: '\\s'
  55. },
  56. hljs.COMMENT('[;#]', '$'),
  57. hljs.C_BLOCK_COMMENT_MODE,
  58. hljs.QUOTE_STRING_MODE,
  59. {
  60. className: 'string',
  61. begin: '\'',
  62. end: '[^\\\\]\'',
  63. relevance: 0
  64. },
  65. {
  66. className: 'title',
  67. begin: '\\|', end: '\\|',
  68. illegal: '\\n',
  69. relevance: 0
  70. },
  71. {
  72. className: 'number',
  73. variants: [
  74. {begin: '0x[0-9a-f]+'}, //hex
  75. {begin: '\\b-?\\d+'} //bare number
  76. ],
  77. relevance: 0
  78. },
  79. {
  80. className: 'symbol',
  81. variants: [
  82. {begin: '^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:'}, //GNU MIPS syntax
  83. {begin: '^\\s*[0-9]+:'}, // numbered local labels
  84. {begin: '[0-9]+[bf]' } // number local label reference (backwards, forwards)
  85. ],
  86. relevance: 0
  87. }
  88. ],
  89. illegal: '\/'
  90. };
  91. }