| 1 |
138 |
Agner |
% Manual for ForwardCom
|
| 2 |
|
|
% NOTE: compile this with LuaLatex, not PDFLatex
|
| 3 |
|
|
|
| 4 |
|
|
\documentclass[11pt,a4paper,oneside,openright]{report}
|
| 5 |
|
|
\usepackage[bindingoffset=5mm,left=20mm,right=20mm,top=20mm,bottom=20mm,footskip=10mm]{geometry}
|
| 6 |
|
|
\usepackage[utf8x]{inputenc}
|
| 7 |
|
|
\usepackage{hyperref}
|
| 8 |
|
|
\usepackage[english]{babel}
|
| 9 |
|
|
\usepackage{listings}
|
| 10 |
|
|
\usepackage{subfiles}
|
| 11 |
|
|
\usepackage{longtable}
|
| 12 |
|
|
\usepackage{multirow}
|
| 13 |
|
|
\usepackage{ragged2e}
|
| 14 |
|
|
\usepackage{amsthm} % example numbering
|
| 15 |
|
|
\usepackage{color}
|
| 16 |
|
|
\usepackage[T1]{fontenc} % fix problem with underscore not searchable
|
| 17 |
|
|
\usepackage{fontspec}
|
| 18 |
|
|
\defaultfontfeatures{Mapping=tex-text, Ligatures=NoCommon}
|
| 19 |
|
|
\setmainfont{Arial}[Ligatures=NoCommon]
|
| 20 |
|
|
\setsansfont{Arial}
|
| 21 |
|
|
\renewcommand{\familydefault}{\sfdefault}
|
| 22 |
|
|
|
| 23 |
|
|
% modify style
|
| 24 |
|
|
\newtheorem{example}{Example}[chapter] % example numbering
|
| 25 |
|
|
\lstset{language=C} % formatting for code listing
|
| 26 |
|
|
\lstset{basicstyle=\ttfamily,breaklines=true}
|
| 27 |
|
|
\definecolor{darkGreen}{rgb}{0,0.4,0}
|
| 28 |
|
|
\lstset{commentstyle=\color{darkGreen}}
|
| 29 |
|
|
\newcommand{\vv}{ \vspace{2mm} } % vertical space
|
| 30 |
|
|
|
| 31 |
|
|
|
| 32 |
|
|
\begin{document}
|
| 33 |
|
|
\title{ForwardCom: An open-standard instruction set for high-performance microprocessors}
|
| 34 |
|
|
\author{Agner Fog}
|
| 35 |
|
|
\date{\today}
|
| 36 |
|
|
\maketitle
|
| 37 |
|
|
\RaggedRight
|
| 38 |
|
|
|
| 39 |
|
|
\tableofcontents
|
| 40 |
|
|
\setcounter{secnumdepth}{1}
|
| 41 |
|
|
|
| 42 |
|
|
|
| 43 |
|
|
|
| 44 |
|
|
% Introduction
|
| 45 |
|
|
% - Highlights
|
| 46 |
|
|
% - Background
|
| 47 |
|
|
% - Design goals
|
| 48 |
|
|
% - Comparison with other open instruction sets
|
| 49 |
|
|
% - References and links
|
| 50 |
|
|
\subfile{fwc_introduction.tex}
|
| 51 |
|
|
|
| 52 |
|
|
% Basic architecture
|
| 53 |
|
|
% - A fully orthogonal instruction set
|
| 54 |
|
|
% - Instruction size
|
| 55 |
|
|
% - Register set
|
| 56 |
|
|
% - Vector support
|
| 57 |
|
|
% - Vector loops
|
| 58 |
|
|
% - Maximum vector length
|
| 59 |
|
|
% - Instruction masks
|
| 60 |
|
|
% - Addressing modes
|
| 61 |
|
|
\subfile{fwc_basic_architecture.tex}
|
| 62 |
|
|
|
| 63 |
|
|
% Instruction formats
|
| 64 |
|
|
% - Formats and templates
|
| 65 |
|
|
% - Coding of operands
|
| 66 |
|
|
% - Coding of masks
|
| 67 |
|
|
% - Format for jump, call and branch instructions
|
| 68 |
|
|
% - Assignment of opcodes
|
| 69 |
|
|
\subfile{fwc_instruction_formats.tex}
|
| 70 |
|
|
|
| 71 |
|
|
% Instruction lists
|
| 72 |
|
|
% - List of multi-format instructions
|
| 73 |
|
|
% - List of tiny instructions
|
| 74 |
|
|
% - List of single-format instructions
|
| 75 |
|
|
\subfile{fwc_instruction_lists.tex}
|
| 76 |
|
|
|
| 77 |
|
|
% - Description of instructions
|
| 78 |
|
|
% - Common operations that have no dedicated instruction
|
| 79 |
|
|
% - Unused instructions
|
| 80 |
|
|
\subfile{fwc_description_of_instructions.tex}
|
| 81 |
|
|
|
| 82 |
|
|
% Other implementation details
|
| 83 |
|
|
% - Endianness
|
| 84 |
|
|
% - Implementation of call stack
|
| 85 |
|
|
% - Floating point errors and exceptions
|
| 86 |
|
|
% - Detecting integer overflow
|
| 87 |
|
|
% - Multithreading
|
| 88 |
|
|
% - Security features
|
| 89 |
|
|
\subfile{fwc_other_implementation_details.tex}
|
| 90 |
|
|
|
| 91 |
|
|
% Programmable application-specific instructions
|
| 92 |
|
|
\subfile{fwc_programmable_instructions.tex}
|
| 93 |
|
|
|
| 94 |
|
|
% Microarchitecture and pipeline design
|
| 95 |
|
|
\subfile{fwc_microarchitecture_and_pipeline.tex}
|
| 96 |
|
|
|
| 97 |
|
|
% Memory model
|
| 98 |
|
|
% - Thread memory protection
|
| 99 |
|
|
% - Memory management
|
| 100 |
|
|
\subfile{fwc_memory_model.tex}
|
| 101 |
|
|
|
| 102 |
|
|
% System programming
|
| 103 |
|
|
% - Memory map
|
| 104 |
|
|
% - Call stack
|
| 105 |
|
|
% - System calls and system functions
|
| 106 |
|
|
% - Inter-process calls
|
| 107 |
|
|
% - Error message handling
|
| 108 |
|
|
\subfile{fwc_system_programming.tex}
|
| 109 |
|
|
|
| 110 |
|
|
% Support for multiple instruction sets
|
| 111 |
|
|
% - Transitions between ForwardCom and x86-64
|
| 112 |
|
|
% - Transitions between ForwardCom and ARM
|
| 113 |
|
|
% - Transitions between ForwardCom and RISC-V
|
| 114 |
|
|
\subfile{fwc_multiple_instruction_sets.tex}
|
| 115 |
|
|
|
| 116 |
|
|
% Standardization of ABI and software ecosystem
|
| 117 |
|
|
% - Compiler support
|
| 118 |
|
|
% - Binary data representation
|
| 119 |
|
|
% - Further conventions for object-oriented languages
|
| 120 |
|
|
% - Function calling convention
|
| 121 |
|
|
% - Register usage convention
|
| 122 |
|
|
% - Name mangling for function overloading
|
| 123 |
|
|
\subfile{fwc_abi_standard.tex}
|
| 124 |
|
|
|
| 125 |
|
|
% - Binary format for object files and executable files
|
| 126 |
|
|
% - Function libraries and link methods
|
| 127 |
|
|
% - Library function dispatch system
|
| 128 |
|
|
% - Predicting the stack size
|
| 129 |
|
|
% - Exception handling, stack unrolling and debug information
|
| 130 |
|
|
\subfile{fwc_object_file_format.tex}
|
| 131 |
|
|
|
| 132 |
|
|
% - Binary tools
|
| 133 |
|
|
\subfile{fwc_bintools.tex}
|
| 134 |
|
|
|
| 135 |
|
|
% Programming manual
|
| 136 |
|
|
\subfile{fwc_programming_manual.tex}
|
| 137 |
|
|
|
| 138 |
|
|
% Test suite
|
| 139 |
|
|
\subfile{fwc_testsuite.tex}
|
| 140 |
|
|
|
| 141 |
|
|
% Softcore
|
| 142 |
|
|
\subfile{fwc_softcore.tex}
|
| 143 |
|
|
|
| 144 |
|
|
% Conclusion
|
| 145 |
|
|
\subfile{fwc_conclusion.tex}
|
| 146 |
|
|
|
| 147 |
|
|
% Revision history
|
| 148 |
|
|
\subfile{fwc_revision_history.tex}
|
| 149 |
|
|
|
| 150 |
|
|
% Copyright notice
|
| 151 |
|
|
\subfile{fwc_copyright_notice.tex}
|
| 152 |
|
|
|
| 153 |
|
|
\end{document}
|