/////////////////////////////////////////////////////////////////////////////
//
//  Detours Test Program (ia64.asm/disas.exe)
//
//  Microsoft Research Detours Package, Version 2.1.
//
//  Copyright (c) Microsoft Corporation.  All rights reserved.
//

    .section .text
    .proc  TestCodes#
    .global TestCodes#
    .align 64
        
TestCodes:
{   .mii
        and     r21 = 7, r32   
        mux1    r25 = r33, @brcst  
        add     r16 = r32, r34   
} { .mmb
        cmp.ge  p9 = 0, r34   
        mov     r8 = r32   
(p9)    br.ret.spnt b0    
  ;;
}
// align on an 8-byte boundary
{   .mmi
        cmp.ne  p15 = 0, r21   //Low 3 bits zero?
        cmp.gt  p10 = 0x30, r34
        cmp.eq  p6, p7 = 0, r33
} { .mmb
        nop.m   0
        nop.m   0
(p15)   br.cond.dpnt Align_Loop   
  ;;
} { .mmi
(p7)    mov     r27 = 0x88
(p6)    mov     r27 = 0x90
        tbit.nz p14,p13 = r32, 3 // is aligned on 8-bytes (to align on 16 before FP loop)?
} { .mbb
        nop.m   0
(p10)   br.cond.dpnt Aligned_Short  // blocks < 48 bytes
(p7)    br.cond.dpnt Aligned_Long;  // do 8-byte stores for non-zero fills, 16-byte f0 for zero-fills
  ;;
}

// zero-fills >= 48 bytes goes through an f0 16-byte store loop
Aligned_FP_Long:
{   .mmi
        add     r28 = 0x80, r27
        add     r29 = 0x100, r27
        add     r30 = 0x180, r27
} { .mmi
(p14)   add     r14 = 0x88, r32
(p14)   st8     [r32] = r0, 8
(p14)   add     r34 = -0x8, r34
  ;;
} { .mmi
(p13)   add     r14 = 0x80, r32
        cmp.ge  p7 = r34, r27
        add     r27 = 0x200, r27
} { .mmi
        add     r15 = 0x180, r32
        add     r17 = 0x200, r32
        nop.i   0
  ;;
} { .mmi
        add     r26 = 0x280, r32
        cmp.ge  p8 = r34, r28
        cmp.ge  p9 = r34, r29
} { .mmi
        stf.spill   [r32] = f0       // Line 0
(p7)    stf.spill   [r14] = f0,0x80  // Line +1 0x80
        add     r28 = 0x200, r28
  ;;
} { .mmi
(p8)    stf.spill   [r14] = f0   // Line +2 0x100
(p9)    stf.spill   [r15] = f0   // Line +3 0x180
        cmp.ge  p10 = r34, r28
} { .mmi
        cmp.ge  p11 = r34, r30
        cmp.ge  p12 = r34, r27
        nop.i   0
  ;;
} { .mmi
(p11)   stf.spill   [r17] = f0   // Line +4 0x200
(p12)   stf.spill   [r26] = f0, 0x80 // Line +5 0x280
        add    r31 = 0x10, r32
  ;;
}

    .align 32
Long_FP_loop:
{   .mmi
(p10)   stf.spill   [r26] = f0, 0x80 // Line +6
        stf.spill   [r31] = f0, 0x20  
        cmp.le  p15,p12 = 0x40, r34
} { .mmb
        add     r32 = 0x20, r32
        add     r34 = -0x20, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   stf.spill   [r32] = f0, 0x20   
(p15)   stf.spill   [r31] = f0, 0x20   
        cmp.le  p15,p12 = 0x40, r34
} { .mmb
        add     r21 = -0x60, r34
        add     r34 = -0x20, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   stf.spill   [r32] = f0, 0x20   
(p15)   stf.spill   [r31] = f0, 0x20   
        cmp.le  p15,p12 = 0x40, r34
} { .mmb
        cmp.ge  p10 = r21, r28
        add     r34 = -0x20, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   stf.spill   [r32] = f0, 0x20   
(p15)   stf.spill   [r31] = f0, 0x20   
        cmp.le  p15,p12 = 0x40, r34
} { .mbb
        add     r34 = -0x20, r34
(p15)   br.cond.sptk.many   Long_FP_loop   
        br.cond.dpnt.many   Aligned_Short
  ;;
}

    .align 32
// >= 48 bytes non-zero fills go through a 8-byte store based loop
Aligned_Long:
{   .mmi
        add     r28 = 0x80, r27
        add     r29 = 0x100, r27
        add     r30 = 0x180, r27
} { .mmi
        add     r14 = 0x80, r32
        cmp.ge  p7 = r34, r27
        nop.i   0
  ;;  
} { .mmi
        add     r26 = 0x180, r32
        cmp.ge  p8 = r34, r28
        add     r31 = 8, r32
} { .mmi
        st8     [r32] = r25
(p7)    st8     [r14] = r25, 0x80
        cmp.ge  p9 = r34, r29
  ;;
} { .mmi
(p8)    st8     [r14] = r25
(p9)    st8     [r26] = r25, 0x80
        cmp.ge  p10 = r34, r30
  ;;
}
    .align 32
Long_loop:
{   .mmi
(p10)   st8     [r26] = r25, 0x80  
        st8     [r31] = r25, 0x10  
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        add     r32 = 0x10, r32
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10  
(p15)   st8     [r31] = r25, 0x10  
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        nop.m   0
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10   
(p15)   st8     [r31] = r25, 0x10   
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        nop.m   0
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10   
(p15)   st8     [r31] = r25, 0x10   
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        nop.m   0
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10   
(p15)   st8     [r31] = r25, 0x10   
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        nop.m   0
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10   
(p15)   st8     [r31] = r25, 0x10   
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        add     r21 = -0x30, r34
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10   
(p15)   st8     [r31] = r25, 0x10   
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        cmp.ge  p10 = r21, r30
        add     r34 = -0x10, r34
(p12)   br.cond.dpnt Aligned_Short
  ;;
} { .mmi
(p15)   st8     [r32] = r25, 0x10   
(p15)   st8     [r31] = r25, 0x10   
        cmp.le  p15,p12 = 0x20, r34
} { .mmb
        add     r34 = -0x10, r34
        nop.m   0
(p15)   br.cond.sptk.many Long_loop   
  ;;

} 

// 
// Do partial word stores
// 
    .align 32
Aligned_Short:
{   .mmi
        and     r27 = 2, r34
        add     r31 = 8, r32
        tbit.nz p6 = r34, 0   //bit 0 on?
} { .mmb
        cmp.le  p11 = 0x10, r34
        cmp.eq  p10 = 0, r34
(p10)   br.ret.dpnt  b0
  ;;
} { .mmi
(p11)   st8     [r32] = r25, 0x10   
(p11)   st8     [r31] = r25, 0x10   
        cmp.le  p12 = 0x20, r34
} { .mmi
        add     r17 = -2, r16
        add     r18 = -4, r16
        tbit.nz p9 = r34, 3   //odd number of st8s?
  ;;
} { .mmi
(p12)   st8     [r32] = r25, 0x10   
(p12)   st8     [r31] = r25, 0x10 
        nop.i   0  
} { .mmi
(p6)    add     r18 = -1, r18
(p6)    add     r16 = -1, r16
        cmp.ne  p7 = 0, r27
  ;;
} { .mmi
(p9)    st8     [r32] = r25   
(p6)    st1     [r16] = r25    
        tbit.nz p8 = r34, 2   //bit 2 on?
} { .mmi
(p7)    add     r18 = -2, r18
(p6)    add     r17 = -1, r17
        nop.i   0
  ;;
} { .mmb
(p8)    st4     [r18] = r25   
(p7)    st2     [r17] = r25     
        br.ret.sptk.many b0    
  ;;
}

    .align 32
// Align the input pointer to an 8-byte boundary
Align_Loop:
{   .mmi
        st1     [r32] = r33,1   
        add     r21 = 1, r21   
        cmp.eq  p15 = 1, r34   
} { .mmb  
        cmp.ge  p11 = 0x30, r34
        add     r34 = -1, r34   
(p15)   br.ret.dpnt  b0    
  ;;
} { .mmb
        cmp.gt  p10 = 8, r21
        cmp.eq  p6, p7 = 0, r33
(p10)   br.cond.sptk Align_Loop   
  ;;
} { .mmi
(p7)    mov     r27 = 0x88
(p6)    mov     r27 = 0x90
        tbit.nz p14,p13 = r32, 3 // is aligned on 8-bytes (to align on 16 before FP loop)?
} { .bbb
(p11)   br.cond.dpnt Aligned_Short  // blocks < 48 bytes
(p7)    br.cond.dpnt Aligned_Long;  // non-zero fills
        br.cond.dptk Aligned_FP_Long; // zero fills
  ;;
}
    .endp  TestCodes#

    .proc  Again#
Again:
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         TestCodes
    brl         Fore1
    brl         Fore2
    brl         Fore3
    brl         Fore4
    brl         Fore5
    brl         Fore6
    brl         Fore7
    .endp  Again#
        
    data4       0xffffff00
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    .align 64

    data4       0xffffff00
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
        
{
    addl   r2=0xffffffffffffffff, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xfffffffffffffff0, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xffffffffffffff00, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xfffffffffffff000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xfffffffffffff000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xffffffffffff0000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xfffffffffff00000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xffffffffffe00000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x00000000001fffff, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x00000000000fffff, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x000000000000ffff, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000fff, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x00000000000000ff, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x000000000000000f, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000001, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000002, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000004, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000008, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000010, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000020, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000040, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000080, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000100, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000200, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000400, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000000800, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000001000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000002000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000004000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000008000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000010000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000020000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000040000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000080000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0x0000000000100000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
{
    addl   r2=0xffffffffffe00000, gp ;;
    ld8    r2=[r2]
    nop.i  0 ;;
}
        
    data4       0
    .align 64

    .align 64                                           ; 
    .proc  Fore1#
Fore1:
    brl         Fore2
    .endp  Fore1#
        
    data4       0
    .align 64
        
    .proc  Fore2#
Fore2:
    brl         Fore3
    .endp  Fore2#
        
    data4       0
    .align 64
        
    .proc  Fore3#
Fore3:
    brl         Fore3
    movl        gp = 0xffffffffffffffff
    brl         Fore4
    movl        gp = 0x0000000000000000
    movl        gp = 0x0000000000000001
    movl        gp = 0x0000000000000002
    movl        gp = 0x0000000000000004
    movl        gp = 0x0000000000000008
    movl        gp = 0x0000000000000010
    movl        gp = 0x0000000000000020
    movl        gp = 0x0000000000000040
    movl        gp = 0x0000000000000080
    movl        gp = 0x0000000000000100
    movl        gp = 0x0000000000000200
    movl        gp = 0x0000000000000400
    movl        gp = 0x0000000000000800
    movl        gp = 0x0000000000001000
    movl        gp = 0x0000000000002000
    movl        gp = 0x0000000000004000
    brl         Fore4
    movl        gp = 0x0000000000000000
    brl         Fore4
    movl        gp = 0x0000000000000001
    brl         Fore4
    movl        gp = 0x0000000000000002
    brl         Fore4
    movl        gp = 0x0000000000000004
    brl         Fore4
    movl        gp = 0x0000000000000008
    brl         Fore4
    movl        gp = 0x0000000000000010
    brl         Fore4
    movl        gp = 0x0000000000000020
    brl         Fore4
    movl        gp = 0x0000000000000040
    brl         Fore4
    movl        gp = 0x0000000000000080
    brl         Fore4
    movl        gp = 0x0000000000000100
    brl         Fore4
    movl        gp = 0x0000000000000200
    brl         Fore4
    movl        gp = 0x0000000000000400
    brl         Fore4
    movl        gp = 0x0000000000000800
    brl         Fore4
    movl        gp = 0x0000000000001000
    brl         Fore4
    movl        gp = 0x0000000000002000
    brl         Fore4
    movl        gp = 0x0000000000004000
    brl         Fore4
    movl        gp = 0x0000000000008000
    brl         Fore4
    movl        gp = 0x0000000000010000
    brl         Fore4
    movl        gp = 0x0000000000020000
    brl         Fore4
    movl        gp = 0x0000000000040000
    brl         Fore4
    movl        gp = 0x0000000000080000
    brl         Fore4
    movl        gp = 0x0000000000100000
    brl         Fore4
    movl        gp = 0x0000000000200000
    brl         Fore4
    movl        gp = 0x0000000000400000
    brl         Fore4
    movl        gp = 0x0000000000800000
    brl         Fore4
    movl        gp = 0x0000000001000000
    brl         Fore4
    movl        gp = 0x0000000002000000
    brl         Fore4
    movl        gp = 0x0000000004000000
    brl         Fore4
    movl        gp = 0x0000000008000000
    brl         Fore4
    movl        gp = 0x0000000010000000
    brl         Fore4
    movl        gp = 0x0000000020000000
    brl         Fore4
    movl        gp = 0x0000000040000000
    brl         Fore4
    movl        gp = 0x0000000080000000
    brl         Fore4
    movl        gp = 0x0000000100000000
    brl         Fore4
    movl        gp = 0x0000000200000000
    brl         Fore4
    movl        gp = 0x0000000400000000
    brl         Fore4
    movl        gp = 0x0000000800000000
    brl         Fore4
    movl        gp = 0x0000001000000000
    brl         Fore4
    movl        gp = 0x0000002000000000
    brl         Fore4
    movl        gp = 0x0000004000000000
    brl         Fore4
    movl        gp = 0x0000008000000000
    brl         Fore4
    movl        gp = 0x0000010000000000
    brl         Fore4
    movl        gp = 0x0000020000000000
    brl         Fore4
    movl        gp = 0x0000040000000000
    brl         Fore4
    movl        gp = 0x0000080000000000
    brl         Fore4
    movl        gp = 0x0000100000000000
    brl         Fore4
    movl        gp = 0x0000200000000000
    brl         Fore4
    movl        gp = 0x0000400000000000
    brl         Fore4
    movl        gp = 0x0000800000000000
    brl         Fore4
    movl        gp = 0x0001000000000000
    brl         Fore4
    movl        gp = 0x0002000000000000
    brl         Fore4
    movl        gp = 0x0004000000000000
    brl         Fore4
    movl        gp = 0x0008000000000000
    brl         Fore4
    movl        gp = 0x0010000000000000
    brl         Fore4
    movl        gp = 0x0020000000000000
    brl         Fore4
    movl        gp = 0x0040000000000000
    brl         Fore4
    movl        gp = 0x0080000000000000
    brl         Fore4
    movl        gp = 0x0100000000000000
    brl         Fore4
    movl        gp = 0x0200000000000000
    brl         Fore4
    movl        gp = 0x0400000000000000
    brl         Fore4
    movl        gp = 0x0800000000000000
    brl         Fore4
    movl        gp = 0x1000000000000000
    brl         Fore4
    movl        gp = 0x2000000000000000
    brl         Fore4
    movl        gp = 0x4000000000000000
    brl         Fore4
    movl        gp = 0x8000000000000000
    brl         Fore4
    movl        gp = 0xffffffffffffffff
    brl         Fore4
    movl        gp = 0x0000000000000000
    brl         Fore4
    movl        gp = 0xfffffffffffffffe
    brl         Fore4
    movl        gp = 0xfffffffffffffffc
    brl         Fore4
    movl        gp = 0xfffffffffffffff8
    brl         Fore4
    movl        gp = 0xfffffffffffffff0  
    brl         Fore4
    movl        gp = 0xffffffffffffffe0
    brl         Fore4
    movl        gp = 0xffffffffffffffc0
    brl         Fore4
    movl        gp = 0xffffffffffffff80
    brl         Fore4
    movl        gp = 0xffffffffffffff00
    brl         Fore4
    movl        gp = 0xfffffffffffffe00
    brl         Fore4
    movl        gp = 0xfffffffffffffc00
    brl         Fore4
    movl        gp = 0xfffffffffffff800
    brl         Fore4
    movl        gp = 0xfffffffffffff000
    brl         Fore4
    movl        gp = 0xffffffffffffe000
    brl         Fore4
    movl        gp = 0xffffffffffffc000
    brl         Fore4
    movl        gp = 0xffffffffffff8000
    brl         Fore4
    movl        gp = 0xffffffffffff0000
    brl         Fore4
    movl        gp = 0xfffffffffffe0000
    brl         Fore4
    movl        gp = 0xfffffffffffc0000
    brl         Fore4
    movl        gp = 0xfffffffffff80000
    brl         Fore4
    movl        gp = 0xfffffffffff00000
    brl         Fore4
    movl        gp = 0xffffffffffe00000
    brl         Fore4
    movl        gp = 0xffffffffffc00000
    brl         Fore4
    movl        gp = 0xffffffffff800000
    brl         Fore4
    movl        gp = 0xffffffffff000000
    brl         Fore4
    movl        gp = 0xfffffffffe000000
    brl         Fore4
    movl        gp = 0xfffffffffc000000
    brl         Fore4
    movl        gp = 0xfffffffff8000000
    brl         Fore4
    movl        gp = 0xfffffffff0000000
    brl         Fore4
    movl        gp = 0xffffffffe0000000
    brl         Fore4
    movl        gp = 0xffffffffc0000000
    brl         Fore4
    movl        gp = 0xffffffff80000000
    brl         Fore4
    movl        gp = 0xffffffff00000000
    brl         Fore4
    movl        gp = 0xfffffffe00000000
    brl         Fore4
    movl        gp = 0xfffffffc00000000
    brl         Fore4
    movl        gp = 0xfffffff800000000
    brl         Fore4
    movl        gp = 0xfffffff000000000
    brl         Fore4
    movl        gp = 0xffffffe000000000
    brl         Fore4
    movl        gp = 0xffffffc000000000
    brl         Fore4
    movl        gp = 0xffffff8000000000
    brl         Fore4
    movl        gp = 0xffffff0000000000
    brl         Fore4
    movl        gp = 0xfffffe0000000000
    brl         Fore4
    movl        gp = 0xfffffc0000000000
    brl         Fore4
    movl        gp = 0xfffff80000000000
    brl         Fore4
    movl        gp = 0xfffff00000000000
    brl         Fore4
    movl        gp = 0xffffe00000000000
    brl         Fore4
    movl        gp = 0xffffc00000000000
    brl         Fore4
    movl        gp = 0xffff800000000000
    brl         Fore4
    movl        gp = 0xffff000000000000
    brl         Fore4
    movl        gp = 0xfffe000000000000
    brl         Fore4
    movl        gp = 0xfffc000000000000
    brl         Fore4
    movl        gp = 0xfff8000000000000
    brl         Fore4
    movl        gp = 0xfff0000000000000
    brl         Fore4
    movl        gp = 0xffe0000000000000
    brl         Fore4
    movl        gp = 0xffc0000000000000
    brl         Fore4
    movl        gp = 0xff80000000000000
    brl         Fore4
    movl        gp = 0xff00000000000000
    brl         Fore4
    movl        gp = 0xfe00000000000000
    brl         Fore4
    movl        gp = 0xfc00000000000000
    brl         Fore4
    movl        gp = 0xf800000000000000
    brl         Fore4
    movl        gp = 0xf000000000000000
    brl         Fore4
    movl        gp = 0xe000000000000000
    brl         Fore4
    movl        gp = 0xc000000000000000
    brl         Fore4
    movl        gp = 0x8000000000000000
    brl         Fore4
    movl        gp = 0x0000000000000000
    brl         Fore4
    movl        gp = 0x0000000000000000
    brl         Fore4
    brl.sptk.many Fore4
    brl.sptk.many Fore4
    brl.sptk.many Fore4
    brl.sptk.many Fore4

    movl        gp = 0xf0f0f0f0f0f0f0f0
    brl.sptk.many Fore9
Fore9:          
    brl.sptk.few Fore8
Fore8:  
    brl.sptk.few Fore8
    brl.sptk.few Fore8
    brl.sptk.few Fore8
    data1       0x05,0x00,0x00,0x00,0x01,0x00,0xff,0xff,0xff,0xff,0x7f,0x00,0xf0,0xff,0xff,0xc8
    data1       0x05,0x00,0x00,0x00,0x01,0x00,0xff,0xff,0xff,0xff,0x7f,0x00,0xf0,0xff,0xff,0xc0        
    data1       0x05,0x00,0x00,0x00,0x01,0x00,0xff,0xff,0xff,0xff,0x7f,0x00,0xf0,0xff,0xff,0xc8        
    data1       0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x25,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x45,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x85,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data1       0x05,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    movl        gp = 0xf0f0f0f0f0f0f0f0
        
{   .mii
        nop.m 0
        nop.i 0
        nop.i 0
} 
{   .mmi
        nop.m 0
        nop.m 0
        nop.i 0
} 
{ .mmb
        nop.m 0
        nop.m 0
        nop.b 0
}
{ .mmf
        nop.m 0
        nop.m 0
        nop.f 0
}
{ .mbb
        nop.m 0
        nop.b 0
        nop.b 0
}
    movl        gp = 0x0000000000000000
{ .mlx
    flushrs
    movl        gp = 0x0000000000000000
}        
    movl        gp = 0x0000000000000000
    .endp  Fore3#
        
    data4       0
    .align 64
        
    .proc  Fore4#
Fore4:
    movl        gp = 0x0000000000000000
    brl         Fore5
    .endp  Fore4#
        
    data4       0
    .align 64
        
    data4       0
    .align 64
        
    .proc  Fore5#
Fore5:
    movl        gp = 0xffffffffffffffff
    brl         Fore6
    .endp  Fore5#
        
    data4       0
    .align 64
        
    .proc  Fore6#
Fore6:
    movl        gp = 0x0000000000000000
    brl         Fore7
    .endp  Fore6#
        
    data4       0
    .align 64
        
    .proc  Fore7#
Fore7:
    movl        gp = 0xffffffffffffffff
    brl         Fore6
    brl.call.dptk.many b0=Fore6
    br.call.dptk.many b0=Fore6
    br.ret.dpnt.many b0
    br.ret.dptk.many b0
    br.ret.spnt.many b0
    br.ret.sptk.many b0
    .endp  Fore7#
        
    data4       0
    .align 64

    .proc  Call8#
Call8:
{
        alloc  r41=ar.pfs, 10, 0, 8, 0
        adds   r49=0, r39
        mov    r40=rp
}
{
        adds   r48=0, r38
        adds   r47=0, r37
        adds   r46=0, r36 ;;
}
{
        adds   r45=0, r35
        adds   r44=0, r34
        adds   r43=0, r33
}
{
        movl   gp = 0xffffffffffffffff ;;
}
{
        adds   r42=0, r32
        brl.call.sptk.few rp=Call8Real  ;; 
}
Call8Real:      
{
        movl   gp = 0xffffffffffffffff ;;
}
{
        nop.m  0
        mov    rp=r40, +0 ;;
        mov.i  ar.pfs=r41
}
{
        nop.m  0
        nop.m  0
        br.ret.sptk.many rp ;;
}
    .endp  Call8#
                
    data4       0
    .align 64
        
    .proc  Pass8#
Pass8:
{
        alloc  r41=ar.pfs, 11, 0, 8, 0
        mov    r40=rp
}
{
        adds   r50=0, r39
        adds   r49=0, r38
        adds   r48=0, r37 ;;
}
{
        adds   r47=0, r36
        adds   r46=0, r35
        adds   r45=0, r34
}
{
        adds   r44=0, r33
        adds   r43=0, r32
        adds   r42=0, gp  ;; 
}
{
        movl   gp = 0xffffffffffffffff ;;
}
{
        brl.call.sptk.few rp=Pass8Real  ;; 
}
Pass8Real:      
{
        adds   gp=0, r42
        mov    rp=r40, +0 ;;
        mov.i  ar.pfs=r41
}
{
        nop.m  0
        nop.m  0
        br.ret.sptk.many rp ;;
}
    .endp  Pass8#
                
    data4       0
    .align 64
        
    .proc  Last#
Last:
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    .skip       0x1000
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    data4       0xffffffff
    .endp  Last#
        
// End
