Home | History | Annotate | Download | only in tests
      1 	.globl func_add1, func_add1_end
      2 	.proc func_add1
      3 func_add1:
      4 {.mib;	add r8 = 1, r32
      5 	nop.i 0
      6 	br.ret.sptk.many rp
      7 }
      8 func_add1_end:
      9 	.endp func_add1
     10 
     11 	.globl func_add3, func_add3_end
     12 	.proc func_add3
     13 func_add3:
     14 {.mmi;	alloc loc0 = ar.pfs, 2, 1, 2, 0
     15 	mov r2 = sp
     16 	add sp = -16, sp
     17 }	;;
     18 {.mii;	ld8 r8 = [in1], 8		// load the function pointer
     19 	mov r3 = rp
     20 	mov rp = loc0			// trash rp
     21 }	;;
     22 {.mmi;	ld8 r9 = [r8], 8		// load the entry-point
     23 	st8 [r2] = r3
     24 	mov out0 = in0
     25 }	;;
     26 {.mii;	ld8 gp = [r8]			// load the gp
     27 	mov b6 = r9
     28 	mov out1 = in1
     29 }
     30 {.mib;	nop 0
     31 	nop 0
     32 	br.call.sptk rp = b6
     33 }
     34 {.mmi;	add r2 = 16, sp
     35 	;;
     36 	ld8 r3 = [r2]			// r3 = saved rp
     37 	mov ar.pfs = loc0
     38 }	;;
     39 {.mii;	nop 0
     40 	mov rp = r3
     41 	adds sp = 16, sp
     42 }	;;
     43 {.mib;	st8 [sp] = in0			// trash rp save location
     44 	add r8 = 2, r8
     45 	br.ret.sptk.many rp
     46 }
     47 func_add3_end:
     48 	.endp func_add3
     49 
     50 	.globl func_vframe, func_vframe_end
     51 	.proc func_vframe
     52 func_vframe:
     53 {.mii;	alloc r16 = ar.pfs, 1, 2, 0, 0	// 0
     54 	mov loc0 = rp
     55 	mov loc1 = sp
     56 }	;;
     57 {.mmi;	sub sp = sp, in0
     58 	st8 [loc1] = r16
     59 	mov r2 = -99			// 0
     60 }	;;
     61 {.mii;	nop 0
     62 	mov rp = r2
     63 	mov ar.pfs = r0
     64 }
     65 {.mib;	mov r16 = r2
     66 	tbit.nz p6, p0 = in0, 4
     67 (p6)	br.cond.sptk.many .exit
     68 }	;;
     69 {.mmi;	ld8 r16 = [loc1]
     70 	;;
     71 	mov r3 = loc0			// 8 move saved rp to r3
     72 	mov ar.pfs = r16
     73 }	;;
     74 {.mmi;	mov sp = loc1			// 10
     75 	st8 [loc1] = r0			// trash saved pfs
     76 	mov loc0 = r2
     77 }	;;
     78 {.mib;	mov r8 = 10
     79 	mov rp = r3
     80 	br.ret.sptk.many rp
     81 }
     82 .exit:
     83 {.mmi;	ld8 r16 = [loc1]
     84 	;;
     85 	sub sp = 32, sp
     86 	mov ar.pfs = r16
     87 }	;;
     88 {.mmi;	mov sp = loc1
     89 	st8 [loc1] = r0			// trash saved pfs
     90 	mov rp = loc0
     91 }
     92 {.mib;	nop 0
     93 	mov r8 = 4
     94 	br.ret.sptk.many rp
     95 }
     96 func_vframe_end:
     97 	.endp func_vframe
     98 
     99 #ifdef __linux__
    100         /* We do not need executable stack.  */
    101         .section        .note.GNU-stack,"",@progbits
    102 #endif
    103