matrix_operations_cuda 0.1.2

A library to perform matrix operations using cuda
Documentation
//
// Generated by NVIDIA NVVM Compiler
//
// Compiler Build ID: CL-32267302
// Cuda compilation tools, release 12.0, V12.0.140
// Based on NVVM 7.0.1
//

.version 8.0
.target sm_52
.address_size 64

	// .globl	add

.visible .entry add(
	.param .u64 add_param_0,
	.param .u64 add_param_1,
	.param .u64 add_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<11>;


	ld.param.u64 	%rd1, [add_param_0];
	ld.param.u64 	%rd2, [add_param_1];
	ld.param.u64 	%rd3, [add_param_2];
	cvta.to.global.u64 	%rd4, %rd3;
	cvta.to.global.u64 	%rd5, %rd2;
	cvta.to.global.u64 	%rd6, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd7, %r7, 4;
	add.s64 	%rd8, %rd6, %rd7;
	ld.global.f32 	%f1, [%rd8];
	add.s64 	%rd9, %rd5, %rd7;
	ld.global.f32 	%f2, [%rd9];
	add.f32 	%f3, %f1, %f2;
	add.s64 	%rd10, %rd4, %rd7;
	st.global.f32 	[%rd10], %f3;
	ret;

}
	// .globl	sub
.visible .entry sub(
	.param .u64 sub_param_0,
	.param .u64 sub_param_1,
	.param .u64 sub_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<11>;


	ld.param.u64 	%rd1, [sub_param_0];
	ld.param.u64 	%rd2, [sub_param_1];
	ld.param.u64 	%rd3, [sub_param_2];
	cvta.to.global.u64 	%rd4, %rd3;
	cvta.to.global.u64 	%rd5, %rd2;
	cvta.to.global.u64 	%rd6, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd7, %r7, 4;
	add.s64 	%rd8, %rd6, %rd7;
	ld.global.f32 	%f1, [%rd8];
	add.s64 	%rd9, %rd5, %rd7;
	ld.global.f32 	%f2, [%rd9];
	sub.f32 	%f3, %f1, %f2;
	add.s64 	%rd10, %rd4, %rd7;
	st.global.f32 	[%rd10], %f3;
	ret;

}
	// .globl	dot
.visible .entry dot(
	.param .u64 dot_param_0,
	.param .u64 dot_param_1,
	.param .u64 dot_param_2,
	.param .u32 dot_param_3,
	.param .u32 dot_param_4,
	.param .u32 dot_param_5,
	.param .u32 dot_param_6
)
{
	.reg .pred 	%p<6>;
	.reg .f32 	%f<30>;
	.reg .b32 	%r<33>;
	.reg .b64 	%rd<35>;


	ld.param.u64 	%rd18, [dot_param_0];
	ld.param.u64 	%rd19, [dot_param_1];
	ld.param.u64 	%rd17, [dot_param_2];
	ld.param.u32 	%r13, [dot_param_4];
	ld.param.u32 	%r14, [dot_param_5];
	ld.param.u32 	%r15, [dot_param_6];
	cvta.to.global.u64 	%rd1, %rd19;
	cvta.to.global.u64 	%rd2, %rd18;
	mov.u32 	%r16, %ntid.y;
	mov.u32 	%r17, %ctaid.x;
	mov.u32 	%r18, %tid.y;
	mad.lo.s32 	%r19, %r16, %r17, %r18;
	mov.u32 	%r20, %ntid.x;
	mov.u32 	%r21, %tid.x;
	mad.lo.s32 	%r1, %r19, %r20, %r21;
	div.s32 	%r3, %r1, %r15;
	mul.lo.s32 	%r22, %r3, %r15;
	sub.s32 	%r2, %r1, %r22;
	setp.lt.s32 	%p1, %r14, 1;
	mov.f32 	%f29, 0f00000000;
	@%p1 bra 	$L__BB2_7;

	add.s32 	%r24, %r14, -1;
	and.b32  	%r32, %r14, 3;
	setp.lt.u32 	%p2, %r24, 3;
	mov.f32 	%f29, 0f00000000;
	mov.u32 	%r31, 0;
	@%p2 bra 	$L__BB2_4;

	sub.s32 	%r30, %r14, %r32;
	mul.wide.s32 	%rd20, %r2, 4;
	add.s64 	%rd32, %rd1, %rd20;
	mul.lo.s32 	%r26, %r3, %r13;
	mul.wide.s32 	%rd21, %r26, 4;
	add.s64 	%rd22, %rd2, %rd21;
	add.s64 	%rd31, %rd22, 8;
	mul.wide.s32 	%rd5, %r15, 4;

$L__BB2_3:
	ld.global.f32 	%f12, [%rd32];
	ld.global.f32 	%f13, [%rd31+-8];
	fma.rn.f32 	%f14, %f13, %f12, %f29;
	add.s64 	%rd23, %rd32, %rd5;
	ld.global.f32 	%f15, [%rd23];
	ld.global.f32 	%f16, [%rd31+-4];
	fma.rn.f32 	%f17, %f16, %f15, %f14;
	add.s64 	%rd24, %rd23, %rd5;
	ld.global.f32 	%f18, [%rd24];
	ld.global.f32 	%f19, [%rd31];
	fma.rn.f32 	%f20, %f19, %f18, %f17;
	add.s64 	%rd25, %rd24, %rd5;
	add.s64 	%rd32, %rd25, %rd5;
	ld.global.f32 	%f21, [%rd25];
	ld.global.f32 	%f22, [%rd31+4];
	fma.rn.f32 	%f29, %f22, %f21, %f20;
	add.s32 	%r31, %r31, 4;
	add.s64 	%rd31, %rd31, 16;
	add.s32 	%r30, %r30, -4;
	setp.ne.s32 	%p3, %r30, 0;
	@%p3 bra 	$L__BB2_3;

$L__BB2_4:
	setp.eq.s32 	%p4, %r32, 0;
	@%p4 bra 	$L__BB2_7;

	mad.lo.s32 	%r27, %r31, %r15, %r2;
	mul.wide.s32 	%rd26, %r27, 4;
	add.s64 	%rd34, %rd1, %rd26;
	mul.wide.s32 	%rd11, %r15, 4;
	mad.lo.s32 	%r28, %r3, %r13, %r31;
	mul.wide.s32 	%rd27, %r28, 4;
	add.s64 	%rd33, %rd2, %rd27;

$L__BB2_6:
	.pragma "nounroll";
	ld.global.f32 	%f23, [%rd34];
	ld.global.f32 	%f24, [%rd33];
	fma.rn.f32 	%f29, %f24, %f23, %f29;
	add.s64 	%rd34, %rd34, %rd11;
	add.s64 	%rd33, %rd33, 4;
	add.s32 	%r32, %r32, -1;
	setp.ne.s32 	%p5, %r32, 0;
	@%p5 bra 	$L__BB2_6;

$L__BB2_7:
	cvta.to.global.u64 	%rd28, %rd17;
	mul.wide.s32 	%rd29, %r1, 4;
	add.s64 	%rd30, %rd28, %rd29;
	st.global.f32 	[%rd30], %f29;
	ret;

}
	// .globl	add_scalar
.visible .entry add_scalar(
	.param .u64 add_scalar_param_0,
	.param .u64 add_scalar_param_1,
	.param .f32 add_scalar_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<8>;


	ld.param.u64 	%rd1, [add_scalar_param_0];
	ld.param.u64 	%rd2, [add_scalar_param_1];
	ld.param.f32 	%f1, [add_scalar_param_2];
	cvta.to.global.u64 	%rd3, %rd2;
	cvta.to.global.u64 	%rd4, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd5, %r7, 4;
	add.s64 	%rd6, %rd4, %rd5;
	ld.global.f32 	%f2, [%rd6];
	add.f32 	%f3, %f2, %f1;
	add.s64 	%rd7, %rd3, %rd5;
	st.global.f32 	[%rd7], %f3;
	ret;

}
	// .globl	sub_scalar
.visible .entry sub_scalar(
	.param .u64 sub_scalar_param_0,
	.param .u64 sub_scalar_param_1,
	.param .f32 sub_scalar_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<8>;


	ld.param.u64 	%rd1, [sub_scalar_param_0];
	ld.param.u64 	%rd2, [sub_scalar_param_1];
	ld.param.f32 	%f1, [sub_scalar_param_2];
	cvta.to.global.u64 	%rd3, %rd2;
	cvta.to.global.u64 	%rd4, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd5, %r7, 4;
	add.s64 	%rd6, %rd4, %rd5;
	ld.global.f32 	%f2, [%rd6];
	sub.f32 	%f3, %f2, %f1;
	add.s64 	%rd7, %rd3, %rd5;
	st.global.f32 	[%rd7], %f3;
	ret;

}
	// .globl	mul_scalar
.visible .entry mul_scalar(
	.param .u64 mul_scalar_param_0,
	.param .u64 mul_scalar_param_1,
	.param .f32 mul_scalar_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<8>;


	ld.param.u64 	%rd1, [mul_scalar_param_0];
	ld.param.u64 	%rd2, [mul_scalar_param_1];
	ld.param.f32 	%f1, [mul_scalar_param_2];
	cvta.to.global.u64 	%rd3, %rd2;
	cvta.to.global.u64 	%rd4, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd5, %r7, 4;
	add.s64 	%rd6, %rd4, %rd5;
	ld.global.f32 	%f2, [%rd6];
	mul.f32 	%f3, %f2, %f1;
	add.s64 	%rd7, %rd3, %rd5;
	st.global.f32 	[%rd7], %f3;
	ret;

}
	// .globl	div_scalar
.visible .entry div_scalar(
	.param .u64 div_scalar_param_0,
	.param .u64 div_scalar_param_1,
	.param .f32 div_scalar_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<8>;


	ld.param.u64 	%rd1, [div_scalar_param_0];
	ld.param.u64 	%rd2, [div_scalar_param_1];
	ld.param.f32 	%f1, [div_scalar_param_2];
	cvta.to.global.u64 	%rd3, %rd2;
	cvta.to.global.u64 	%rd4, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd5, %r7, 4;
	add.s64 	%rd6, %rd4, %rd5;
	ld.global.f32 	%f2, [%rd6];
	div.rn.f32 	%f3, %f2, %f1;
	add.s64 	%rd7, %rd3, %rd5;
	st.global.f32 	[%rd7], %f3;
	ret;

}
	// .globl	scalar_sub
.visible .entry scalar_sub(
	.param .u64 scalar_sub_param_0,
	.param .u64 scalar_sub_param_1,
	.param .f32 scalar_sub_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<8>;


	ld.param.u64 	%rd1, [scalar_sub_param_0];
	ld.param.u64 	%rd2, [scalar_sub_param_1];
	ld.param.f32 	%f1, [scalar_sub_param_2];
	cvta.to.global.u64 	%rd3, %rd2;
	cvta.to.global.u64 	%rd4, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd5, %r7, 4;
	add.s64 	%rd6, %rd4, %rd5;
	ld.global.f32 	%f2, [%rd6];
	sub.f32 	%f3, %f1, %f2;
	add.s64 	%rd7, %rd3, %rd5;
	st.global.f32 	[%rd7], %f3;
	ret;

}
	// .globl	scalar_div
.visible .entry scalar_div(
	.param .u64 scalar_div_param_0,
	.param .u64 scalar_div_param_1,
	.param .f32 scalar_div_param_2
)
{
	.reg .f32 	%f<4>;
	.reg .b32 	%r<8>;
	.reg .b64 	%rd<8>;


	ld.param.u64 	%rd1, [scalar_div_param_0];
	ld.param.u64 	%rd2, [scalar_div_param_1];
	ld.param.f32 	%f1, [scalar_div_param_2];
	cvta.to.global.u64 	%rd3, %rd2;
	cvta.to.global.u64 	%rd4, %rd1;
	mov.u32 	%r1, %tid.x;
	mov.u32 	%r2, %tid.y;
	mov.u32 	%r3, %ntid.x;
	mov.u32 	%r4, %ctaid.x;
	mov.u32 	%r5, %ntid.y;
	mad.lo.s32 	%r6, %r5, %r4, %r2;
	mad.lo.s32 	%r7, %r6, %r3, %r1;
	mul.wide.s32 	%rd5, %r7, 4;
	add.s64 	%rd6, %rd4, %rd5;
	ld.global.f32 	%f2, [%rd6];
	div.rn.f32 	%f3, %f1, %f2;
	add.s64 	%rd7, %rd3, %rd5;
	st.global.f32 	[%rd7], %f3;
	ret;

}