IA-64 Emulator

This is the first attempt to create web page of my diploma work - a simulator of IA-64 architecture


Overview of simulator

At the present simulator runs under Windows but simulates ELF programs (exactly programs created by gcc in NUE environment with adjusted start-up code and standard library). Windows programs (PE) can be loaded but there are still some problems with executing. Current features the simulator contains are a simple debugger, which can trace programs, view registers, insert breakpoints, and log instructions the simulator executed. It can simulate almost all of IA-64 instructions except of floating-point pair instructions. A processor is implemented inside the main program along with memory, memory caches, VHTP, TLB, loading and execution of ELF programs, a mechanism of syscalls (just exit, read and write are implemented so far), possibility of configuration of various implementation specific features and besides other qualities a full-screen but at the same time command-line debugger.
Simulated programs are compiled in NUE environment by Hewlett-Packard. These programs can use standard library (stdlib) packed with source code. Library and start-up code are compiled by command "makestd", examples of simulated programs by commands "makexxxx" where xxxx is the name of program.


Debugger window

Debugger window consists of three parts. It is possible to move among panes by the Tab key. Within each pane left, right, up, down, page up, page down and home keys can be used to move the window contents.
"Registers" pane - views chosen kind of registers
"Memory" pane - views contents of memory at the specified address
"Program" pane - views program instructions. Instructions can be marked with symbol "|" for instructions which are in dispersal window, with symbol ">" for instructions with are currently executed and with symbol "#" for already executed instructions in current instruction group. In pane's title bar a list of processor functional units is shown (small letter indicates free units, capital letter indicates busy units) and a number of clock-ticks elapsed from beginnig of program execution. A number of clock-ticks necessary to finish instruction execution is shown to the right of each executed instruction.
"Command line" - pane where you can enter your cunning commands.

Control

Execution: ia64emu exe=file-name [log=file-name] [arc=file-name] [cfg=file-name]

When the log file name is not present, it is set to ia64emu.log. When the architecture configuration file name is not present, it is set to ia64emu.arc, when the emulator configuration file name is not present, it is set to ia64emu.cfg (in current directory).

Keys:
Tab - switches among panes in debugger window.

Commands:
run (or F5) - starts program execution (it can be breaked by any key press, breakpoint or processor exception)
step (or F10) - proceeds one step in processor (execution of one instruction, loading new bundles into dispersal window or finishing of currently executins instructions)
reset - restarts simulated program
brk ins[ert] address [slot] (or F9 in "Disassembly" pane)- inserts breakpoint
brk rem[ove] address [slot] (or F9 in "Disassembly" pane)- removes breakpoint
brk en[able] address [slot] (or Ctrl+F9 in "Disassembly" pane)- enables breakpoint
brk en[able] all - enables all breakpoints (independetly of individual breakpoints)
brk dis[able] address [slot] (or Ctrl+F9 in "Disassembly" pane)- disables breakpoint
brk dis[able] all - disables all breakpoints (independetly of individual breakpoints)
brk list - prints a list of all breakpoint
view gr - views general registers (in "registers" pane)
view fr - views floating-point registers
view pr - views predicates and branch registers
view br - views predicates and branch registers
view ar - views application registers including detailed description of RSC and PFS registers
view other - views IP and CFM registers
view 1 or view byte - switches memory pane to one-byte view
view 2 or view word - switches memory pane to two-byte view
view 4 or view dword - switches memory pane to four-byte view
view 8 or view qword - switches memory pane to eight-byte view
view address value - sets start address of memory pane to value
set register value - sets register to value, e.g. set r1 10, set ar.bsp 0, set pr10 1
set byte (word, dword, qword) address value - sets address to value
log exec - starts logging each executed instruction (will be extended like almost all other features)
log exec off- stops logging executed instructions
exit - exits simulator

Latest simulator version: 0.1.14

Source code and executables - simulator source code and executable, standard library and start-up code source code, configuration file for Itanium, and compiled simulated applications for Linux and Windows
Executable program for Windows
Architecture configuration file necessary for execution
Emulator configuration file necessary for execution
Text of thesis (Word)
Text of thesis (html version)

Now I can produce programs as fast as possible:
Hello world.
Factorial
Sinus approximation
Example of incorrect program
Example of software pipelined loop
Example of advanced memory load
Example of parallel compares



Written and drawn by Jind°ich Houska in 2000 A.D.
e-mail: houska@kolej.mff.cuni.cz
Last modified 27. 4. 2001