Building a C-Based Processor

Total Page:16

File Type:pdf, Size:1020Kb

Building a C-Based Processor Building a C-based processor S. Woutersen Software Technology Information Technology & Systems TU Delft December, 2005 Abstract Until today every compiler has been developed by the idea to modify source code in such a way the hardware can understand it. Over the years this has resulted in inefficient processors caused by backwards compatibility issues, strange as- sembly code constructions caused by the lack of required instructions and nice instructions supported by hardware, but never used by the software. This research reverses the original design process. It starts by analyzing C code and starts working from there to a processing unit, thus supporting a min- imal amount of instructions required to run C and no backward compatibility with other processing units. To limit the design time, several existing retargetable C compilers are an- alyzed whether they have a useful intermediate language which is completely hardware independent. The LCC compilers LCC Bytecode was found to be the most acceptable language, even though a few modifications must be made to be able to efficiently run the code. The next step is to convert the generated LCC Bytecode into a binary lan- guage. This is done by a standard set of programs including an assembler and a linker. This is the first time some input about the processing unit is required, since neither C nor LCC Bytecode specifies anything about, for example, opcode encoding, while this can make a big difference in execution performance. For now the encoding is simply “guessed” and remains open for future modifications. The last step in the chain is the actual processing unit. A software interpreter programmed in C is build to extensively test compiled programs, and to compare the results with other existing solutions, such as the MIPS R2000, the Intel 386 Architecture and the Intel 8051. Test results show that LCC Bytecode is a fine language which covers C com- pletely. However some modifications where necessary to execute the code effi- ciently. The number of instructions required by LCC Bytecode is much smaller than those supported by most current processors, and therefore, a less complex, and thus cheaper and more reliable, processor design is possible. In terms of speed it is found that on average more instructions per C program are required than when using, for example, the MIPS instruction set, the processor will thus probably be slower than most traditional processors. Contents 1 Introduction 6 2 Generating assembly code 7 2.1 Compilers . 7 2.1.1 GCC . 8 2.1.2 LCC . 8 2.1.3 SDCC . 9 2.2 Conclusion . 9 3 LCC bytecode 10 3.1 Directives . 10 3.1.1 Segments . 11 3.1.2 Functions . 11 3.1.3 Debug information . 13 3.2 Instructions . 13 3.2.1 Labels . 14 3.2.2 Loading and storing variables . 14 3.2.3 Calling to and returning from functions . 16 3.2.4 Arithmetic operators . 18 3.2.5 Program jumps . 19 3.2.6 Variable type conversions . 20 3.2.7 Structures . 21 3.3 Shortcommings . 21 3.3.1 The LABEL instruction . 21 3.3.2 The ARG instruction . 22 3.3.3 Structures . 22 3.3.4 Debug information . 22 3.3.5 Not using the return value . 22 4 Implementation 24 4.1 Overview . 24 4.2 The LCC bytecode generator . 24 4.2.1 Debug symbols . 26 4.2.2 Updating LCC . 27 4.3 The bytecode converter . 28 4.4 The assembler . 28 4.5 The linker . 29 4.5.1 Bootstrap code . 29 1 CONTENTS 2 4.5.2 Library files . 30 4.6 The interpreter . 30 4.6.1 The interpreter engine . 31 4.6.2 Stack frames . 32 4.6.3 New instructions . 34 4.7 Program stack frame example . 35 4.8 Future work . 37 5 Test results 40 5.1 LCC Bytecode analysis . 40 5.1.1 Results of the DISCARD instruction . 40 5.1.2 Instruction usage . 41 5.2 Assembly files . 42 5.3 Processing unit comparison . 42 6 Conclusions 44 A LCC bytecode instructions 45 B Embedding the interpreter 47 B.1 Embedding the interpreter . 47 B.2 Calling a function . 48 B.2.1 Gathering information . 48 B.2.2 Preparing the call . 49 B.2.3 Making the call . 49 C Source files 51 C.1 Common source files . 51 C.2 Converter . 51 C.3 Assembler . 51 C.4 Linker . 51 C.5 Interpreter . 52 C.6 Bootstrap code . 52 D File formats 53 D.1 Bytecode file format . 53 D.2 Assembly file format . 53 D.3 Code segment format . 55 D.4 Library file format . 56 D.5 Executable file format . 56 E User manual 59 E.1 LCC . 59 E.2 Converter . 59 E.3 Assembler . 59 E.4 Linker . 60 E.5 Interpreter . 60 CONTENTS 3 F Example compilation run 61 F.1 C File . 61 F.2 Bytecode file . 61 F.3 Custimized bytecode file . 62 F.4 Binary assembly file . 63 F.5 Executable file . 65 List of Tables 2.1 Compiler comparison . 9 3.1 LCC Bytecode arithmetic operators . 18 3.2 LCC Bytecode conditional jumps . 19 5.1 Discard instruction results . 41 5.2 LCC Instruction frequency . 41 5.3 Assembly file lines comparison . 42 5.4 Instruction count and size . 43 A.1 LCC Instruction type and size suffixes . 45 A.2 LCC Instructions . 46 D.1 Assembly file format . 54 D.2 Label list file format . 54 D.3 Label format . 54 D.4 Label flags . 54 D.5 Segment codes . 55 D.6 Segment format . 55 D.7 Instruction format . 55 D.8 Instruction type format . 56 D.9 LCC Instructions . 57 D.10 Library format . 58 4 List of Figures 3.1 Stack frames after function entrances . 13 3.2 Stack frames for fetching variables . 15 3.3 Stack frames for assigning variables . 16 3.4 Stack frames for calling functions . 17 3.5 Stack frames for arithmetic operations . 18 4.1 Design path . 25 4.2 Tree for z = x + y . 25 4.3 Tree for z = some func() . 26 4.4 Tree for some func() . 26 4.5 Interpreter . 31 4.6 Stack frame step I . 32 4.7 Stack frame step II . 33 4.8 Stack frame step III . 33 4.9 Stack frame step IV . 33 4.10 Final stack frame layout . 34 4.11 Stack frame example Step I . 36 4.12 Stack frame example Step II . 36 4.13 Stack frame example Step III . 36 4.14 Stack frame example Step IV . ..
Recommended publications
  • Glibc and System Calls Documentation Release 1.0
    Glibc and System Calls Documentation Release 1.0 Rishi Agrawal <[email protected]> Dec 28, 2017 Contents 1 Introduction 1 1.1 Acknowledgements...........................................1 2 Basics of a Linux System 3 2.1 Introduction...............................................3 2.2 Programs and Compilation........................................3 2.3 Libraries.................................................7 2.4 System Calls...............................................7 2.5 Kernel.................................................. 10 2.6 Conclusion................................................ 10 2.7 References................................................ 11 3 Working with glibc 13 3.1 Introduction............................................... 13 3.2 Why this chapter............................................. 13 3.3 What is glibc .............................................. 13 3.4 Download and extract glibc ...................................... 14 3.5 Walkthrough glibc ........................................... 14 3.6 Reading some functions of glibc ................................... 17 3.7 Compiling and installing glibc .................................... 18 3.8 Using new glibc ............................................ 21 3.9 Conclusion................................................ 23 4 System Calls On x86_64 from User Space 25 4.1 Setting Up Arguements......................................... 25 4.2 Calling the System Call......................................... 27 4.3 Retrieving the Return Value......................................
    [Show full text]
  • Preview Objective-C Tutorial (PDF Version)
    Objective-C Objective-C About the Tutorial Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. This is the main programming language used by Apple for the OS X and iOS operating systems and their respective APIs, Cocoa and Cocoa Touch. This reference will take you through simple and practical approach while learning Objective-C Programming language. Audience This reference has been prepared for the beginners to help them understand basic to advanced concepts related to Objective-C Programming languages. Prerequisites Before you start doing practice with various types of examples given in this reference, I'm making an assumption that you are already aware about what is a computer program, and what is a computer programming language? Copyright & Disclaimer © Copyright 2015 by Tutorials Point (I) Pvt. Ltd. All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book can retain a copy for future reference but commercial use of this data is not allowed. Distribution or republishing any content or a part of the content of this e-book in any manner is also not allowed without written consent of the publisher. We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness or completeness of our website or its contents including this tutorial. If you discover any errors on our website or in this tutorial, please notify us at [email protected] ii Objective-C Table of Contents About the Tutorial ..................................................................................................................................
    [Show full text]
  • Stackable Lcc/Lcd Oven Instruction Manual
    C-195 P/N 156452 REVISION W 12/2007 STACKABLE LCC/LCD OVEN INSTRUCTION MANUAL Model Atmosphere Volts Amps Hz Heater Phase Watts LCC/D1-16-3 Air 240 14.8 50/60 3,000 1 LCC/D1-16N-3 Nitrogen 240 14.0 50/60 3,000 1 LCC/D1-51-3 Air 240 27.7 50/60 6,000 1 LCC/D1-51N-3 Nitrogen 240 27.7 50/60 6,000 1 Model numbers may include a “V” for silicone free construction. Model numbers may begin with the designation LL *1-*, indicating Models without HEPA filter. Prepared by: Despatch Industries 8860 207 th St. West Lakeville, MN 55044 Customer Service 800-473-7373 NOTICE Users of this equipment must comply with operating procedures and training of operation personnel as required by the Occupational Safety and Health Act (OSHA) of 1970, Section 6 and relevant safety standards, as well as other safety rules and regulations of state and local governments. Refer to the relevant safety standards in OSHA and National Fire Protection Association (NFPA), section 86 of 1990. CAUTION Setup and maintenance of the equipment should be performed by qualified personnel who are experienced in handling all facets of this type of system. Improper setup and operation of this equipment could cause an explosion that may result in equipment damage, personal injury or possible death. Dear Customer, Thank you for choosing Despatch Industries. We appreciate the opportunity to work with you and to meet your heat processing needs. We believe that you have selected the finest equipment available in the heat processing industry.
    [Show full text]
  • The Lcc 4.X Code-Generation Interface
    The lcc 4.x Code-Generation Interface Christopher W. Fraser and David R. Hanson Microsoft Research [email protected] [email protected] July 2001 Technical Report MSR-TR-2001-64 Abstract Lcc is a widely used compiler for Standard C described in A Retargetable C Compiler: Design and Implementation. This report details the lcc 4.x code- generation interface, which defines the interaction between the target- independent front end and the target-dependent back ends. This interface differs from the interface described in Chap. 5 of A Retargetable C Com- piler. Additional infomation about lcc is available at http://www.cs.princ- eton.edu/software/lcc/. Microsoft Research Microsoft Corporation One Microsoft Way Redmond, WA 98052 http://www.research.microsoft.com/ The lcc 4.x Code-Generation Interface 1. Introduction Lcc is a widely used compiler for Standard C described in A Retargetable C Compiler [1]. Version 4.x is the current release of lcc, and it uses a different code-generation interface than the inter- face described in Chap. 5 of Reference 1. This report details the 4.x interface. Lcc distributions are available at http://www.cs.princeton.edu/software/lcc/ along with installation instruc- tions [2]. The code generation interface specifies the interaction between lcc’s target-independent front end and target-dependent back ends. The interface consists of a few shared data structures, a 33-operator language, which encodes the executable code from a source program in directed acyclic graphs, or dags, and 18 functions, that manipulate or modify dags and other shared data structures. On most targets, implementations of many of these functions are very simple.
    [Show full text]
  • The Glib/GTK+ Development Platform
    The GLib/GTK+ Development Platform A Getting Started Guide Version 0.8 Sébastien Wilmet March 29, 2019 Contents 1 Introduction 3 1.1 License . 3 1.2 Financial Support . 3 1.3 Todo List for this Book and a Quick 2019 Update . 4 1.4 What is GLib and GTK+? . 4 1.5 The GNOME Desktop . 5 1.6 Prerequisites . 6 1.7 Why and When Using the C Language? . 7 1.7.1 Separate the Backend from the Frontend . 7 1.7.2 Other Aspects to Keep in Mind . 8 1.8 Learning Path . 9 1.9 The Development Environment . 10 1.10 Acknowledgments . 10 I GLib, the Core Library 11 2 GLib, the Core Library 12 2.1 Basics . 13 2.1.1 Type Definitions . 13 2.1.2 Frequently Used Macros . 13 2.1.3 Debugging Macros . 14 2.1.4 Memory . 16 2.1.5 String Handling . 18 2.2 Data Structures . 20 2.2.1 Lists . 20 2.2.2 Trees . 24 2.2.3 Hash Tables . 29 2.3 The Main Event Loop . 31 2.4 Other Features . 33 II Object-Oriented Programming in C 35 3 Semi-Object-Oriented Programming in C 37 3.1 Header Example . 37 3.1.1 Project Namespace . 37 3.1.2 Class Namespace . 39 3.1.3 Lowercase, Uppercase or CamelCase? . 39 3.1.4 Include Guard . 39 3.1.5 C++ Support . 39 1 3.1.6 #include . 39 3.1.7 Type Definition . 40 3.1.8 Object Constructor . 40 3.1.9 Object Destructor .
    [Show full text]
  • Versa 8051 Mcus TB102 – Using Versa 8051 Include Files Rev 1.0
    Versa 8051 MCUs TB102 – Using Versa 8051 Include Files Rev 1.0 How to Use Include Files for Versa 8051 MCUs 1 Introduction For compilers/assemblers that do not allow long file names, the naming convention is as follows: This technical bulletin addresses the include files developed for each of Ramtron’s fast and flexible AAFFDDDD.EXT Versa 8051 microcontrollers. Include files contain code AA: The initials of the compiler or assembler, such as for the MCU’s special function registers (SFRs). This ML for the MetaLink Cross Assembler. code is compatible with most popular 8051 compilers and assemblers. FF: The family of the target device: RS for the Versa 8051 family. 2 Supported Compilers DDDD: The first digit grouping of the device name, for Currently, include files exist for the following 8051 example the VRS51L2070 will use 2070. compilers and assemblers: EXT: The extension for the target programming language, such as .H for the C language, or .inc for an • MetaLink Macro Assembler assembler. • RIDE 51 (RKit) MA51 Macro Assembler • RIDE 51 (RKit) RC51 C Compiler 3.2 Location and Installation • Keil µVision3 A51 Macro Assembler All the files are placed in a zipped folder labeled with • Keil µVision3 C51 C Compiler the device name (for example, VRS51L3074.ZIP). • SDCC (Small Device C Compiler) When downloaded, the necessary file(s) can be moved • ASX8051 cross assembler to two possible locations: If you are using a different compiler, apply one of the • The compiler/assembler source directory provided files as a template or contact Ramtron for • The folder of the current project assistance.
    [Show full text]
  • Operating System Components for an Embedded Linux System
    INSTITUTEFORREAL-TIMECOMPUTERSYSTEMS TECHNISCHEUNIVERSITATM¨ UNCHEN¨ PROFESSOR G. F ARBER¨ Operating System Components for an Embedded Linux System Martin Hintermann Studienarbeit ii Operating System Components for an Embedded Linux System Studienarbeit Executed at the Institute for Real-Time Computer Systems Technische Universitat¨ Munchen¨ Prof. Dr.-Ing. Georg Farber¨ Advisor: Prof.Dr.rer.nat.habil. Thomas Braunl¨ Author: Martin Hintermann Kirchberg 34 82069 Hohenschaftlarn¨ Submitted in February 2007 iii Acknowledgements At first, i would like to thank my supervisor Prof. Dr. Thomas Braunl¨ for giving me the opportunity to take part at a really interesting project. Many thanks to Thomas Sommer, my project partner, for his contribution to our good work. I also want to thank also Bernard Blackham for his assistance by email and phone at any time. In my opinion, it was a great cooperation of all persons taking part in this project. Abstract Embedded systems can be found in more and more devices. Linux as a free operating system is also becoming more and more important in embedded applications. Linux even replaces other operating systems in certain areas (e.g. mobile phones). This thesis deals with the employment of Linux in embedded systems. Various architectures of embedded systems are introduced and the characteristics of common operating systems for these devices are reviewed. The architecture of Linux is examined by looking at the particular components such as kernel, standard C libraries and POSIX tools for embedded systems. Furthermore, there is a survey of real-time extensions for the Linux kernel. The thesis also treats software development for embedded Linux ranging from the prerequi- sites for compiling software to the debugging of binaries.
    [Show full text]
  • Anatomy of Cross-Compilation Toolchains
    Embedded Linux Conference Europe 2016 Anatomy of cross-compilation toolchains Thomas Petazzoni free electrons [email protected] Artwork and Photography by Jason Freeny free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 1/1 Thomas Petazzoni I CTO and Embedded Linux engineer at Free Electrons I Embedded Linux specialists. I Development, consulting and training. I http://free-electrons.com I Contributions I Kernel support for the Marvell Armada ARM SoCs from Marvell I Major contributor to Buildroot, an open-source, simple and fast embedded Linux build system I Living in Toulouse, south west of France Drawing from Frank Tizzoni, at Kernel Recipes 2016 free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 2/1 Disclaimer I I am not a toolchain developer. Not pretending to know everything about toolchains. I Experience gained from building simple toolchains in the context of Buildroot I Purpose of the talk is to give an introduction, not in-depth information. I Focused on simple gcc-based toolchains, and for a number of examples, on ARM specific details. I Will not cover advanced use cases, such as LTO, GRAPHITE optimizations, etc. I Will not cover LLVM free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 3/1 What is a cross-compiling toolchain? I A set of tools that allows to build source code into binary code for
    [Show full text]
  • Linux Assembly HOWTO Linux Assembly HOWTO
    Linux Assembly HOWTO Linux Assembly HOWTO Table of Contents Linux Assembly HOWTO..................................................................................................................................1 Konstantin Boldyshev and François−René Rideau................................................................................1 1.INTRODUCTION................................................................................................................................1 2.DO YOU NEED ASSEMBLY?...........................................................................................................1 3.ASSEMBLERS.....................................................................................................................................1 4.METAPROGRAMMING/MACROPROCESSING............................................................................2 5.CALLING CONVENTIONS................................................................................................................2 6.QUICK START....................................................................................................................................2 7.RESOURCES.......................................................................................................................................2 1. INTRODUCTION...............................................................................................................................2 1.1 Legal Blurb........................................................................................................................................2
    [Show full text]
  • An Analysis of the D Programming Language Sumanth Yenduri University of Mississippi- Long Beach
    View metadata, citation and similar papers at core.ac.uk brought to you by CORE provided by CSUSB ScholarWorks Journal of International Technology and Information Management Volume 16 | Issue 3 Article 7 2007 An Analysis of the D Programming Language Sumanth Yenduri University of Mississippi- Long Beach Louise Perkins University of Southern Mississippi- Long Beach Md. Sarder University of Southern Mississippi- Long Beach Follow this and additional works at: http://scholarworks.lib.csusb.edu/jitim Part of the Business Intelligence Commons, E-Commerce Commons, Management Information Systems Commons, Management Sciences and Quantitative Methods Commons, Operational Research Commons, and the Technology and Innovation Commons Recommended Citation Yenduri, Sumanth; Perkins, Louise; and Sarder, Md. (2007) "An Analysis of the D Programming Language," Journal of International Technology and Information Management: Vol. 16: Iss. 3, Article 7. Available at: http://scholarworks.lib.csusb.edu/jitim/vol16/iss3/7 This Article is brought to you for free and open access by CSUSB ScholarWorks. It has been accepted for inclusion in Journal of International Technology and Information Management by an authorized administrator of CSUSB ScholarWorks. For more information, please contact [email protected]. Analysis of Programming Language D Journal of International Technology and Information Management An Analysis of the D Programming Language Sumanth Yenduri Louise Perkins Md. Sarder University of Southern Mississippi - Long Beach ABSTRACT The C language and its derivatives have been some of the dominant higher-level languages used, and the maturity has stemmed several newer languages that, while still relatively young, possess the strength of decades of trials and experimentation with programming concepts.
    [Show full text]
  • Remote-Controlled Ambidextrous Robot Hand Actuated by Pneumatic Muscles: from Feasibility Study to Design and Control Algorithms
    Remote-Controlled Ambidextrous Robot Hand Actuated by Pneumatic Muscles: from Feasibility Study to Design and Control Algorithms A thesis submitted for the Degree of Doctor of Philosophy By Emre Akyürek Department of Electronic and Computer Engineering School of Engineering and Design Brunel University June 2015 Declaration of Authorship I, Emre Akyürek, certify that the work introduced in this thesis entitled “Remote- Controlled Ambidextrous Robot Hand Actuated by Pneumatic Muscles: from Feasibility Study to Design and Control” is my own. I confirm that: -This work was entirely achieved while in candidature for a Doctor of Philosophy degree at Brunel University. -The works done by my colleagues or achieved as teamwork are clearly defined and specified. -The articles I have consulted for my research are referenced. Signed: Date: 10/06/2015 i To my ex-brothers in arms Kim-Hwa Khoo, Michaël Rouart and Daniel Truong By the sides of whom I fought these evil monsters called exams and assignments. To those by the sides of whom I bled and suffered, Learning the true meanings of distress and agony. To those who were always at my side To heal my wounds and to repair my weapons, Teaching me the true meanings of friendship and solidarity. To my dear friends Kim-Hwa, Michaël and Daniel, Who were my only family on the battlefield. To my ex-brothers in arms, By the sides of whom I have become the warrior I am. ii Abstract This thesis relates to the development of the Ambidextrous Robot Hand engineered in Brunel University. Assigned to a robotic hand, the ambidextrous feature means that two different behaviours are accessible from a single robot hand, because of its fingers architecture which permits them to bend in both ways.
    [Show full text]
  • Intro to C Programming 1
    Introduction to C via Examples Last update: Cristinel Ababei, January 2012 1. Objective The objective of this material is to introduce you to several programs in C and discuss how to compile, link, and execute on Windows or Linux. The first example is the simplest hello world example. The second example is designed to expose you to as many C concepts as possible within the simplest program. It assumes no prior knowledge of C. However, you must allocate significant time to read suggested materials, but especially work on as many examples as possible. 2. Working on Windows: Example 1 To get started with learning C, I recommend using a simple and general/generic IDE with a freeC/C++ compiler. For example, Dev-C++ is a nice compiler system for windows. Download and install it on your own computer from here: http://www.bloodshed.net/devcpp.html In my case, I installed it in M:\Dev-Cpp, where I created a new directory M:\Dev-Cpp\cristinel to store all projects I will work on. Inside this new directory, I created yet one more M:\Dev- Cpp\cristinel\project1, where I’ll store the files for the first program, which is simply the famous “hello world” program. We’ll create a new project directory for each new program; this way we keep thing nicely organized in individual directories. We create a program by creating a new project in Dev-C++. So, start Dev-C++ and create a new project. In the dialog window, select “Console Application” as the type of project and name it hello.
    [Show full text]