CINXE.COM

Introduction — ppci 0.5.9 documentation

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Introduction &#8212; ppci 0.5.9 documentation</title> <link rel="stylesheet" href="_static/alabaster.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/graphviz.css" /> <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/language_data.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Quickstart" href="quickstart.html" /> <link rel="stylesheet" href="_static/custom.css" type="text/css" /> <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" /> <!-- RTD Extra Head --> <!-- Always link to the latest version, as canonical. http://docs.readthedocs.org/en/latest/canonical.html --> <link rel="canonical" href="https://ppci.readthedocs.io/en/latest/" /> <script type="text/javascript" src="_static/readthedocs-data.js"></script> <!-- Add page-specific data, which must exist in the page js, not global --> <script type="text/javascript"> READTHEDOCS_DATA['page'] = "index" READTHEDOCS_DATA['source_suffix'] = ".rst" </script> <!-- end RTD <extrahead> --> <script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script><meta name="readthedocs-project-slug" content="ppci" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/" /><meta name="readthedocs-http-status" content="200" /></head><body> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body" role="main"> <div class="section" id="introduction"> <h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">露</a></h1> <p>The ppci (pure python compiler infrastructure) project is a compiler written entirely in python.</p> <p>The project contains:</p> <ul class="simple"> <li>A set of <a class="reference internal" href="reference/cli.html#commandline"><span class="std std-ref">command line utilities</span></a>, such as ppci-cc and ppci-ld.</li> <li>A <a class="reference internal" href="reference/api.html#api"><span class="std std-ref">pythonic api</span></a></li> <li><dl class="first docutils"> <dt>Language front-ends:</dt> <dd><ul class="first last"> <li><a class="reference internal" href="reference/lang/c.html"><span class="doc">C</span></a></li> <li><a class="reference internal" href="reference/lang/python.html"><span class="doc">Python</span></a></li> <li><a class="reference internal" href="reference/lang/bf.html"><span class="doc">Brainfuck</span></a></li> <li><a class="reference internal" href="reference/lang/pascal.html"><span class="doc">Pascal</span></a></li> <li><a class="reference internal" href="reference/lang/c3.html"><span class="doc">c3</span></a></li> <li><a class="reference internal" href="reference/lang/fortran.html"><span class="doc">Fortran</span></a></li> <li><a class="reference internal" href="reference/lang/basic.html"><span class="doc">Basic</span></a></li> </ul> </dd> </dl> </li> <li><dl class="first docutils"> <dt>Backends for various target architectures:</dt> <dd><ul class="first last"> <li><a class="reference internal" href="reference/backends/mcs6500.html#mcs6500"><span class="std std-ref">6500</span></a>, <a class="reference internal" href="reference/backends/arm.html#arm"><span class="std std-ref">arm</span></a>, <a class="reference internal" href="reference/backends/avr.html#avr"><span class="std std-ref">avr</span></a>, <a class="reference internal" href="reference/backends/m68k.html#m68k"><span class="std std-ref">m68k</span></a>, <a class="reference internal" href="reference/backends/microblaze.html#microblaze"><span class="std std-ref">Microblaze</span></a></li> <li><a class="reference internal" href="reference/backends/msp430.html#msp430"><span class="std std-ref">msp430</span></a>, <a class="reference internal" href="reference/backends/or1k.html#or1k"><span class="std std-ref">Open risc</span></a>, <a class="reference internal" href="reference/backends/riscv.html#riscv"><span class="std std-ref">ricv-v</span></a>, <a class="reference internal" href="reference/backends/stm8.html#stm8"><span class="std std-ref">stm8</span></a></li> <li><a class="reference internal" href="reference/backends/x86.html#x86-64"><span class="std std-ref">x86_64</span></a>, <a class="reference internal" href="reference/backends/xtensa.html#xtensa"><span class="std std-ref">xtensa</span></a></li> </ul> </dd> </dl> </li> <li><dl class="first docutils"> <dt>Support for:</dt> <dd><ul class="first last"> <li><a class="reference internal" href="reference/wasm.html#wasm"><span class="std std-ref">WebAssembly</span></a></li> <li><a class="reference internal" href="reference/lang/java.html#jvm"><span class="std std-ref">java JVM</span></a></li> <li><a class="reference internal" href="reference/lang/ocaml.html#ocaml"><span class="std std-ref">OCaml bytecode</span></a></li> </ul> </dd> </dl> </li> <li><dl class="first docutils"> <dt>Support for various file formats:</dt> <dd><ul class="first last"> <li><a class="reference internal" href="reference/format/hexfile.html#hexfile"><span class="std std-ref">hexfile</span></a></li> <li><a class="reference internal" href="reference/format/srecord.html#srecord"><span class="std std-ref">s-records</span></a></li> <li><a class="reference internal" href="reference/format/elf.html#elf"><span class="std std-ref">ELF files</span></a></li> <li><a class="reference internal" href="reference/format/exe.html#exe"><span class="std std-ref">exe files</span></a></li> </ul> </dd> </dl> </li> <li>A simple <a class="reference internal" href="reference/ir/ir.html#ir"><span class="std std-ref">intermediate language</span></a></li> <li>Machine independent <a class="reference internal" href="reference/codegen/index.html#codegen"><span class="std std-ref">code generation algorithms</span></a> for register allocation and instruction selection</li> <li>A simple way to <a class="reference internal" href="compiler/specificationlang.html#encoding"><span class="std std-ref">describe an instruction set</span></a></li> </ul> <p>An example of <a class="reference internal" href="reference/cli.html#commandline"><span class="std std-ref">command-line</span></a> usage:</p> <div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span>$ cd examples/linux64/hello-make $ ppci-cc -c -O1 -o hello.o hello.c ... $ ppci-ld --entry main --layout linux64.ld hello.o -o hello ... $ ./hello Hello, World! </pre></div> </div> <p>An example usage of the <a class="reference internal" href="reference/api.html"><span class="doc">library API</span></a>:</p> <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">io</span> <span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">ppci.api</span> <span class="kn">import</span> <span class="n">cc</span><span class="p">,</span> <span class="n">link</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">source_file</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">StringIO</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span> <span class="gp">... </span><span class="s2"> int printf(char* fmt) { }</span> <span class="gp">...</span><span class="s2"></span> <span class="gp">... </span><span class="s2"> void main() {</span> <span class="gp">... </span><span class="s2"> printf(&quot;Hello world!</span><span class="se">\n</span><span class="s2">&quot;);</span> <span class="gp">... </span><span class="s2"> }</span> <span class="gp">... </span><span class="s2">&quot;&quot;&quot;</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">obj</span> <span class="o">=</span> <span class="n">cc</span><span class="p">(</span><span class="n">source_file</span><span class="p">,</span> <span class="s1">&#39;arm&#39;</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">obj</span> <span class="o">=</span> <span class="n">link</span><span class="p">([</span><span class="n">obj</span><span class="p">])</span> </pre></div> </div> <p>Moving to the assembly level:</p> <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">io</span> <span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">ppci.api</span> <span class="kn">import</span> <span class="n">asm</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">source_file</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">StringIO</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;section code</span> <span class="gp">... </span><span class="s2">pop rbx</span> <span class="gp">... </span><span class="s2">push r10</span> <span class="gp">... </span><span class="s2">mov rdi, 42&quot;&quot;&quot;</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">obj</span> <span class="o">=</span> <span class="n">asm</span><span class="p">(</span><span class="n">source_file</span><span class="p">,</span> <span class="s1">&#39;x86_64&#39;</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">obj</span><span class="o">.</span><span class="n">get_section</span><span class="p">(</span><span class="s1">&#39;code&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">data</span> <span class="go">bytearray(b&#39;[ARH\xbf*\x00\x00\x00\x00\x00\x00\x00&#39;)</span> </pre></div> </div> <p>Or even lower level:</p> <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">ppci.arch.x86_64</span> <span class="kn">import</span> <span class="n">instructions</span><span class="p">,</span> <span class="n">registers</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">i</span> <span class="o">=</span> <span class="n">instructions</span><span class="o">.</span><span class="n">Pop</span><span class="p">(</span><span class="n">registers</span><span class="o">.</span><span class="n">rbx</span><span class="p">)</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">i</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span> <span class="go">b&#39;[&#39;</span> </pre></div> </div> <div class="admonition warning"> <p class="first admonition-title">Warning</p> <p class="last">This project is in alpha state and not ready for production use!</p> </div> </div> <div class="section" id="table-of-contents"> <h1>Table of contents<a class="headerlink" href="#table-of-contents" title="Permalink to this headline">露</a></h1> <div class="toctree-wrapper compound"> <ul class="current"> <li class="toctree-l1 current"><a class="current reference internal" href="#">Introduction</a></li> <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a><ul> <li class="toctree-l2"><a class="reference internal" href="quickstart.html#installation">Installation</a><ul> <li class="toctree-l3"><a class="reference internal" href="quickstart.html#using-pip">Using pip</a></li> <li class="toctree-l3"><a class="reference internal" href="quickstart.html#manually">Manually</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="quickstart.html#compile-some-code">Compile some code!</a></li> <li class="toctree-l2"><a class="reference internal" href="quickstart.html#example-projects">Example projects</a></li> <li class="toctree-l2"><a class="reference internal" href="quickstart.html#next-steps">Next steps</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="howto/index.html">Howto</a><ul> <li class="toctree-l2"><a class="reference internal" href="howto/toy.html">Creating a toy language</a><ul> <li class="toctree-l3"><a class="reference internal" href="howto/toy.html#part-0-preparation">Part 0 - preparation</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/toy.html#part-1-textx">Part 1 - textx</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/toy.html#part-2-connecting-the-backend">Part 2 - connecting the backend</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/toy.html#part-3-translating-the-elements">Part 3 - translating the elements</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/toy.html#part-4-creating-a-linux-executable">Part 4 - Creating a linux executable</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/toy.html#final-words">Final words</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="howto/backend.html">How to write a new backend</a><ul> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#register-description">Register description</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#tokens">Tokens</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#instruction-description">Instruction description</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#relocations">Relocations</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#instruction-groups">Instruction groups</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#instruction-selection-patterns">Instruction selection patterns</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/backend.html#architecture-description">Architecture description</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="howto/optimizer.html">How to write an optimizer</a><ul> <li class="toctree-l3"><a class="reference internal" href="howto/optimizer.html#the-optimization">The optimization</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/optimizer.html#the-implementation">The implementation</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="howto/jitting.html">JITting</a><ul> <li class="toctree-l3"><a class="reference internal" href="howto/jitting.html#c-way">C-way</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/jitting.html#python-way">Python-way</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/jitting.html#calling-python-functions-from-native-code">Calling Python functions from native code</a></li> <li class="toctree-l3"><a class="reference internal" href="howto/jitting.html#benchmarking-and-call-overheads">Benchmarking and call overheads</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="howto/webassembly.html">Dealing with webassembly</a><ul> <li class="toctree-l3"><a class="reference internal" href="howto/webassembly.html#compiling-wasm-to-native-code">Compiling wasm to native code</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="howto/instrumentation.html">Code instrumentation</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a><ul> <li class="toctree-l2"><a class="reference internal" href="reference/api.html">Api</a></li> <li class="toctree-l2"><a class="reference internal" href="reference/programs.html">Program classes</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/programs.html#base-program-classes">Base program classes</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/programs.html#source-code-programs">Source code programs</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/programs.html#intermediate-programs">Intermediate programs</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/programs.html#machine-code-programs">Machine code programs</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/cli.html">Command line tools</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-c3c">ppci-c3c</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-build">ppci-build</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-archive">ppci-archive</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-asm">ppci-asm</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-ld">ppci-ld</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-objcopy">ppci-objcopy</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-objdump">ppci-objdump</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-opt">ppci-opt</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-cc">ppci-cc</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-pascal">ppci-pascal</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-pycompile">ppci-pycompile</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-readelf">ppci-readelf</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-wasmcompile">ppci-wasmcompile</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-yacc">ppci-yacc</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-wasm2wat">ppci-wasm2wat</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-wat2wasm">ppci-wat2wasm</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-wabt">ppci-wabt</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-ocaml">ppci-ocaml</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-java">ppci-java</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-hexutil">ppci-hexutil</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/cli.html#ppci-hexdump">ppci-hexdump</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/lang/index.html">Languages</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/lang/basic.html">Basic</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/bf.html">Brainfuck</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/c3.html">C3 language</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/c.html">C compiler</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/fortran.html">Fortran</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/java.html">Java</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/llvm.html">Llvm</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/ocaml.html">OCaml</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/pascal.html">Pascal</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/python.html">Python compilation</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/sexpr.html">S-expressions</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/lang/tools.html">Language tools</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/binutils/index.html">Binary utilities</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/binutils/linker.html">Linker</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/binutils/archive.html">Object archiver</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/binutils/layout.html">Memory layout</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/binutils/objectformat.html">Object format</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/buildxml.html">Build system</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/buildxml.html#projects">Projects</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/buildxml.html#targets">Targets</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/buildxml.html#tasks">Tasks</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/ir/index.html">IR</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/ir/ir.html">IR-code</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/ir/irutils.html">Utilities</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/ir/json.html">JSON serialization</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/ir/text.html">Textual format</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/ir/verify.html">Validation</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/optimization.html">Optimization</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/optimization.html#abstract-base-classes">Abstract base classes</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/optimization.html#optimization-passes">Optimization passes</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/optimization.html#uml">Uml</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/codegen/index.html">Code generation</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/codegen/index.html#back-end">Back-end</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/debug.html">Debug</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/debug.html#debugger">Debugger</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/debug.html#debug-info-file-formats">Debug info file formats</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/backends/index.html">Backends</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/backends/index.html#status">Status</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/backends/index.html#backend-details">Backend details</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/format/index.html">File formats</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/format/elf.html">Elf</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/format/exe.html">Exe files</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/format/dwarf.html">Dwarf</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/format/hexfile.html">Hexfile manipulation</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/format/hunk.html">Hunk amiga files</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/format/uboot.html">uboot image files</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/format/srecord.html">S-record</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/wasm.html">Web Assembly</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/wasm.html#creating-a-wasm-module">Creating a wasm module</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/wasm.html#exporting-a-wasm-module">Exporting a wasm module</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/wasm.html#running-wasm">Running wasm</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/wasm.html#converting-between-wasm-and-ir">Converting between wasm and ir</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/wasm.html#module-ppci.wasm">Module reference</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/utils/index.html">Utilities</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/utils/leb128.html">leb128</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/utils/hexdump.html">Hexdump</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/utils/codepage.html">Codepage</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/utils/reporting.html">Reporting</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/graph/index.html">Graph</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/graph/cfg.html">Control flow graph</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/graph/graph.html">Graphs</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/graph/relooping.html">Finding loops</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/graph/calltree.html">Calltree</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="reference/links.html">Links</a><ul> <li class="toctree-l3"><a class="reference internal" href="reference/links.html#classical-compilers">Classical compilers</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/links.html#other-compilers">Other compilers</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/links.html#other-compilers-written-in-python">Other compilers written in python</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/links.html#other-c-related-tools-written-in-python">Other C-related tools written in python</a></li> <li class="toctree-l3"><a class="reference internal" href="reference/links.html#citations">Citations</a></li> </ul> </li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="compiler.html">Compiler internals</a><ul> <li class="toctree-l2"><a class="reference internal" href="compiler/specificationlang.html">Specification languages</a><ul> <li class="toctree-l3"><a class="reference internal" href="compiler/specificationlang.html#introduction">Introduction</a></li> <li class="toctree-l3"><a class="reference internal" href="compiler/specificationlang.html#design">Design</a></li> <li class="toctree-l3"><a class="reference internal" href="compiler/specificationlang.html#background">Background</a></li> <li class="toctree-l3"><a class="reference internal" href="compiler/specificationlang.html#example-specifications">Example specifications</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="compiler/hardware.html">Hardware description classes</a><ul> <li class="toctree-l3"><a class="reference internal" href="compiler/hardware.html#pc">PC</a></li> <li class="toctree-l3"><a class="reference internal" href="compiler/hardware.html#embedded">Embedded</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="compiler.html#ir-code">IR-code</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="faq.html">Faq</a></li> <li class="toctree-l1"><a class="reference internal" href="contributing/index.html">Contributing</a><ul> <li class="toctree-l2"><a class="reference internal" href="contributing/support.html">Support</a><ul> <li class="toctree-l3"><a class="reference internal" href="contributing/support.html#how-to-help">How to help</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/support.html#how-to-submit-a-patch">How to submit a patch</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/support.html#report-an-issue">Report an issue</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="contributing/communication.html">Communication</a></li> <li class="toctree-l2"><a class="reference internal" href="contributing/development.html">Development</a><ul> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#source-code">Source code</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#coding-style">Coding style</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#running-the-testsuite">Running the testsuite</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#building-the-docs">Building the docs</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#directory-structure">Directory structure</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#continuous-integration">Continuous integration</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/development.html#code-metrics">Code metrics</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="contributing/debugging.html">Debugging</a><ul> <li class="toctree-l3"><a class="reference internal" href="contributing/debugging.html#debugging-tests">Debugging tests</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/debugging.html#debugging-dynamic-code">Debugging dynamic code</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/debugging.html#debugging-python-code">Debugging python code</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/debugging.html#debugging-sample-snippets">Debugging sample snippets</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/debugging.html#debugging-with-qemu">Debugging with QEMU</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="contributing/testing.html">Testing</a><ul> <li class="toctree-l3"><a class="reference internal" href="contributing/testing.html#long-tests">Long tests</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/testing.html#rd-party-test-suites">3rd party test suites</a></li> <li class="toctree-l3"><a class="reference internal" href="contributing/testing.html#compiler-testing">Compiler testing</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="contributing/todo.html">Todo</a><ul> <li class="toctree-l3"><a class="reference internal" href="contributing/todo.html#issue-trackers">Issue trackers</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="contributing/releasing.html">Release procedure</a></li> <li class="toctree-l2"><a class="reference internal" href="contributing/index.html#contributors">Contributors</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a><ul> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-1-0-planned">Release 1.0 (Planned)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-9-upcoming">Release 0.5.9 (Upcoming)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-8-jun-8-2020">Release 0.5.8 (Jun 8, 2020)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-7-dec-31-2019">Release 0.5.7 (Dec 31, 2019)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-6-aug-22-2018">Release 0.5.6 (Aug 22, 2018)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-5-jan-17-2018">Release 0.5.5 (Jan 17, 2018)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-4-aug-26-2017">Release 0.5.4 (Aug 26, 2017)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-3-apr-27-2017">Release 0.5.3 (Apr 27, 2017)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-2-dec-29-2016">Release 0.5.2 (Dec 29, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-1-oct-16-2016">Release 0.5.1 (Oct 16, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-5-aug-6-2016">Release 0.5 (Aug 6, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-4-0-apr-27-2016">Release 0.4.0 (Apr 27, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-3-0-feb-23-2016">Release 0.3.0 (Feb 23, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-2-0-jan-23-2016">Release 0.2.0 (Jan 23, 2016)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-1-0-dec-29-2015">Release 0.1.0 (Dec 29, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-0-5-mar-21-2015">Release 0.0.5 (Mar 21, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-0-4-feb-24-2015">Release 0.0.4 (Feb 24, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-0-3-feb-17-2015">Release 0.0.3 (Feb 17, 2015)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-0-2-nov-9-2014">Release 0.0.2 (Nov 9, 2014)</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#release-0-0-1-oct-10-2014">Release 0.0.1 (Oct 10, 2014)</a></li> </ul> </li> </ul> </div> <p>See also: <a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a>, <a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p> </div> </div> </div> </div> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <p class="logo"><a href="#"> <img class="logo" src="_static/logo.png" alt="Logo"/> </a></p> <h1 class="logo"><a href="#">ppci</a></h1> <p> <iframe src="https://ghbtns.com/github-btn.html?user=windelbouwman&repo=ppci&type=star&count=true&size=large&v=2" allowtransparency="true" frameborder="0" scrolling="0" width="200px" height="35px"></iframe> </p> <p> <a class="badge" href="https://travis-ci.org/windelbouwman/ppci"> <img alt="https://secure.travis-ci.org/windelbouwman/ppci.svg?branch=master" src="https://secure.travis-ci.org/windelbouwman/ppci.svg?branch=master" /> </a> </p> <h3>Navigation</h3> <ul class="current"> <li class="toctree-l1 current"><a class="current reference internal" href="#">Introduction</a></li> <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li> <li class="toctree-l1"><a class="reference internal" href="howto/index.html">Howto</a></li> <li class="toctree-l1"><a class="reference internal" href="reference/index.html">Reference</a></li> <li class="toctree-l1"><a class="reference internal" href="compiler.html">Compiler internals</a></li> <li class="toctree-l1"><a class="reference internal" href="faq.html">Faq</a></li> <li class="toctree-l1"><a class="reference internal" href="contributing/index.html">Contributing</a></li> <li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a></li> </ul> <h3>Links</h3> <ul> <li><a href="https://github.com/windelbouwman/ppci">ppci @ GitHub</a></li> <li><a href="https://pypi.python.org/pypi/ppci">ppci @ PyPI</a></li> </ul> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <div class="searchformwrapper"> <form class="search" action="search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="footer"> &copy;2020, Windel Bouwman. | Powered by <a href="http://sphinx-doc.org/">Sphinx 1.8.5</a> &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | <a href="_sources/index.rst.txt" rel="nofollow">Page source</a> </div> <a href="https://github.com/windelbouwman/ppci" class="github"> <img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" class="github"/> </a> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10