aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/CodeGenInstruction.cpp1
-rw-r--r--utils/TableGen/SubtargetEmitter.cpp2
-rw-r--r--utils/TableGen/X86RecognizableInstr.cpp125
-rw-r--r--utils/TableGen/X86RecognizableInstr.h122
-rwxr-xr-xutils/git-svn/git-llvm33
-rwxr-xr-xutils/release/build_llvm_package.bat8
-rw-r--r--utils/vscode/README18
-rw-r--r--utils/vscode/tablegen/.vscode/launch.json13
-rw-r--r--utils/vscode/tablegen/CHANGELOG.md4
-rw-r--r--utils/vscode/tablegen/README.md13
-rw-r--r--utils/vscode/tablegen/language-configuration.json30
-rw-r--r--utils/vscode/tablegen/package.json26
-rw-r--r--utils/vscode/tablegen/syntaxes/TableGen.tmLanguage132
-rw-r--r--utils/vscode/tablegen/vsc-extension-quickstart.md27
14 files changed, 411 insertions, 143 deletions
diff --git a/utils/TableGen/CodeGenInstruction.cpp b/utils/TableGen/CodeGenInstruction.cpp
index bb2ec2a64e49..f4a760990999 100644
--- a/utils/TableGen/CodeGenInstruction.cpp
+++ b/utils/TableGen/CodeGenInstruction.cpp
@@ -77,6 +77,7 @@ CGIOperandList::CGIOperandList(Record *R) : TheDef(R) {
PrintMethod = Rec->getValueAsString("PrintMethod");
OperandType = Rec->getValueAsString("OperandType");
OperandNamespace = Rec->getValueAsString("OperandNamespace");
+ EncoderMethod = Rec->getValueAsString("EncoderMethod");
} else if (Rec->isSubClassOf("Operand")) {
PrintMethod = Rec->getValueAsString("PrintMethod");
OperandType = Rec->getValueAsString("OperandType");
diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp
index 30516ef5d10d..1903f405d859 100644
--- a/utils/TableGen/SubtargetEmitter.cpp
+++ b/utils/TableGen/SubtargetEmitter.cpp
@@ -415,7 +415,7 @@ EmitStageAndOperandCycleData(raw_ostream &OS,
BypassTable += " 0, // No itinerary\n";
// For each Itinerary across all processors, add a unique entry to the stages,
- // operand cycles, and pipepine bypess tables. Then add the new Itinerary
+ // operand cycles, and pipeline bypass tables. Then add the new Itinerary
// object with computed offsets to the ProcItinLists result.
unsigned StageCount = 1, OperandCycleCount = 1;
std::map<std::string, unsigned> ItinStageMap, ItinOperandMap;
diff --git a/utils/TableGen/X86RecognizableInstr.cpp b/utils/TableGen/X86RecognizableInstr.cpp
index 4298bc5763b6..55e75763ad69 100644
--- a/utils/TableGen/X86RecognizableInstr.cpp
+++ b/utils/TableGen/X86RecognizableInstr.cpp
@@ -21,129 +21,6 @@
#include <string>
using namespace llvm;
-
-#define MRM_MAPPING \
- MAP(C0, 64) \
- MAP(C1, 65) \
- MAP(C2, 66) \
- MAP(C3, 67) \
- MAP(C4, 68) \
- MAP(C5, 69) \
- MAP(C6, 70) \
- MAP(C7, 71) \
- MAP(C8, 72) \
- MAP(C9, 73) \
- MAP(CA, 74) \
- MAP(CB, 75) \
- MAP(CC, 76) \
- MAP(CD, 77) \
- MAP(CE, 78) \
- MAP(CF, 79) \
- MAP(D0, 80) \
- MAP(D1, 81) \
- MAP(D2, 82) \
- MAP(D3, 83) \
- MAP(D4, 84) \
- MAP(D5, 85) \
- MAP(D6, 86) \
- MAP(D7, 87) \
- MAP(D8, 88) \
- MAP(D9, 89) \
- MAP(DA, 90) \
- MAP(DB, 91) \
- MAP(DC, 92) \
- MAP(DD, 93) \
- MAP(DE, 94) \
- MAP(DF, 95) \
- MAP(E0, 96) \
- MAP(E1, 97) \
- MAP(E2, 98) \
- MAP(E3, 99) \
- MAP(E4, 100) \
- MAP(E5, 101) \
- MAP(E6, 102) \
- MAP(E7, 103) \
- MAP(E8, 104) \
- MAP(E9, 105) \
- MAP(EA, 106) \
- MAP(EB, 107) \
- MAP(EC, 108) \
- MAP(ED, 109) \
- MAP(EE, 110) \
- MAP(EF, 111) \
- MAP(F0, 112) \
- MAP(F1, 113) \
- MAP(F2, 114) \
- MAP(F3, 115) \
- MAP(F4, 116) \
- MAP(F5, 117) \
- MAP(F6, 118) \
- MAP(F7, 119) \
- MAP(F8, 120) \
- MAP(F9, 121) \
- MAP(FA, 122) \
- MAP(FB, 123) \
- MAP(FC, 124) \
- MAP(FD, 125) \
- MAP(FE, 126) \
- MAP(FF, 127)
-
-// A clone of X86 since we can't depend on something that is generated.
-namespace X86Local {
- enum {
- Pseudo = 0,
- RawFrm = 1,
- AddRegFrm = 2,
- RawFrmMemOffs = 3,
- RawFrmSrc = 4,
- RawFrmDst = 5,
- RawFrmDstSrc = 6,
- RawFrmImm8 = 7,
- RawFrmImm16 = 8,
- MRMDestMem = 32,
- MRMSrcMem = 33,
- MRMSrcMem4VOp3 = 34,
- MRMSrcMemOp4 = 35,
- MRMXm = 39,
- MRM0m = 40, MRM1m = 41, MRM2m = 42, MRM3m = 43,
- MRM4m = 44, MRM5m = 45, MRM6m = 46, MRM7m = 47,
- MRMDestReg = 48,
- MRMSrcReg = 49,
- MRMSrcReg4VOp3 = 50,
- MRMSrcRegOp4 = 51,
- MRMXr = 55,
- MRM0r = 56, MRM1r = 57, MRM2r = 58, MRM3r = 59,
- MRM4r = 60, MRM5r = 61, MRM6r = 62, MRM7r = 63,
-#define MAP(from, to) MRM_##from = to,
- MRM_MAPPING
-#undef MAP
- };
-
- enum {
- OB = 0, TB = 1, T8 = 2, TA = 3, XOP8 = 4, XOP9 = 5, XOPA = 6
- };
-
- enum {
- PS = 1, PD = 2, XS = 3, XD = 4
- };
-
- enum {
- VEX = 1, XOP = 2, EVEX = 3
- };
-
- enum {
- OpSize16 = 1, OpSize32 = 2
- };
-
- enum {
- AdSize16 = 1, AdSize32 = 2, AdSize64 = 3
- };
-
- enum {
- VEX_W0 = 0, VEX_W1 = 1, VEX_WIG = 2
- };
-}
-
using namespace X86Disassembler;
/// byteFromBitsInit - Extracts a value at most 8 bits in width from a BitsInit.
@@ -890,7 +767,7 @@ void RecognizableInstr::emitDecodePath(DisassemblerTables &tables) const {
case X86Local::MRM6m: case X86Local::MRM7m:
filter = new ExtendedFilter(false, Form - X86Local::MRM0m);
break;
- MRM_MAPPING
+ X86_INSTR_MRM_MAPPING
filter = new ExactFilter(0xC0 + Form - X86Local::MRM_C0); \
break;
} // switch (Form)
diff --git a/utils/TableGen/X86RecognizableInstr.h b/utils/TableGen/X86RecognizableInstr.h
index 91ed928540c3..7fe731ec8b1c 100644
--- a/utils/TableGen/X86RecognizableInstr.h
+++ b/utils/TableGen/X86RecognizableInstr.h
@@ -24,6 +24,128 @@
namespace llvm {
+#define X86_INSTR_MRM_MAPPING \
+ MAP(C0, 64) \
+ MAP(C1, 65) \
+ MAP(C2, 66) \
+ MAP(C3, 67) \
+ MAP(C4, 68) \
+ MAP(C5, 69) \
+ MAP(C6, 70) \
+ MAP(C7, 71) \
+ MAP(C8, 72) \
+ MAP(C9, 73) \
+ MAP(CA, 74) \
+ MAP(CB, 75) \
+ MAP(CC, 76) \
+ MAP(CD, 77) \
+ MAP(CE, 78) \
+ MAP(CF, 79) \
+ MAP(D0, 80) \
+ MAP(D1, 81) \
+ MAP(D2, 82) \
+ MAP(D3, 83) \
+ MAP(D4, 84) \
+ MAP(D5, 85) \
+ MAP(D6, 86) \
+ MAP(D7, 87) \
+ MAP(D8, 88) \
+ MAP(D9, 89) \
+ MAP(DA, 90) \
+ MAP(DB, 91) \
+ MAP(DC, 92) \
+ MAP(DD, 93) \
+ MAP(DE, 94) \
+ MAP(DF, 95) \
+ MAP(E0, 96) \
+ MAP(E1, 97) \
+ MAP(E2, 98) \
+ MAP(E3, 99) \
+ MAP(E4, 100) \
+ MAP(E5, 101) \
+ MAP(E6, 102) \
+ MAP(E7, 103) \
+ MAP(E8, 104) \
+ MAP(E9, 105) \
+ MAP(EA, 106) \
+ MAP(EB, 107) \
+ MAP(EC, 108) \
+ MAP(ED, 109) \
+ MAP(EE, 110) \
+ MAP(EF, 111) \
+ MAP(F0, 112) \
+ MAP(F1, 113) \
+ MAP(F2, 114) \
+ MAP(F3, 115) \
+ MAP(F4, 116) \
+ MAP(F5, 117) \
+ MAP(F6, 118) \
+ MAP(F7, 119) \
+ MAP(F8, 120) \
+ MAP(F9, 121) \
+ MAP(FA, 122) \
+ MAP(FB, 123) \
+ MAP(FC, 124) \
+ MAP(FD, 125) \
+ MAP(FE, 126) \
+ MAP(FF, 127)
+
+// A clone of X86 since we can't depend on something that is generated.
+namespace X86Local {
+ enum {
+ Pseudo = 0,
+ RawFrm = 1,
+ AddRegFrm = 2,
+ RawFrmMemOffs = 3,
+ RawFrmSrc = 4,
+ RawFrmDst = 5,
+ RawFrmDstSrc = 6,
+ RawFrmImm8 = 7,
+ RawFrmImm16 = 8,
+ MRMDestMem = 32,
+ MRMSrcMem = 33,
+ MRMSrcMem4VOp3 = 34,
+ MRMSrcMemOp4 = 35,
+ MRMXm = 39,
+ MRM0m = 40, MRM1m = 41, MRM2m = 42, MRM3m = 43,
+ MRM4m = 44, MRM5m = 45, MRM6m = 46, MRM7m = 47,
+ MRMDestReg = 48,
+ MRMSrcReg = 49,
+ MRMSrcReg4VOp3 = 50,
+ MRMSrcRegOp4 = 51,
+ MRMXr = 55,
+ MRM0r = 56, MRM1r = 57, MRM2r = 58, MRM3r = 59,
+ MRM4r = 60, MRM5r = 61, MRM6r = 62, MRM7r = 63,
+#define MAP(from, to) MRM_##from = to,
+ X86_INSTR_MRM_MAPPING
+#undef MAP
+ };
+
+ enum {
+ OB = 0, TB = 1, T8 = 2, TA = 3, XOP8 = 4, XOP9 = 5, XOPA = 6
+ };
+
+ enum {
+ PS = 1, PD = 2, XS = 3, XD = 4
+ };
+
+ enum {
+ VEX = 1, XOP = 2, EVEX = 3
+ };
+
+ enum {
+ OpSize16 = 1, OpSize32 = 2
+ };
+
+ enum {
+ AdSize16 = 1, AdSize32 = 2, AdSize64 = 3
+ };
+
+ enum {
+ VEX_W0 = 0, VEX_W1 = 1, VEX_WIG = 2
+ };
+}
+
namespace X86Disassembler {
/// RecognizableInstr - Encapsulates all information required to decode a single
diff --git a/utils/git-svn/git-llvm b/utils/git-svn/git-llvm
index c2eaa5b6e640..55d3129c4a82 100755
--- a/utils/git-svn/git-llvm
+++ b/utils/git-svn/git-llvm
@@ -205,21 +205,26 @@ def fix_eol_style_native(rev, sr, svn_sr_path):
# Use ignore_errors because 'svn propget' prints errors if the file doesn't
# have the named property. There doesn't seem to be a way to suppress that.
eol_props = svn(svn_sr_path, 'propget', 'svn:eol-style', *files,
- ignore_errors=True).split('\n')
+ ignore_errors=True)
crlf_files = []
- for eol_prop in eol_props:
- # Remove spare CR.
- eol_prop = eol_prop.strip('\r')
- if not eol_prop:
- continue
- prop_parts = eol_prop.rsplit(' - ', 1)
- if len(prop_parts) != 2:
- eprint("unable to parse svn propget line:")
- eprint(eol_prop)
- continue
- (f, eol_style) = prop_parts
- if eol_style == 'native':
- crlf_files.append(f)
+ if len(files) == 1:
+ # No need to split propget output on ' - ' when we have one file.
+ if eol_props.strip() == 'native':
+ crlf_files = files
+ else:
+ for eol_prop in eol_props.split('\n'):
+ # Remove spare CR.
+ eol_prop = eol_prop.strip('\r')
+ if not eol_prop:
+ continue
+ prop_parts = eol_prop.rsplit(' - ', 1)
+ if len(prop_parts) != 2:
+ eprint("unable to parse svn propget line:")
+ eprint(eol_prop)
+ continue
+ (f, eol_style) = prop_parts
+ if eol_style == 'native':
+ crlf_files.append(f)
# Reformat all files with native SVN line endings to Unix format. SVN knows
# files with native line endings are text files. It will commit just the
# diff, and not a mass line ending change.
diff --git a/utils/release/build_llvm_package.bat b/utils/release/build_llvm_package.bat
index eca74347cf3e..79871781211a 100755
--- a/utils/release/build_llvm_package.bat
+++ b/utils/release/build_llvm_package.bat
@@ -10,7 +10,8 @@ REM Prerequisites:
REM
REM Visual Studio 2017, CMake, Ninja, SVN, GNUWin32, SWIG, Python 3,
REM NSIS with the strlen_8192 patch,
-REM Visual Studio 2017 SDK (for the clang-format plugin).
+REM Visual Studio 2017 SDK and Nuget (for the clang-format plugin),
+REM Perl (for the OpenMP run-time).
REM
REM
REM For LLDB, SWIG version <= 3.0.8 needs to be used to work around
@@ -20,9 +21,8 @@ REM https://github.com/swig/swig/issues/769
REM You need to modify the paths below:
set vsdevcmd=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat
-set python32_dir=C:\Users\hwennborg\AppData\Local\Programs\Python\Python35-32
-set python64_dir=C:\Users\hwennborg\AppData\Local\Programs\Python\Python35
-set PATH=%PATH%;c:\gnuwin32\bin
+set python32_dir=C:\Users\%USER%\AppData\Local\Programs\Python\Python35-32
+set python64_dir=C:\Users\%USER%\AppData\Local\Programs\Python\Python35
set revision=%1
set branch=trunk
diff --git a/utils/vscode/README b/utils/vscode/README
new file mode 100644
index 000000000000..6febb5e3c100
--- /dev/null
+++ b/utils/vscode/README
@@ -0,0 +1,18 @@
+This directory contains a "bundle" for doing syntax highlighting of TableGen
+files for the Microsoft VSCode editor. The highlighting follows that done by
+the TextMate "C" bundle as it is a translation of the textmate bundle to VSCode
+using the "yo code" npm package. Currently, keywords, comments, and strings are
+highlighted.
+
+This colorizer was generate by the vscode-generator tool "Yo Code"
+(https://github.com/Microsoft/vscode-generator-code) from the existing TableGen
+text TableGen.tmLanguage syntax colorizer in utils/textmate. This README was
+copied from utils/textmate/README.
+
+To install this VSCode .td file colorizer, copy it to the following locations
+per your Operating System:
+
+ - Windows: %USERPROFILE%\.vscode\extensions
+ - Mac: ~/.vscode/extensions
+ - Linux: ~/.vscode/extensions
+
diff --git a/utils/vscode/tablegen/.vscode/launch.json b/utils/vscode/tablegen/.vscode/launch.json
new file mode 100644
index 000000000000..8384213de75f
--- /dev/null
+++ b/utils/vscode/tablegen/.vscode/launch.json
@@ -0,0 +1,13 @@
+// A launch configuration that launches the extension inside a new window
+{
+ "version": "0.1.0",
+ "configurations": [
+ {
+ "name": "Launch Extension",
+ "type": "extensionHost",
+ "request": "launch",
+ "runtimeExecutable": "${execPath}",
+ "args": ["--extensionDevelopmentPath=${workspaceRoot}" ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/utils/vscode/tablegen/CHANGELOG.md b/utils/vscode/tablegen/CHANGELOG.md
new file mode 100644
index 000000000000..4cedbb953a97
--- /dev/null
+++ b/utils/vscode/tablegen/CHANGELOG.md
@@ -0,0 +1,4 @@
+# Change Log
+
+- Initial release
+
diff --git a/utils/vscode/tablegen/README.md b/utils/vscode/tablegen/README.md
new file mode 100644
index 000000000000..e726004edf78
--- /dev/null
+++ b/utils/vscode/tablegen/README.md
@@ -0,0 +1,13 @@
+# tablegen README
+
+This VSCode colorizer extension is a translation of the textmate bunble to
+VSCode using the "yo code" npm package. Currently, keywords, comments, and
+strings are highlighted.
+
+To install this VSCode .td file colorizer, copy it to the following locations
+per your Operating System:
+
+ - Windows: %USERPROFILE%\.vscode\extensions
+ - Mac: ~/.vscode/extensions
+ - Linux: ~/.vscode/extensions
+
diff --git a/utils/vscode/tablegen/language-configuration.json b/utils/vscode/tablegen/language-configuration.json
new file mode 100644
index 000000000000..aa2571000769
--- /dev/null
+++ b/utils/vscode/tablegen/language-configuration.json
@@ -0,0 +1,30 @@
+{
+ "comments": {
+ // symbol used for single line comment. Remove this entry if your language does not support line comments
+ "lineComment": "//",
+ // symbols used for start and end a block comment. Remove this entry if your language does not support block comments
+ "blockComment": [ "/*", "*/" ]
+ },
+ // symbols used as brackets
+ "brackets": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"]
+ ],
+ // symbols that are auto closed when typing
+ "autoClosingPairs": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"],
+ ["\"", "\""],
+ ["'", "'"]
+ ],
+ // symbols that that can be used to surround a selection
+ "surroundingPairs": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"],
+ ["\"", "\""],
+ ["'", "'"]
+ ]
+} \ No newline at end of file
diff --git a/utils/vscode/tablegen/package.json b/utils/vscode/tablegen/package.json
new file mode 100644
index 000000000000..efd32accf139
--- /dev/null
+++ b/utils/vscode/tablegen/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "tablegen",
+ "displayName": "TableGen",
+ "description": "VSCode Language Colorizer for LLVM's TableGen language.",
+ "version": "0.0.1",
+ "publisher": "llvm",
+ "engines": {
+ "vscode": "^1.12.0"
+ },
+ "categories": [
+ "Languages"
+ ],
+ "contributes": {
+ "languages": [{
+ "id": "tablegen",
+ "aliases": ["TableGen", "tablegen"],
+ "extensions": [".td"],
+ "configuration": "./language-configuration.json"
+ }],
+ "grammars": [{
+ "language": "tablegen",
+ "scopeName": "source.tablegen",
+ "path": "./syntaxes/TableGen.tmLanguage"
+ }]
+ }
+} \ No newline at end of file
diff --git a/utils/vscode/tablegen/syntaxes/TableGen.tmLanguage b/utils/vscode/tablegen/syntaxes/TableGen.tmLanguage
new file mode 100644
index 000000000000..f3cf2d618fd5
--- /dev/null
+++ b/utils/vscode/tablegen/syntaxes/TableGen.tmLanguage
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>fileTypes</key>
+ <array><string>td</string></array>
+ <key>foldingStartMarker</key>
+ <string>/\*\*|\{\s*$</string>
+ <key>foldingStopMarker</key>
+ <string>\*\*/|^\s*\}</string>
+ <key>name</key>
+ <string>TableGen</string>
+ <key>patterns</key>
+ <array>
+ <dict>
+ <key>include</key>
+ <string>#comments</string>
+ </dict>
+ <dict>
+ <key>match</key>
+ <string>\b(def|let|in|code|dag|string|list|bits|bit|field|include|defm|foreach|class|multiclass|int)\b</string>
+ <key>name</key>
+ <string>keyword.control.tablegen</string>
+ </dict>
+ <dict>
+ <key>begin</key>
+ <string>"</string>
+ <key>end</key>
+ <string>"</string>
+ <key>name</key>
+ <string>string.quoted.double.untitled</string>
+ <key>patterns</key>
+ <array>
+ <dict>
+ <key>match</key>
+ <string>\\.</string>
+ <key>name</key>
+ <string>constant.character.escape.tablegen</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ <key>repository</key>
+ <dict>
+ <key>comments</key>
+ <dict>
+ <key>patterns</key>
+ <array>
+ <dict>
+ <key>captures</key>
+ <dict>
+ <key>1</key>
+ <dict>
+ <key>name</key>
+ <string>meta.toc-list.banner.block.tablegen</string>
+ </dict>
+ </dict>
+ <key>match</key>
+ <string>^/\* =(\s*.*?)\s*= \*/$\n?</string>
+ <key>name</key>
+ <string>comment.block.tablegen</string>
+ </dict>
+ <dict>
+ <key>begin</key>
+ <string>/\*</string>
+ <key>captures</key>
+ <dict>
+ <key>0</key>
+ <dict>
+ <key>name</key>
+ <string>punctuation.definition.comment.tablegen</string>
+ </dict>
+ </dict>
+ <key>end</key>
+ <string>\*/</string>
+ <key>name</key>
+ <string>comment.block.tablegen</string>
+ </dict>
+ <dict>
+ <key>match</key>
+ <string>\*/.*\n</string>
+ <key>name</key>
+ <string>invalid.illegal.stray-comment-end.tablegen</string>
+ </dict>
+ <dict>
+ <key>captures</key>
+ <dict>
+ <key>1</key>
+ <dict>
+ <key>name</key>
+ <string>meta.toc-list.banner.line.tablegen</string>
+ </dict>
+ </dict>
+ <key>match</key>
+ <string>^// =(\s*.*?)\s*=\s*$\n?</string>
+ <key>name</key>
+ <string>comment.line.banner.tablegen</string>
+ </dict>
+ <dict>
+ <key>begin</key>
+ <string>//</string>
+ <key>beginCaptures</key>
+ <dict>
+ <key>0</key>
+ <dict>
+ <key>name</key>
+ <string>punctuation.definition.comment.tablegen</string>
+ </dict>
+ </dict>
+ <key>end</key>
+ <string>$\n?</string>
+ <key>name</key>
+ <string>comment.line.double-slash.tablegen</string>
+ <key>patterns</key>
+ <array>
+ <dict>
+ <key>match</key>
+ <string>(?&gt;\\\s*\n)</string>
+ <key>name</key>
+ <string>punctuation.separator.continuation.tablegen</string>
+ </dict>
+ </array>
+ </dict>
+ </array>
+ </dict>
+ </dict>
+ <key>scopeName</key>
+ <string>source.tablegen</string>
+ <key>uuid</key>
+ <string>3A090BFC-E74B-4993-8DAE-7CCF6D238A32</string>
+</dict>
+</plist>
diff --git a/utils/vscode/tablegen/vsc-extension-quickstart.md b/utils/vscode/tablegen/vsc-extension-quickstart.md
new file mode 100644
index 000000000000..abfbfdb70214
--- /dev/null
+++ b/utils/vscode/tablegen/vsc-extension-quickstart.md
@@ -0,0 +1,27 @@
+# Welcome to your VS Code Extension
+
+## What's in the folder
+* This folder contains all of the files necessary for your extension
+* `package.json` - this is the manifest file in which you declare your language support and define
+the location of the grammar file that has been copied into you extension.
+* `syntaxes/TableGen.tmLanguage` - this is the Text mate grammar file that is used for tokenization
+* `language-configuration.json` - this the language configuration, defining the tokens that are used for
+comments and brackets.
+
+## Get up and running straight away
+* Make sure the language configuration settings in `language-configuration.json` are accurate
+* press `F5` to open a new window with your extension loaded
+* create a new file with a file name suffix matching your language
+* verify that syntax highlight works and that the language configuration settings are working
+
+## Make changes
+* you can relaunch the extension from the debug toolbar after making changes to the files listed above
+* you can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes
+
+## Add more language features
+* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at
+https://code.visualstudio.com/docs
+
+## Install your extension
+* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.
+* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. \ No newline at end of file