1" Vim syntax highlighting rules for GCC match-and-simplify language.
2"
3" Copyright (C) 2018 Free Software Foundation, Inc.
4"
5" This script is free software; you can redistribute it and/or modify
6" it under the terms of the GNU General Public License as published by
7" the Free Software Foundation; either version 3, or (at your option)
8" any later version
9
10if exists("b:current_syntax")
11    finish
12endif
13
14" Some keywords have a question mark, e.g. 'convert?'
15setl isk=@,48-57,_,?
16
17syn keyword pdTodo contained TODO FIXME XXX
18
19syn keyword pdCtrl match simplify
20syn keyword pdCtrl define_predicates define_operator_list
21syn keyword pdCtrl if switch for with
22
23syn keyword pdType type
24
25syn keyword pdOp view_convert view_convert?
26               \ convert convert? convert1 convert2 convert1? convert2?
27               \ realpart imagpart
28               \ cond vec_cond vec_perm
29               \ pointer_plus pointer_diff
30               \ plus minus mult mult_highpart
31               \ trunc_div ceil_div floor_div round_div
32               \ trunc_mod ceil_mod floor_mod round_mod
33               \ rdiv exact_div
34               \ fix_trunc float negate min max abs absu
35               \ lshift rshift lrotate rrotate
36               \ bit_ior bit_xor bit_and bit_not
37               \ truth_andif truth_orif truth_and
38               \ truth_or truth_xor truth_not
39               \ lt le gt ge eq ne unordered ordered
40               \ unlt unle ungt unge uneq ltgt
41               \ addr_space_convert fixed_convert
42               \ bit_insert complex conj
43               \ reduc_max reduc_min reduc_plus
44               \ dot_prod widen_sum sad fma
45               \ widen_mult widen_mult_plus widen_mult_minus widen_lshift
46               \ vec_widen_mult_hi vec_widen_mult_lo
47               \ vec_widen_mult_even vec_widen_mult_odd
48               \ vec_unpack_hi vec_unpack_lo
49               \ vec_unpack_float_hi vec_unpack_float_lo
50               \ vec_pack_trunc vec_pack_sat vec_pack_fix_trunc
51               \ vec_widen_lshift_hi vec_widen_lshift_lo
52
53" Match commutative/single-use specifiers: :C, :c, :s, :cs, etc.
54syn match pdOpSpec  ":[CcSs]\+\>"
55
56syn match pdCapture "@@\?[a-zA-Z0-9_]\+"
57
58syn region pdComment start="/\*" end="\*/" contains=pdTodo
59
60syn region pdPreProc start="^\s*#" skip="\\$" end="$" keepend
61
62hi def link pdCtrl    Statement
63hi def link pdType    Identifier
64hi def link pdOp      Constant
65hi def link pdOpSpec  Operator
66hi def link pdCapture Special
67hi def link pdComment Comment
68hi def link pdTodo    Todo
69hi def link pdPreProc PreProc
70
71let b:current_syntax = "gcc-match"
72