diff --git a/README.md b/README.md index 394f964..567a523 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,122 @@ -vim-gas -======= +# VIM-GAS -Advanced syntax highlighting for GNU As +This vim bundle adds advanced syntax highlighting for GNU as (AT&T) for *86 CPUs. + +This file defines a (almost) complete syntax for GNU as assembler. + +My motivation in writing this was the lack of a complete, working syntax for this +common assembler. + +For now the basic as directives as well as the Intel / AMD instruction sets are included. +Opcodes supporting a size suffix are recognized plain as well as suffixed with b/w/l/q. + +## What does it look like? + +![screenshot here..](http://skitch-img.s3.amazonaws.com/20091121-q88xtxujgi62cby8f8cn25kxmp.png) + +## Supported instructions a per version 0.6: + +- X86 common instruction set (8086 - 686) +- Katmai Streaming SIMD instructions (SSE -- a.k.a. KNI, XMM, MMX2) +- Introduced in Deschutes but necessary for SSE support +- XSAVE group (AVX and extended state) +- Generic memory operations +- New MMX instructions introduced in Katmai +- AMD Enhanced 3DNow! (Athlon) instructions +- Willamette SSE2 Cacheability Instructions +- Willamette MMX instructions (SSE2 SIMD Integer Instructions) +- Willamette Streaming SIMD instructions (SSE2) +- Prescott New Instructions (SSE3) +- VMX Instructions +- Extended Page Tables VMX instructions +- Tejas New Instructions (SSSE3) +- AMD SSE4A +- New instructions in Barcelona +- Penryn New Instructions (SSE4.1) +- Nehalem New Instructions (SSE4.2) +- AMD SSE5 instructions +- Intel SMX +- Geode (Cyrix) 3DNow! additions +- Intel AES instructions +- Intel AVX AES instructions +- Intel AVX instructions +- Intel Carry-Less Multiplication instructions (CLMUL) +- Intel AVX Carry-Less Multiplication instructions (CLMUL) +- Intel Fused Multiply-Add instructions (FMA) +- VIA (Centaur) security instructions +- AMD XOP, FMA4 and CVT16 instructions (SSE5) +- Systematic names for the hinting nop instructions + +You can set different highlighting for each set listed above by adding a line like this to you .vimrc: + +```vim + hi def link gasOpcodeX86_PENT_SSE +``` + +## per-file opcode enable / disable + +Since version 0.6 it is possible to disable sets of opcodes by either CPU they where introduced in or by their extension name. +This is done by setting a special variable recognized by gas.vim to the list of disabled opcodes. + +E.g. + +```vim +" globally disable all x86_64 opcodes +:let g:gasDisableOpcodes='x86_64' + + +" disable SSE and SSE2 for this buffer +let b:gasDisableOpcodes='sse sse2' +``` + +Disabled opcodes will be highlighted as errors. + +recognized CPU groups: + + 186, 286, 386, 3862, 486, 8086, amd, future, ia64, katmai, nehalem, + p6, pentium_m, pentium, prescott, sandybridge, x64, x642, x86_64 + +recognized extension groups: + + base, 3dnow, mmx, mmx2, sse, sse2, sse3, ssse3, sse4.1, sse4.2, sse4a, + sse5, avx, fma, vmx + + +I hope this syntax file will be useful to other people + \- but don't blame me if it doesn't suit your needs. + +## Installation + +This syntax file can either be installed manually or by using pathogen. + +### Manual Installation + +Download gas.vim and the file to .vim/syntax/ in your home folder. +Add this line to the end of your file: + +```vim +/* vim: ft=gas : +*/ +``` + +## Installation with Git & Pathogen + +- Install [pathogen](http://www.vim.org/scripts/script.php?script_id=2332) into `~/.vim/autoload/` and add the + following line to your `~/.vimrc`: + + call pathogen#infect() + +- Make a clone of the `vim-gas` repository: + + $ mkdir -p ~/.vim/bundle + $ cd ~/.vim/bundle + $ git clone https://github.com/Shirk/vim-gas + +- OR use git submodules: + + $ git submodule add https://github.com/Shirk/vim-gas.git bundle/vim-gas + $ git submodule init + +## License ## + +BSD (3 clause) - see COPYING for details