Files
ispc/examples_cuda/mandelbrot_tasks3d/mandelbrot_task.ptx
2013-11-04 11:44:49 +01:00

321 lines
11 KiB
Plaintext

//
// Generated by LLVM NVPTX Back-End
//
.version 3.1
.target sm_35, texmode_independent
.address_size 64
// .globl __aos_to_soa4_float1
// @__aos_to_soa4_float1
.func __aos_to_soa4_float1(
.param .align 4 .b8 __aos_to_soa4_float1_param_0[4],
.param .align 4 .b8 __aos_to_soa4_float1_param_1[4],
.param .align 4 .b8 __aos_to_soa4_float1_param_2[4],
.param .align 4 .b8 __aos_to_soa4_float1_param_3[4],
.param .b64 __aos_to_soa4_float1_param_4,
.param .b64 __aos_to_soa4_float1_param_5,
.param .b64 __aos_to_soa4_float1_param_6,
.param .b64 __aos_to_soa4_float1_param_7
)
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
// BB#0:
ld.param.f32 %f0, [__aos_to_soa4_float1_param_0];
ld.param.f32 %f1, [__aos_to_soa4_float1_param_1];
ld.param.f32 %f2, [__aos_to_soa4_float1_param_2];
ld.param.f32 %f3, [__aos_to_soa4_float1_param_3];
ld.param.u64 %rl0, [__aos_to_soa4_float1_param_4];
ld.param.u64 %rl1, [__aos_to_soa4_float1_param_5];
ld.param.u64 %rl2, [__aos_to_soa4_float1_param_6];
ld.param.u64 %rl3, [__aos_to_soa4_float1_param_7];
st.f32 [%rl0], %f0;
st.f32 [%rl1], %f1;
st.f32 [%rl2], %f2;
st.f32 [%rl3], %f3;
ret;
}
// .globl __soa_to_aos4_float1
.func __soa_to_aos4_float1(
.param .align 4 .b8 __soa_to_aos4_float1_param_0[4],
.param .align 4 .b8 __soa_to_aos4_float1_param_1[4],
.param .align 4 .b8 __soa_to_aos4_float1_param_2[4],
.param .align 4 .b8 __soa_to_aos4_float1_param_3[4],
.param .b64 __soa_to_aos4_float1_param_4,
.param .b64 __soa_to_aos4_float1_param_5,
.param .b64 __soa_to_aos4_float1_param_6,
.param .b64 __soa_to_aos4_float1_param_7
) // @__soa_to_aos4_float1
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
// BB#0:
ld.param.u64 %rl0, [__soa_to_aos4_float1_param_4];
ld.param.f32 %f0, [__soa_to_aos4_float1_param_0];
ld.param.u64 %rl1, [__soa_to_aos4_float1_param_5];
ld.param.f32 %f1, [__soa_to_aos4_float1_param_1];
ld.param.u64 %rl2, [__soa_to_aos4_float1_param_6];
ld.param.f32 %f2, [__soa_to_aos4_float1_param_2];
ld.param.u64 %rl3, [__soa_to_aos4_float1_param_7];
ld.param.f32 %f3, [__soa_to_aos4_float1_param_3];
st.f32 [%rl0], %f0;
st.f32 [%rl1], %f1;
st.f32 [%rl2], %f2;
st.f32 [%rl3], %f3;
ret;
}
// .globl __aos_to_soa3_float1
.func __aos_to_soa3_float1(
.param .align 4 .b8 __aos_to_soa3_float1_param_0[4],
.param .align 4 .b8 __aos_to_soa3_float1_param_1[4],
.param .align 4 .b8 __aos_to_soa3_float1_param_2[4],
.param .b64 __aos_to_soa3_float1_param_3,
.param .b64 __aos_to_soa3_float1_param_4,
.param .b64 __aos_to_soa3_float1_param_5
) // @__aos_to_soa3_float1
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
// BB#0:
ld.param.u64 %rl0, [__aos_to_soa3_float1_param_3];
ld.param.u64 %rl1, [__aos_to_soa3_float1_param_4];
ld.param.u64 %rl2, [__aos_to_soa3_float1_param_5];
ld.param.f32 %f0, [__aos_to_soa3_float1_param_0];
ld.param.f32 %f1, [__aos_to_soa3_float1_param_1];
ld.param.f32 %f2, [__aos_to_soa3_float1_param_2];
st.f32 [%rl0], %f0;
st.f32 [%rl1], %f1;
st.f32 [%rl2], %f2;
ret;
}
// .globl __soa_to_aos3_float1
.func __soa_to_aos3_float1(
.param .align 4 .b8 __soa_to_aos3_float1_param_0[4],
.param .align 4 .b8 __soa_to_aos3_float1_param_1[4],
.param .align 4 .b8 __soa_to_aos3_float1_param_2[4],
.param .b64 __soa_to_aos3_float1_param_3,
.param .b64 __soa_to_aos3_float1_param_4,
.param .b64 __soa_to_aos3_float1_param_5
) // @__soa_to_aos3_float1
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
// BB#0:
ld.param.u64 %rl0, [__soa_to_aos3_float1_param_3];
ld.param.u64 %rl1, [__soa_to_aos3_float1_param_4];
ld.param.u64 %rl2, [__soa_to_aos3_float1_param_5];
ld.param.f32 %f0, [__soa_to_aos3_float1_param_0];
ld.param.f32 %f1, [__soa_to_aos3_float1_param_1];
ld.param.f32 %f2, [__soa_to_aos3_float1_param_2];
st.f32 [%rl0], %f0;
st.f32 [%rl1], %f1;
st.f32 [%rl2], %f2;
ret;
}
// .globl mandelbrot_scanline
.entry mandelbrot_scanline(
.param .f32 mandelbrot_scanline_param_0,
.param .f32 mandelbrot_scanline_param_1,
.param .f32 mandelbrot_scanline_param_2,
.param .f32 mandelbrot_scanline_param_3,
.param .u32 mandelbrot_scanline_param_4,
.param .u32 mandelbrot_scanline_param_5,
.param .u32 mandelbrot_scanline_param_6,
.param .u32 mandelbrot_scanline_param_7,
.param .u32 mandelbrot_scanline_param_8,
.param .u64 .ptr .align 4 mandelbrot_scanline_param_9
) // @mandelbrot_scanline
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
// BB#0: // %allocas
ld.param.u32 %r6, [mandelbrot_scanline_param_5];
ld.param.u32 %r5, [mandelbrot_scanline_param_7];
mov.u32 %r7, %ctaid.y;
mul.lo.s32 %r0, %r7, %r5;
mad.lo.s32 %r1, %r7, %r5, %r5;
setp.lt.s32 %p0, %r1, %r6;
selp.b32 %r1, %r1, %r6, %p0;
setp.ge.s32 %p0, %r0, %r1;
@%p0 bra BB4_13;
// BB#1: // %for_test28.preheader.lr.ph
ld.param.f32 %f0, [mandelbrot_scanline_param_0];
ld.param.f32 %f1, [mandelbrot_scanline_param_1];
ld.param.f32 %f2, [mandelbrot_scanline_param_2];
ld.param.f32 %f3, [mandelbrot_scanline_param_3];
ld.param.u32 %r1, [mandelbrot_scanline_param_4];
ld.param.u32 %r4, [mandelbrot_scanline_param_6];
ld.param.u32 %r2, [mandelbrot_scanline_param_8];
ld.param.u64 %rl0, [mandelbrot_scanline_param_9];
mov.u32 %r8, %ctaid.x;
mul.lo.s32 %r3, %r8, %r4;
mad.lo.s32 %r4, %r8, %r4, %r4;
setp.lt.s32 %p0, %r4, %r1;
selp.b32 %r4, %r4, %r1, %p0;
setp.gt.s32 %p0, %r2, 0;
not.b32 %r6, %r6;
add.s32 %r7, %r7, 1;
mul.lo.s32 %r5, %r7, %r5;
not.b32 %r5, %r5;
setp.gt.s32 %p1, %r6, %r5;
selp.b32 %r5, %r6, %r5, %p1;
not.b32 %r5, %r5;
BB4_2: // %for_test28.preheader
// =>This Loop Header: Depth=1
// Child Loop BB4_15 Depth 2
// Child Loop BB4_8 Depth 2
// Child Loop BB4_11 Depth 3
setp.ge.s32 %p1, %r3, %r4;
@%p1 bra BB4_12;
// BB#3: // %for_loop30.lr.ph
// in Loop: Header=BB4_2 Depth=1
mul.lo.s32 %r6, %r0, %r1;
mov.u32 %r7, %r3;
@%p0 bra BB4_4;
bra.uni BB4_15;
BB4_4: // in Loop: Header=BB4_2 Depth=1
cvt.rn.f32.s32 %f4, %r0;
fma.rn.f32 %f4, %f4, %f3, %f2;
mov.u32 %r7, %r3;
BB4_8: // %for_loop.i.lr.ph.us
// Parent Loop BB4_2 Depth=1
// => This Loop Header: Depth=2
// Child Loop BB4_11 Depth 3
mov.u32 %r9, %tid.x;
mov.u32 %r8, WARP_SZ;
add.s32 %r10, %r8, -1;
and.b32 %r10, %r10, %r9;
add.s32 %r11, %r10, %r7;
cvt.rn.f32.s32 %f5, %r11;
fma.rn.f32 %f5, %f5, %f1, %f0;
mov.u32 %r10, 0;
mov.pred %p1, 0;
mov.pred %p3, -1;
mov.pred %p4, %p0;
mov.pred %p2, %p1;
mov.f32 %f7, %f5;
mov.f32 %f6, %f4;
BB4_11: // %for_loop.i.us
// Parent Loop BB4_2 Depth=1
// Parent Loop BB4_8 Depth=2
// => This Inner Loop Header: Depth=3
and.pred %p4, %p3, %p4;
mul.f32 %f8, %f7, %f7;
fma.rn.f32 %f9, %f6, %f6, %f8;
setp.gtu.f32 %p3, %f9, 0f40800000;
and.pred %p3, %p4, %p3;
or.pred %p2, %p3, %p2;
xor.pred %p5, %p2, %p4;
mov.pred %p3, %p1;
@!%p5 bra BB4_10;
bra.uni BB4_9;
BB4_9: // %not_all_continued_or_breaked.i.us
// in Loop: Header=BB4_11 Depth=3
mul.f32 %f9, %f6, %f6;
not.pred %p3, %p2;
and.pred %p3, %p4, %p3;
sub.f32 %f8, %f8, %f9;
add.f32 %f8, %f5, %f8;
add.f32 %f7, %f7, %f7;
fma.rn.f32 %f6, %f6, %f7, %f4;
mov.f32 %f7, %f8;
BB4_10: // %for_step.i.us
// in Loop: Header=BB4_11 Depth=3
add.s32 %r12, %r10, 1;
selp.b32 %r10, %r12, %r10, %p3;
setp.lt.s32 %p4, %r10, %r2;
and.pred %p5, %p3, %p4;
@%p5 bra BB4_11;
// BB#5: // %mandel___vyfvyfvyi.exit.us
// in Loop: Header=BB4_8 Depth=2
setp.ge.s32 %p1, %r11, %r4;
@%p1 bra BB4_7;
// BB#6: // %if_then.us
// in Loop: Header=BB4_8 Depth=2
add.s32 %r11, %r8, 1073741823;
and.b32 %r9, %r11, %r9;
add.s32 %r11, %r7, %r6;
add.s32 %r9, %r11, %r9;
shl.b32 %r9, %r9, 2;
cvt.s64.s32 %rl1, %r9;
add.s64 %rl1, %rl1, %rl0;
st.u32 [%rl1], %r10;
BB4_7: // %if_exit.us
// in Loop: Header=BB4_8 Depth=2
add.s32 %r7, %r8, %r7;
setp.lt.s32 %p1, %r7, %r4;
@%p1 bra BB4_8;
bra.uni BB4_12;
BB4_15: // %mandel___vyfvyfvyi.exit
// Parent Loop BB4_2 Depth=1
// => This Inner Loop Header: Depth=2
mov.u32 %r9, %tid.x;
mov.u32 %r8, WARP_SZ;
add.s32 %r10, %r8, -1;
and.b32 %r10, %r10, %r9;
add.s32 %r10, %r10, %r7;
setp.lt.s32 %p1, %r10, %r4;
@%p1 bra BB4_16;
bra.uni BB4_14;
BB4_16: // %if_then
// in Loop: Header=BB4_15 Depth=2
add.s32 %r10, %r8, 1073741823;
and.b32 %r9, %r10, %r9;
add.s32 %r10, %r7, %r6;
add.s32 %r9, %r10, %r9;
shl.b32 %r9, %r9, 2;
cvt.s64.s32 %rl1, %r9;
add.s64 %rl1, %rl1, %rl0;
mov.u32 %r9, 0;
st.u32 [%rl1], %r9;
BB4_14: // %if_exit
// in Loop: Header=BB4_15 Depth=2
add.s32 %r7, %r8, %r7;
setp.lt.s32 %p1, %r7, %r4;
@%p1 bra BB4_15;
BB4_12: // %for_exit31
// in Loop: Header=BB4_2 Depth=1
add.s32 %r0, %r0, 1;
setp.eq.s32 %p1, %r0, %r5;
@%p1 bra BB4_13;
bra.uni BB4_2;
BB4_13: // %for_exit
ret;
}