ezetool will be a set of tools for analysis of epiphany machine code.
See the README from the distribution for further details.
The tools are all Free Software and written in Java 7.
The main game. A tool similar to the 'spu-timing-tool' which simulates the instruction pipeline in order to accurately calculate instruction scheduling and display it in a human-helpful format.
Although it simulates the pipeline (or a software model of it) it is only simulating the pipeline stage dependencies and is not an epiphany emulator.
It reads elf files, linked or not.
Show the timing information for a single function:
ezetool-0.1$ bin/ezetime ../ezesdk/tests/bin/e-test-maths.o -f isqrt _isqrt: 0123456789012345678901234567890123456789012345678901234567890123 mov.l r2,#0x0000 | 1 | movt.l r2,#0x3f00 | 1 | mov.l r1,#0x59df /| -1 |1 fmul.s r2,r0,r2 \| -1234 |- movt.l r1,#0x5f37 | 1 | asr.s r0,r0,#0x0001 | 1 | sub.s r0,r1,r0 | 1 | mov.l r1,#0x0000 | 1 | movt.l r1,#0x3fc0 /| 1 | fmul.s r2,r2,r0 \| 1234 | fmsub.s r1,r2,r0 | ----1234 |4 fmul.s r0,r1,r0 | ----1234 |4 jr.l r14 | 1 |
Incomplete overview:
/| \|
If "-p" is passed on the command line then a dump of all stages of both pipelines for each clock cycle is printed as they 'execute'.
cycle DE RA E1 E2 | DE RA E1 E2 E3 E4 00000: mov - - - | - - - - - - 00001: movt mov - - | - - - - - - 00002: mov movt mov - | fmul - - - - - 00003: mov - movt mov | fmul - - - - - 00004: movt mov - movt | - fmul - - - - 00005: asr movt mov - | - - fmul - - - 00006: sub asr movt mov | - - - fmul - - 00007: mov sub asr movt | - - - - fmul - 00008: movt mov sub asr | fmul - - - - fmul 00009: - movt mov sub | fmsub fmul - - - - 00010: - - movt mov | fmsub - fmul - - - 00011: - - - movt | fmsub - - fmul - - 00012: - - - - | fmsub - - - fmul - 00013: - - - - | fmsub - - - - fmul 00014: - - - - | fmul fmsub - - - - 00015: - - - - | fmul - fmsub - - - 00016: - - - - | fmul - - fmsub - - 00017: - - - - | fmul - - - fmsub - 00018: - - - - | fmul - - - - fmsub 00019: jr - - - | - fmul - - - - 00020: - jr - - | - - fmul - - - 00021: - - jr - | - - - fmul - - 00022: - - - jr | - - - - fmul - 00023: - - - - | - - - - - fmul 00024: - - - - | - - - - - - 00025: - - - - | - - - - - -
A disassembler. This mostly exists to test the decoder and may be rolled into the same tool. It does have a more complete output than the ezetime tool.
It also reads elf files.
Right now branch targets are not labelled or calculated (just the offset index), no aliases are used (e.g. jr.l r14 == rts), and neither are the names for special registers resolved.
Disassemble a single function:
ezetool-0.1$ bin/ezedump ../ezesdk/tests/bin/e-test-maths.o -f isqrt _isqrt: 0: 0002400b mov.l r2,#0x0000 4: 13f2400b movt.l r2,#0x3f00 8: 05923beb mov.l r1,#0x59df c: 4127 fmul.s r2,r0,r2 e: 15f226eb movt.l r1,#0x5f37 12: 002e asr.s r0,r0,#0x0001 14: 043a sub.s r0,r1,r0 16: 0002200b mov.l r1,#0x0000 1a: 13f2380b movt.l r1,#0x3fc0 1e: 4827 fmul.s r2,r2,r0 20: 2847 fmsub.s r1,r2,r0 22: 0427 fmul.s r0,r1,r0 24: 0402194f jr.l r14
Most things should be 'quite' accurate. The pipeline assumes no delays of pipeline fetches which leads to small differences to the hardware.
For the flops, round-to-nearest is assumed.
movts and movfs timing is horribly broken but shows something reasonable.
GNU General Public License version 3 (or later).
18/7/2014: First release.
notzed on various mail servers, primarily gmail.com. On the parallella forums.