ezetool for epiphany

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.

ezetime

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.

Basic Example

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:  -     -     -     -     |  -     -     -     -     -     -    

ezedump

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.

Basic Example

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             

Status

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.

License

GNU General Public License version 3 (or later).

Downloads

Links

Contact

notzed on various mail servers, primarily gmail.com. On the parallella forums.


Copyright (C) 2014 Michael Zucchi, All Rights Reserved.