Skip to content

Commit c012079

Browse files
authored
[wast mode] Support some Wasm SIMD instructions
These keywords can be found at https://github.com/WebAssembly/simd/blob/master/proposals/simd/BinarySIMD.md.
1 parent dfb497c commit c012079

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

mode/wast/test.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,59 @@
138138
'[keyword i64.atomic.rmw8.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
139139
'[keyword i64.atomic.rmw16.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
140140
'[keyword i64.atomic.rmw32.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]');
141+
142+
MT('simd-instructions',
143+
'[keyword v128.load] [keyword offset]=[number 32] [keyword align]=[number 4]',
144+
'[keyword v128.store] [keyword offset]=[number 32] [keyword align]=[number 4]',
145+
'[keyword v128.const] [number 0] [number 1] [number 2] [number 3] [number 4] [number 5] [number 6] [number 7] [number 8] [number 9] [number 10] [number 11] [number 12] [number 13] [number 14] [number 15]',
146+
'[keyword i8x16.splat]',
147+
'[keyword i16x8.splat]',
148+
'[keyword i32x4.splat]',
149+
'[keyword i64x2.splat]',
150+
'[keyword f32x4.splat]',
151+
'[keyword f64x2.splat]',
152+
'[keyword i8x16.extract_lane_s] [number 1]',
153+
'[keyword i8x16.extract_lane_u] [number 1]',
154+
'[keyword i8x16.replace_lane] [number 1]',
155+
'[keyword i16x8.extract_lane_s] [number 1]',
156+
'[keyword i16x8.extract_lane_u] [number 1]',
157+
'[keyword i16x8.replace_lane] [number 1]',
158+
'[keyword i32x4.extract_lane] [number 1]',
159+
'[keyword i32x4.replace_lane] [number 1]',
160+
'[keyword i64x2.extract_lane] [number 1]',
161+
'[keyword i64x2.replace_lane] [number 1]',
162+
'[keyword f32x4.extract_lane] [number 1]',
163+
'[keyword f32x4.replace_lane] [number 1]',
164+
'[keyword f64x2.extract_lane] [number 1]',
165+
'[keyword f64x2.replace_lane] [number 1]',
166+
'[keyword v128.not]',
167+
'[keyword v128.andnot]',
168+
'[keyword v128.and]',
169+
'[keyword v128.or]',
170+
'[keyword v128.xor]',
171+
'[keyword v128.bitselect]',
172+
'[keyword i8x16.neg]',
173+
'[keyword i8x16.shl]',
174+
'[keyword i8x16.shr_s]',
175+
'[keyword i8x16.shr_u]',
176+
'[keyword i8x16.add]',
177+
'[keyword i8x16.sub]',
178+
'[keyword i16x8.add]',
179+
'[keyword i16x8.neg]',
180+
'[keyword i16x8.shl]',
181+
'[keyword i16x8.shr_s]',
182+
'[keyword i16x8.shr_u]',
183+
'[keyword i16x8.sub]',
184+
'[keyword i32x4.add]',
185+
'[keyword i32x4.neg]',
186+
'[keyword i32x4.shl]',
187+
'[keyword i32x4.shr_s]',
188+
'[keyword i32x4.shr_u]',
189+
'[keyword i32x4.sub]',
190+
'[keyword i64x2.add]',
191+
'[keyword i64x2.neg]',
192+
'[keyword i64x2.shl]',
193+
'[keyword i64x2.shr_s]',
194+
'[keyword i64x2.shr_u]',
195+
'[keyword i64x2.sub]');
141196
})();

mode/wast/wast.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
CodeMirror.defineSimpleMode('wast', {
1515
start: [
1616
{regex: /[+\-]?(?:nan(?::0x[0-9a-fA-F]+)?|infinity|inf|0x[0-9a-fA-F]+\.?[0-9a-fA-F]*p[+\/-]?\d+|\d+(?:\.\d*)?[eE][+\-]?\d*|\d+\.\d*|0x[0-9a-fA-F]+|\d+)/, token: "number"},
17-
{regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call(_indirect)?|drop|end|return(_call(_indirect)?)?|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_[su]))|i64\.(load32_[su]|store32)|[fi](32|64)\.(const|load|store)|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(a[dn]d|c[lt]z|(div|rem)_[su]|eqz?|[gl][te]_[su]|mul|ne|popcnt|rot[lr]|sh(l|r_[su])|sub|x?or)|i64\.extend_[su]_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_[su]|f(32|64)\.convert_i(32|64)_[su]|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory(\.((atomic\.(notify|wait(32|64)))|grow|size))?|type|func|param|result|local|global|module|table|start|elem|data|align|offset|import|export|i64\.atomic\.(load32_u|store32|rmw32\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)|i(32|64)\.atomic\.(load((8|16)_u)?|store(8|16)?|rmw(\.(a[dn]d|sub|x?or|(cmp)?xchg)|(8|16)\.(a[dn]d|sub|x?or|(cmp)?xchg)_u))/, token: "keyword"},
17+
{regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call(_indirect)?|drop|end|return(_call(_indirect)?)?|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_[su]))|i64\.(load32_[su]|store32)|[fi](32|64)\.(const|load|store)|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(a[dn]d|c[lt]z|(div|rem)_[su]|eqz?|[gl][te]_[su]|mul|ne|popcnt|rot[lr]|sh(l|r_[su])|sub|x?or)|i64\.extend_[su]_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_[su]|f(32|64)\.convert_i(32|64)_[su]|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory(\.((atomic\.(notify|wait(32|64)))|grow|size))?|type|func|param|result|local|global|module|table|start|elem|data|align|offset|import|export|i64\.atomic\.(load32_u|store32|rmw32\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)|i(32|64)\.atomic\.(load((8|16)_u)?|store(8|16)?|rmw(\.(a[dn]d|sub|x?or|(cmp)?xchg)|(8|16)\.(a[dn]d|sub|x?or|(cmp)?xchg)_u))|v128\.(load|store|const|not|andnot|and|or|xor|bitselect)|i(8x16|16x8|32x4|64x2)\.(shl|shr_[su])|(i(8x16|16x8|32x4|64x2)|f(32x4|64x2))\.(splat|replace_lane|neg|add|sub)|i(8x16|16x8)\.extract_lane_[su]|[fi](32x4|64x2)\.extract_lane/, token: "keyword"},
1818
{regex: /\b(anyfunc|[fi](32|64))\b/, token: "atom"},
1919
{regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/, token: "variable-2"},
2020
{regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"},

0 commit comments

Comments
 (0)