Skip to content

Analyzing ASM from LAS Test Cases

William R Tobin edited this page May 21, 2018 · 5 revisions

Script to Extract ASM

In order to dump the assembly code for the main function of a compiled test case use the following script:

objdump -d petsc_raw | c++filt | awk -v RS= '/^[[:xdigit:]].*<main>/'

replace main with another function name to retrieve the assembly for that function instead. Redirect the output into a file for best performance.

It is also possible to use gdb to decompile the assembly code, which is often faster, but that involves load the binary as an executable so the above is preferred for now.

ASM From CORI

The following are lists of the assembly code take from CORI using -O3 (for everything in the dependency stack) optimization on the section of the petsc_hard.cc file for each of 5 test cases between the calls to PCU_Time().

Raw PETSc API call:

  413121:       e8 3c 63 b2 04          callq  4f39462 <PCU_Time>
  413126:       c5 fb 11 04 24          vmovsd %xmm0,(%rsp)
  41312b:       48 8b 54 24 28          mov    0x28(%rsp),%rdx
  413130:       48 83 c4 f0             add    $0xfffffffffffffff0,%rsp
  413134:       44 89 e6                mov    %r12d,%esi
  413137:       44 89 e1                mov    %r12d,%ecx
  41313a:       49 89 d0                mov    %rdx,%r8
  41313d:       48 8b 7c 24 60          mov    0x60(%rsp),%rdi
  413142:       4c 8b 4c 24 18          mov    0x18(%rsp),%r9
  413147:       c7 04 24 02 00 00 00    movl   $0x2,(%rsp)
  41314e:       e8 8d 4d 35 00          callq  767ee0 <MatSetValues>
  413153:       48 83 c4 10             add    $0x10,%rsp
  413157:       e8 06 63 b2 04          callq  4f39462 <PCU_Time>

LasOps<petsc> API call:

  41312f:       e8 2e 63 b2 04          callq  4f39462 <PCU_Time>
  413134:       c5 fb 11 04 24          vmovsd %xmm0,(%rsp)
  413139:       48 8b 54 24 28          mov    0x28(%rsp),%rdx
  41313e:       48 83 c4 f0             add    $0xfffffffffffffff0,%rsp
  413142:       44 89 e6                mov    %r12d,%esi
  413145:       44 89 e1                mov    %r12d,%ecx
  413148:       49 89 d0                mov    %rdx,%r8
  41314b:       48 8b 7c 24 60          mov    0x60(%rsp),%rdi
  413150:       4c 8b 4c 24 18          mov    0x18(%rsp),%r9
  413155:       c7 04 24 02 00 00 00    movl   $0x2,(%rsp)
  41315c:       e8 9f 4d 35 00          callq  767f00 <MatSetValues>
  413161:       48 83 c4 10             add    $0x10,%rsp
  413165:       e8 f8 62 b2 04          callq  4f39462 <PCU_Time>

Function call:

  413121:       e8 3c 63 b2 04          callq  4f39462 <PCU_Time>
  413126:       c5 fb 11 04 24          vmovsd %xmm0,(%rsp)
  41312b:       48 8b 54 24 28          mov    0x28(%rsp),%rdx
  413130:       44 89 e6                mov    %r12d,%esi
  413133:       44 89 e1                mov    %r12d,%ecx
  413136:       49 89 d0                mov    %rdx,%r8
  413139:       48 8b 7c 24 50          mov    0x50(%rsp),%rdi
  41313e:       4c 8b 4c 24 08          mov    0x8(%rsp),%r9
  413143:       e8 98 04 00 00          callq  4135e0 <add(_p_Mat*, int, int*, int, int*, double*)>
  413148:       e8 15 63 b2 04          callq  4f39462 <PCU_Time>

00000000004135e0 <add(_p_Mat*, int, int*, int, int*, double*)>:
  4135e0:       48 83 ec 18             sub    $0x18,%rsp
  4135e4:       c7 04 24 02 00 00 00    movl   $0x2,(%rsp)
  4135eb:       e8 e0 48 35 00          callq  767ed0 <MatSetValues>
  4135f0:       48 83 c4 18             add    $0x18,%rsp
  4135f4:       c3                      retq
  4135f5:       0f 1f 40 00             nopl   0x0(%rax)
  4135f9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

C-virt function call:

  413129:       e8 34 63 b2 04          callq  4f39462 <PCU_Time>
  41312e:       c5 fb 11 04 24          vmovsd %xmm0,(%rsp)
  413133:       48 8b 54 24 28          mov    0x28(%rsp),%rdx
  413138:       44 89 e6                mov    %r12d,%esi
  41313b:       48 8b 7c 24 50          mov    0x50(%rsp),%rdi
  413140:       44 89 e1                mov    %r12d,%ecx
  413143:       4c 8b 4c 24 08          mov    0x8(%rsp),%r9
  413148:       49 89 d0                mov    %rdx,%r8
  41314b:       41 ff 55 00             callq  *0x0(%r13)
  41314f:       e8 0e 63 b2 04          callq  4f39462 <PCU_Time>

0000000000413600 <_add(_p_Mat*, int, int*, int, int*, double*)>:
  413600:       48 83 ec 18             sub    $0x18,%rsp
  413604:       c7 04 24 02 00 00 00    movl   $0x2,(%rsp)
  41360b:       e8 c0 48 35 00          callq  767ed0 <MatSetValues>
  413610:       48 83 c4 18             add    $0x18,%rsp
  413614:       c3                      retq
  413615:       0f 1f 40 00             nopl   0x0(%rax)
  413619:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

C++ virtual function call

413129:       e8 34 63 b2 04          callq  4f39462 <PCU_Time>
  41312e:       c5 fb 11 04 24          vmovsd %xmm0,(%rsp)
  413133:       48 8b 4c 24 28          mov    0x28(%rsp),%rcx
  413138:       48 83 c4 f0             add    $0xfffffffffffffff0,%rsp
  41313c:       4d 8b 55 00             mov    0x0(%r13),%r10
  413140:       4c 89 ef                mov    %r13,%rdi
  413143:       48 8b 44 24 18          mov    0x18(%rsp),%rax
  413148:       48 8d 74 24 60          lea    0x60(%rsp),%rsi
  41314d:       44 89 e2                mov    %r12d,%edx
  413150:       45 89 e0                mov    %r12d,%r8d
  413153:       49 89 c9                mov    %rcx,%r9
  413156:       48 89 04 24             mov    %rax,(%rsp)
  41315a:       41 ff 12                callq  *(%r10)
  41315d:       48 83 c4 10             add    $0x10,%rsp
  413161:       e8 fc 62 b2 04          callq  4f39462 <PCU_Time>

0000000000413660 <petsc_ops::add(las::Mat*, int, int*, int, int*, double*)>:
  413660:       48 8b 44 24 08          mov    0x8(%rsp),%rax
  413665:       48 8b 3e                mov    (%rsi),%rdi
  413668:       89 d6                   mov    %edx,%esi
  41366a:       48 89 ca                mov    %rcx,%rdx
  41366d:       44 89 c1                mov    %r8d,%ecx
  413670:       4d 89 c8                mov    %r9,%r8
  413673:       49 89 c1                mov    %rax,%r9
  413676:       c7 44 24 08 02 00 00    movl   $0x2,0x8(%rsp)
  41367d:       00
  41367e:       e9 4d 48 35 00          jmpq   767ed0 <MatSetValues>
  413683:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  413688:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  41368f:       00

ASM From AMOS BG/Q

Raw PETSc call:

bl      10633e0 <.apf::getElementNumbers(apf::NumberingOf<int>*, apf::MeshEntity*, apf::NewArray<int>&)>
nop
ld      r5,168(r1)
ld      r3,328(r1)
ld      r8,192(r1)
mr      r4,r14
mr      r6,r14
li      r9,2
mr      r7,r5
bl      10dc8e0 <.MatSetValues>

LasOps<petsc> call:

bl      1063410 <.apf::getElementNumbers(apf::NumberingOf<int>*, apf::MeshEntity*, apf::NewArray<int>&)>
nop
ld      r5,168(r1)
ld      r3,0(r21)
ld      r8,192(r1)
mr      r4,r17
mr      r6,r17
li      r9,2
mr      r7,r5
bl      10dc910 <.MatSetValues>

Function call:

bl      10633d0 <.apf::getElementNumbers(apf::NumberingOf<int>*, apf::MeshEntity*, apf::NewArray<int>&)>
nop
ld      r5,168(r1)
ld      r3,328(r1)
ld      r8,192(r1)
mr      r4,r14
mr      r6,r14
mr      r7,r5
bl      1002160 <.add(_p_Mat*, int, int*, int, int*, double*)>

0000000001002170 <.add(_p_Mat*, int, int*, int, int*, double*)>:
stdu    r1,-128(r1)
mflr    r0
std     r0,144(r1)
extsw   r4,r4
extsw   r6,r6
li      r9,2
bl      10dc8e0 <.MatSetValues>
nop
ld      r12,144(r1)
addi    r1,r1,128
mtlr    r12
blr

C-style inheritance:

bl      10633f0 <.apf::getElementNumbers(apf::NumberingOf<int>*, apf::MeshEntity*, apf::NewArray<int>&)>
nop
ld      r9,0(r21)
ld      r5,168(r1)
ld      r3,328(r1)
ld      r8,192(r1)
mr      r4,r14
mr      r6,r14
ld      r0,0(r9)
mr      r7,r5
ld      r11,16(r9)
mtctr   r0
ld      r2,8(r9)
bctrl               ; petsc_cops->add()

00000000010021e0 <._add(_p_Mat*, int, int*, int, int*, double*)>:
stdu    r1,-128(r1)
mflr    r0
std     r0,144(r1)
extsw   r4,r4
extsw   r6,r6
li      r9,2
bl      10dc8f0 <.MatSetValues>
nop
ld      r12,144(r1)
addi    r1,r1,128
mtlr    r12
blr

C++ inheritance:

bl      1063400 <.apf::getElementNumbers(apf::NumberingOf<int>*, apf::MeshEntity*, apf::NewArray<int>&)>
nop
ld      r7,0(r20)
ld      r6,168(r1)
mr      r5,r14
ld      r9,192(r1)
mr      r3,r20
mr      r4,r21
ld      r10,0(r7)
mr      r7,r14
mr      r8,r6
ld      r0,0(r10)
ld      r11,16(r10)
mtctr   r0
ld      r2,8(r10)
bctrl                  ; petsc_ops::add()


<.petsc_ops::add(las::Mat*, int, int*, int, int*, double*)>:
stdu    r1,-128(r1)
mflr    r0
std     r0,144(r1)
extsw   r0,r7
ld      r3,0(r4)
extsw   r4,r5
mr      r5,r6
mr      r6,r0
mr      r7,r8
mr      r8,r9
li      r9,2
bl      10dc900 <.MatSetValues>
nop
ld      r12,144(r1)
addi    r1,r1,128
mtlr    r12
blr

Clone this wiki locally