// XXX XXX XXX CAREFUL WITH IMAGINARY TIME EVOLUTION: MUST BE tau=-it

//#include <math.h>
#include <stdio.h>
#include <stdlib.h>
//#include <time.h>
//#include <cuda.h> // XXX REALLY NECESSARY?

#define SHARED_SIZE_PRIMARY 28
#define SHARED_SIZE_SECONDARY 14

void evolve2d(float *ket, float t, float deltat, float *energias, int order, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay); 
void evolve2dO2(float *ket, float t, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float kxax, float coskxax, float sinkyay, float kyay);
void H2d(float *ket, float deltat, int id, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay);
__global__ void H2d_step(float *ket_in, float *ket_out, int dataketid, float deltat, float *prepared_energias, int pbcx, int pbcy, int Nx, int Ny, float Vx, float Vy, float sinkxax, float coskxax, float sinkyay, float coskyay);
__global__ void H2d_x(float *ket, float deltat, int id, int pbcx, int Nx, int Ny, float Vx, float sinkxax, float coskxax);
__global__ void H2d_y(float *ket, float deltat, int id, int pbcy, int Nx, int Ny, float Vy, float sinkyay, float coskyay);
__global__ void Hdiag2d(float *ket, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy);
//__global__ void H2di_x(float *ket, float deltatau, int id, int pbcx, int Nx, int Ny, float Vx, float sinkxax, float coskxax);
//__global__ void H2di_y(float *ket, float deltatau, int id, int pbcy, int Nx, int Ny, float Vy, float sinkyay, float coskyay);
//__global__ void Hdiag2di(float *ket, float deltatau, float *energias, int Nx, int Ny, float Vx, float Vy);

// Definition of variables {{{
/*
	int		debug;
	float	pi;
	float hbar;
	float	dNx;
	float	dNy;
	float	Lx;
	float	Ly;
	//int 	pbcx;
	//int 	pbcy;
	float	lambda;	
	float	innerR;
	float	outerR;
	float	alpha;
	float	beta;
	float	dt;
	float	dtmax;
	int		order;
	int		gsteps;
	int		verbose;
	int		debut;
	int		ground;
	int		nodyn;
	int		pars;
	char*	filepars;
	float	cloakEnergy;
	float	tmax;
	float	mass0;
	//float	ax;
	//float	ay;
	//float	kx;
	//float	ky;
*/
//}}}

// Definition of functions { { {
void evolve2d(float *ket, float t, float deltat, float *energias, int order, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay) {{{
{
	if (order==2) evolve2dO2(ket, t, deltat, energias, Nx, Ny, Vx, Vy, pbcx, pbcy, sinkxax, coskxax, sinkyay, coskyay);
//	if (order==4) evolve2dO4(ket, t, deltat, energias, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);
} }}}
void evolve2dO2(float *ket, float t, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay) {{{
//	This function leads the real-time evolution in second order up to time t.
//	float	ket			1D array describing the ket always alternating real and imaginary part of the ket
//	float	t			duration of the evolution
//	float	deltat		incremental timestep
//	float	energias*	Potential surface (e.g. external trapping potential) acting on the condensate
//	int		Nx			Number of discretization points in x direction
//	int		Ny			Number of discretization points in y direction
//	float	Vx			Off-disgonal matrix terms in x direction
//	float	Vy			Off-disgonal matrix terms in y direction
//	float	sinkxax		sin(kx*ax) - for better performance
//	float	coskxax		cos(kx*ax) - for better performance
//	float	sinkyay		sin(kx*ax) - for better performance
//	float	coskyay		cos(kx*ax) - for better performance
{
	// Threadsize depends on local (cache) memory.
	// My cards have only 16kB per block.
	// Each floating point takes 4 bits x 2 for complex numbers
	// Therefore, 32*32*8 = 8kB is already quite a lot.
	// XXX TRY LARGER VALUES
	// XXX 45x45*8 = 16200 < 16384
	int threadsPerBlockX         = SHARED_SIZE_PRIMARY;
	int threadsPerBlockY         = SHARED_SIZE_SECONDARY;
	int overhead                 = 2;
	int effectiveThreadsPerBlock = threadsPerBlockX - 2*overhead;
	int blocksPerGridX = (Nx + effectiveThreadsPerBlock - 1) / effectiveThreadsPerBlock;
	int blocksPerGridY = (Ny + effectiveThreadsPerBlock - 1) / effectiveThreadsPerBlock;
	dim3 threadsPerBlock(threadsPerBlockX, threadsPerBlockY);
	dim3 blocksPerGrid(blocksPerGridX, blocksPerGridY);
	
	int Nbrofits = (int) (t/deltat);
	float Remainingtime=t-((float)Nbrofits)*deltat;
	
	//int *inputarray = (int*) malloc(blocksPerGridX*blocksPerGridY*sizeof(int));
	//for (int i=0; i<blocksPerGridX*blocksPerGridY; i++) inputarray[i] = 0;

	float *prepared_energias = (float*) malloc(2*Nx*Ny*sizeof(float));
	for (int i=0; i<Nx*Ny; i++)
	{
		prepared_energias[2*i]   = cos(-deltat*(energias[i]-2.0*Vx-2.0*Vy));
		prepared_energias[2*i+1] = sin(-deltat*(energias[i]-2.0*Vx-2.0*Vy));
		//prepared_energias[2*i]   = 1.0;
		//prepared_energias[2*i+1] = 0.0;
	}

	float *d_ket0;
	float *d_ket1;
	float *d_prepared_energias;
	//int *d_inputarray;
	cudaMalloc((void**)&d_ket0, 2*Nx*Ny*sizeof(float));
	cudaMalloc((void**)&d_ket1, 2*Nx*Ny*sizeof(float));
	cudaMalloc((void**)&d_prepared_energias, 2*Nx*Ny*sizeof(float));
	//cudaMalloc((void**)&d_inputarray, blocksPerGridX*blocksPerGridY*sizeof(int));
    cudaMemcpy(d_ket0, ket, 2*Nx*Ny*sizeof(float), cudaMemcpyHostToDevice);
    cudaMemcpy(d_ket1, ket, 2*Nx*Ny*sizeof(float), cudaMemcpyHostToDevice);
    cudaMemcpy(d_prepared_energias, prepared_energias, 2*Nx*Ny*sizeof(float), cudaMemcpyHostToDevice);
    //cudaMemcpy(d_inputarray, inputarray, blocksPerGridX*blocksPerGridY*sizeof(int), cudaMemcpyHostToDevice);
	
	
	bool DoRemainder;
	if (Remainingtime/deltat > 0.001) DoRemainder = true;
	else DoRemainder = false;
	float dt;
	float dthalf;
	
	dt     = deltat;
	dthalf = deltat/2.0;
	int dataketid=0;
	//printf("%f %d %d %d %d %f %f %f %f %f %f %f %f\n", dt, pbcx, pbcy, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);
	for (int i=0; i<Nbrofits; i++)
	//for (int i=0; i<1; i++)
	{
		H2d_step<<<blocksPerGrid, threadsPerBlock>>>(d_ket0, d_ket1, dataketid, dt, d_prepared_energias, pbcx, pbcy, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);
		cudaThreadSynchronize();
		dataketid=1-dataketid;
	}
	
//	if (DoRemainder)
//	{
//		dt     = Remainingtime;
//		H2d_step<<<blocksPerGrid, threadsPerBlock>>>(d_ket, dt, energias, pbcx, pbcy, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);		// x-axis, odd
//	}
	
	if (dataketid == 0) cudaMemcpy(ket, d_ket0, 2*Nx*Ny*sizeof(float), cudaMemcpyDeviceToHost);
	else cudaMemcpy(ket, d_ket1, 2*Nx*Ny*sizeof(float), cudaMemcpyDeviceToHost);

	cudaFree(d_ket0);
	cudaFree(d_ket1);
	cudaFree(d_prepared_energias);
} }}}
__global__ void H2d_step(float *ket0, float *ket1, int dataketid, float deltat, float* prepared_energias, int pbcx, int pbcy, int Nx, int Ny, float Vx, float Vy, float sinkxax, float coskxax, float sinkyay, float coskyay) {{{
{
	// Two ket positions on each side need to be calculated for
	// intermediate steps but cannot be returned as result
	int overhead  = 2;
	// The number of threads to be returned from this block
	// is the number of input threads minus the overhead on each side
	// Note taht the number of ket elements will be (twice=complex) the
	// square of this number
	//int effectiveSize = SHARED_SIZE_PRIMARY - 2*overhead;
	// The local storage block has the same size as the 
	__shared__ float shared_ket[2*SHARED_SIZE_PRIMARY*SHARED_SIZE_PRIMARY];
	
	int globalx0 = (SHARED_SIZE_PRIMARY-2*overhead)*blockIdx.x - overhead;
	int globaly0 = (SHARED_SIZE_PRIMARY-2*overhead)*blockIdx.y - overhead;
	
	int globalid = ((globalx0 + threadIdx.x))*Ny + ((globaly0+2*threadIdx.y));
	int globalidpbc0 = ((Nx + globalx0 + threadIdx.x)%Nx)*Ny + ((Ny+globaly0+2*threadIdx.y)%Ny);
	int globalidpbc1 = ((Nx + globalx0 + threadIdx.x)%Nx)*Ny + ((Ny+globaly0+2*threadIdx.y+1)%Ny);
	int sharedid = threadIdx.x*SHARED_SIZE_PRIMARY + 2*threadIdx.y;
	int spos = 2*(sharedid);
	int gpos = 2*(globalid);
	int gpospbc0 = 2*(globalidpbc0);
	int gpospbc1 = 2*(globalidpbc1);
	if ( dataketid == 0 )
	{
		shared_ket[spos]   = ket0[gpospbc0];
		shared_ket[spos+1] = ket0[gpospbc0+1];
		shared_ket[spos+2] = ket0[gpospbc1];
		shared_ket[spos+3] = ket0[gpospbc1+1];
	} else {
		shared_ket[spos]   = ket1[gpospbc0];
		shared_ket[spos+1] = ket1[gpospbc0+1];
		shared_ket[spos+2] = ket1[gpospbc1];
		shared_ket[spos+3] = ket1[gpospbc1+1];
	}	
//	if (!(pbcx)) // XXX NOT IMPLEMENTED YET
//	if (!(pbcy)) // XXX NOT IMPLEMENTED YET
//	{	
//		shared_ket[spos]   = 0.0;
//		shared_ket[spos+1] = 0.0;
//		shared_ket[spos+2] = 0.0;
//		shared_ket[spos+3] = 0.0;
//	}
	__syncthreads();
					
	int mx, my;
	
	float temp1re, temp1im, temp2re, temp2im;
	float ketre, ketim;
	int cap, cap_p;
	
	float ketre_p, ketim_p;
	
	float deltathalf = deltat/2.0;
	
	float costx=(float) cos(deltathalf*Vx);
	float sintx=(float) sin(deltathalf*Vx);
	
	float costy=(float) cos(deltathalf*Vy);
	float sinty=(float) sin(deltathalf*Vy);
	
	int rap;
	float kre, kim, tmp, costmp, sintmp;
	
	my = threadIdx.x;
	mx = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	// temp1=costx*ket(x,y) - i sintx ket(x+1,y) exp(i ax kx)
	temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
	temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
	// temp2=- i sintx ket(x,y) exp(-i ax kx) + costx*ket(x+1,y);
	temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
	temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
	//ket(x,y) = (costx-i*sintx)*temp1
	shared_ket[cap]=costx*temp1re+sintx*temp1im;
	shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
	//ket(x+1,y) = (costx-i*sintx)*temp2
	shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
	shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	__syncthreads();
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		mx = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
		temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
		temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
		temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
		shared_ket[cap]=costx*temp1re+sintx*temp1im;
		shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
		shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
		shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	}
	__syncthreads();
	mx = threadIdx.x;
	my = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
	temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
	temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
	temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
	shared_ket[cap]=costy*temp1re+sinty*temp1im;
	shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
	shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
	shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	__syncthreads();
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		my = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
		temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
		temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
		temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
		shared_ket[cap]=costy*temp1re+sinty*temp1im;
		shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
		shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
		shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	}
	__syncthreads();
	for (int id=0; id<2; id++)
	{
		my = 2*threadIdx.y+id;
		rap=2*(((Nx+globalx0+mx)%Nx)*Ny+((globaly0+my+Ny)%Ny));
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		//tmp=-deltat*(energias[rap]-2.0*Vx-2.0*Vy);
		//costmp=(float) cos(tmp);
		//sintmp=(float) sin(tmp);
		costmp=prepared_energias[rap];
		sintmp=prepared_energias[rap+1];
		kre = ketre*costmp - ketim*sintmp;
		kim = ketim*costmp + ketre*sintmp;
		shared_ket[cap] = kre;
		shared_ket[cap+1] =kim;
	}
	__syncthreads();
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		my = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
		temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
		temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
		temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
		shared_ket[cap]=costy*temp1re+sinty*temp1im;
		shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
		shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
		shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	}
	__syncthreads();
	my = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
	temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
	temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
	temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
	shared_ket[cap]=costy*temp1re+sinty*temp1im;
	shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
	shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
	shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	__syncthreads();
	my = threadIdx.x;
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		mx = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
		temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
		temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
		temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
		shared_ket[cap]=costx*temp1re+sintx*temp1im;
		shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
		shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
		shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	}
	__syncthreads();
	mx = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
	temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
	temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
	temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
	shared_ket[cap]=costx*temp1re+sintx*temp1im;
	shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
	shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
	shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	__syncthreads();
	
	if (threadIdx.x>=overhead && 2*threadIdx.y>=overhead && threadIdx.x<SHARED_SIZE_PRIMARY-overhead && 2*threadIdx.y<SHARED_SIZE_PRIMARY-overhead-1)
	{
		if ( (globalx0+threadIdx.x < Nx) && (globaly0+2*threadIdx.y<Ny-1) )
		{
			if ( dataketid == 0 )
			{
				ket1[gpos]   = shared_ket[spos];
				ket1[gpos+1] = shared_ket[spos+1];
				ket1[gpos+2] = shared_ket[spos+2];
				ket1[gpos+3] = shared_ket[spos+3];
			} else 
			{
				ket0[gpos]   = shared_ket[spos];
				ket0[gpos+1] = shared_ket[spos+1];
				ket0[gpos+2] = shared_ket[spos+2];
				ket0[gpos+3] = shared_ket[spos+3];
			}
		}
	}
} }}}
__global__ void H2d_x(float *ket, float deltat, int id, int pbcx, int Nx, int Ny, float Vx, float sinkxax, float coskxax) {{{
{
//	int Radius = 3;
//	int BlockDim_x = blockDim.x;
//	__shared__ float s_a[BlockDim_x+2*Radius];
//	int global_ix = blockDim.x*blockIdx.x + threadIdx.x;
//	int local_ix = Radius + threadIdx.x;
//	
//	s_a[local_ix] = input[global_ix];
//	
//	if ( threadIdx.x < Radius )
//	{
//		s_a[local_ix-Radius]     = input[global_ix-Radius];
//		s_a[local_ix+BlockDim_x] = input[global_ix+BlockDim_x];
//	}
//	__syncthreads();
//	
//	float value = 0.0;
//	for (offset = -Radius; offset <=Radius; offset++)
//		value += s_a[local_ix + offset];
//
//	output[global_ix] = value;

//	int globalSizeX = 1000;
//	int globalSizeY = 1000;
//	int RadiusX = 3;
//	int RadiusY = 3;
//	int BlockDimX = blockDim.x;
//	int BlockDimY = blockDim.y;
//	int localSizeX = BlockDimX+2*RadiusX;
//	int localSizeY = BlockDimY+2*RadiusY;
//	__shared__ float s_a[SizeX*SizeY];
//	int global_ix = blockDim.x*blockIdx.x + threadIdx.x;
//	int global_iy = blockDim.y*blockIdx.y + threadIdx.y;
//	int local_ix = RadiusX + threadIdx.x;
//	int local_iy = RadiusY + threadIdx.y;
//	
//	s_a[local_ix*localSizeY+local_iy] = input[global_ix*globalSizeY+global_iy];
//	
//	if ( threadIdx.x < RadiusX )
//	{
//		s_a[(local_ix-RadiusX)*localSizeY+local_iy]   = input[(global_ix-Radius)*globalSizeY+global_iy];
//		s_a[(local_ix+BlockDimX)*localSizeY+local_iy] = input[(global_ix+BlockDim_x)*globalSizeY+global_iy];
//	}
//	if ( threadIdx.y < RadiusY )
//	{
//		s_a[local_ix*localSizeY+local_iy-RadiusY]   = input[global_ix*globalSizeY+global_iy-RadiusY];
//		s_a[local_ix*localSizeY+local_iy+BlockDimY] = input[global_ix*globalSizeY+global_iy+BlockDimY];
//	}
//	__syncthreads();
//	
//	float value = 0.0;
//	for (offsetX = -RadiusX; offsetX <=RadiusX; offsetX++)
//		for (offsetY = -RadiusY; offsetY <=RadiusY; offsetY++)
//			value += s_a[(local_ix + offsetX)*localSizeY+local_iy+offsetY];
//
//	output[global_ix*globalSizeY+global_iy] = value;

/*	
	int globalSizeX = 500;
	int globalSizeY = 500;
	int RadiusX = 3;
	int RadiusY = 3;
	int BlockDimX = blockDim.x;
	int BlockDimY = blockDim.y;
	int localSizeX = BlockDimX+2*RadiusX;
	int localSizeY = BlockDimY+2*RadiusY;
	__shared__ float s_a[SizeX*SizeY];
	int global_ix = blockDim.x*blockIdx.x + threadIdx.x;
	int global_iy = blockDim.y*blockIdx.y + threadIdx.y;
	int local_ix = RadiusX + threadIdx.x;
	int local_iy = RadiusY + threadIdx.y;
	
	s_a[local_ix*localSizeY+local_iy] = input[global_ix*globalSizeY+global_iy];
	
	if ( threadIdx.x < RadiusX )
	{
		s_a[(local_ix-RadiusX)*localSizeY+local_iy]   = input[(global_ix-Radius)*globalSizeY+global_iy];
		s_a[(local_ix+BlockDimX)*localSizeY+local_iy] = input[(global_ix+BlockDim_x)*globalSizeY+global_iy];
	}
	if ( threadIdx.y < RadiusY )
	{
		s_a[local_ix*localSizeY+local_iy-RadiusY]   = input[global_ix*globalSizeY+global_iy-RadiusY];
		s_a[local_ix*localSizeY+local_iy+BlockDimY] = input[global_ix*globalSizeY+global_iy+BlockDimY];
	}
	__syncthreads();
	
	float value = 0.0;
	for (offsetX = -RadiusX; offsetX <=RadiusX; offsetX++)
		for (offsetY = -RadiusY; offsetY <=RadiusY; offsetY++)
			value += s_a[(local_ix + offsetX)*localSizeY+local_iy+offsetY];

	output[global_ix*globalSizeY+global_iy] = value;
*/
	
	int my = blockDim.x * blockIdx.x + threadIdx.x;
	int Nstart;
	int Nfinal;
	if (id==1)
	{
		Nstart=0;
		Nfinal=Nx-1;
	}
	if (id==2)
	{
		Nstart=1;
		Nfinal=Nx-2;
	}
	float cost, sint, temp1re, temp1im, temp2re, temp2im;;
	int mx, cap, cap_p;
	cost=(float) cos(deltat*Vx);
	sint=(float) sin(deltat*Vx);
	float ketre, ketim, ketre_p, ketim_p;
	if (my<Ny)
	{
		
		
		for (mx=Nstart; mx<Nfinal; mx+=2)
		{
			cap=2*(mx*Ny+my);
			cap_p=2*((mx+1)*Ny+my);
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			// temp1=cost*ket(x,y) - i sint ket(x+1,y) exp(i ax kx)
			temp1re=cost*ketre+sint*(ketim_p*coskxax+ketre_p*sinkxax);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskxax-ketim_p*sinkxax);	// checked: ok - fixed one sign error!!
			// temp2=- i sint ket(x,y) exp(-i ax kx) + cost*ket(x+1,y);
			temp2re=sint*(-ketre*sinkxax+ketim*coskxax) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkxax-ketre*coskxax) + cost*ketim_p;	// checked: ok
			//ket(x,y) = (cost-i*sint)*temp1
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			//ket(x+1,y) = (cost-i*sint)*temp2
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
	if ((pbcx)&&(id==2))
	{
		if (my<Ny)
		{
			cap=2*((Nx-1)*Ny+my);
			cap_p=2*my;
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			temp1re=cost*ketre+sint*(ketim_p*coskxax+ketre_p*sinkxax);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskxax-ketim_p*sinkxax);	// checked: ok - fixed one sign error!!
			temp2re=sint*(-ketre*sinkxax+ketim*coskxax) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkxax-ketre*coskxax) + cost*ketim_p;	// checked: ok
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
} }}}
__global__ void H2d_y(float *ket, float deltat, int id, int pbcy, int Nx, int Ny, float Vy, float sinkyay, float coskyay) {{{
{
	int mx = blockDim.x * blockIdx.x + threadIdx.x;
	int Nstart;
	int Nfinal;
	if (id==1)
	{
		Nstart=0;
		Nfinal=Ny-1;
	}
	if (id==2)
	{
		Nstart=1;
		Nfinal=Ny-2;
	}
	float cost, sint, temp1re, temp1im, temp2re, temp2im;;
	int  my, cap, cap_p;
	cost=(float) cos(deltat*Vy);
	sint=(float) sin(deltat*Vy);
	float ketre, ketim, ketre_p, ketim_p;
	if (mx<Nx)
	{
		for (my=Nstart; my<Nfinal; my+=2)
		{
			cap=2*(mx*Ny+my);
			cap_p=2*(mx*Ny+(my+1));
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			temp1re=cost*ketre+sint*(ketim_p*coskyay+ketre_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskyay-ketim_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp2re=sint*(-ketre*sinkyay+ketim*coskyay) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkyay-ketre*coskyay) + cost*ketim_p;	// checked: ok
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
	if ((pbcy)&&(id==2))
	{
		if (mx<Nx)
		{
			cap=2*(mx*Ny+Ny-1);
			cap_p=2*(mx*Ny);
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			temp1re=cost*ketre+sint*(ketim_p*coskyay+ketre_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskyay-ketim_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp2re=sint*(-ketre*sinkyay+ketim*coskyay) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkyay-ketre*coskyay) + cost*ketim_p;	// checked: ok
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
} }}}
__global__ void Hdiag2d(float *ket, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy) {{{
{
	int mx = blockDim.x * blockIdx.x + threadIdx.x;
	int my;
	int cap;
	int rap;
	float kre, kim, tmp, costmp, sintmp;
	float ketre, ketim;
	if (mx < Nx)
	{
		for (my=0; my<Ny; my++)
		{
			rap=mx*Ny+my;
			cap=2*rap;
			ketre=ket[cap];
			ketim=ket[cap+1];
			tmp=-deltat*(energias[rap]-2.0*Vx-2.0*Vy);
			costmp=(float) cos(tmp);
			sintmp=(float) sin(tmp);
			kre = ketre*costmp - ketim*sintmp;
			kim = ketim*costmp + ketre*sintmp;
			ket[cap] = kre;
			ket[cap+1] =kim;
		}
	}

} }}}
// } } }
// commented main 
int main(int argc, char *argv[])
{
 // Definition of variables {{{ 
	int		debug	=	0;
	float	pi		= 4.0*((float) atan(1.0));
	float	hbar	= 1.0; // XXX XXX XXX WE SET hbar = 1.0 XXX XXX XXX
	int		Nx		= 400;
	int		Ny		= 400;
	float	dNx		= (float) Nx;
	float	dNy		= (float) Ny;
	float	Lx		=  20.0;
	float	Ly		=  20.0;
	int		pbcx	=   1; // C has no boolean data type; we use false=0, true=1
	int		pbcy	=   1; // C has no boolean data type; we use false=0, true=1
	float	lambda	=   0.0; // XXX NEVER USED XXX
	float	innerR	=   0.0; // XXX NEVER USED XXX
	float	outerR	=   4.0; // XXX NEVER USED XXX
	float	alpha	= 100.0;
	float	beta	=  20.0;
	float	x0		= -12.0;
	float	y0		=   0.0; // XXX NEVER USED XXX
	float	sx		=   3.0;
	float	sy		=   3.0; // XXX NEVER USED XXX
	float	px0		=   0.0;	// XXX formerly: 0.1*pi*hbar/ax;
	float	py0		=   0.0;
	float	dt		=   0.001;
//	float	dtmax	=	1.0; // XXX NEVER USED XXX
	int		order	=	2; // XXX NEVER USED XXX
//	int		gsteps	= 100; // XXX NEVER USED XXX
	char	*file	= "test"; // XXX NEVER USED XXX
//	char	*filein	= "test"; // XXX NEVER USED XXX
	char	*dir	= "data"; // XXX NEVER USED XXX
	int		verbose	=	0;
//	int		debut	=	0; // XXX NEVER USED XXX
//	int		ground	=	0; // XXX NEVER USED XXX
//	int		nodyn	=	0; // XXX NEVER USED XXX
	char	*form	= "DT"; // XXX NEVER USED XXX
	int		pars	=	0; // XXX NEVER USED XXX
	int 	abort	=	0; // XXX NEVER USED XXX
	float	cloakEnergy = 0.0; // XXX NEVER USED XXX
	float	mass0=0.5;
	float	tmax	=	10.0;

	char	*filepars;
	float	ax;
	float	ay;
//}}}
// Command line arguments analysis {{{
	int n=1;
	while (n<argc)
	{
		if (strcmp(argv[n],"-pars")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-pars found at position %i, argument is %s\n", n, argv[n+1]);
				filepars=argv[n+1]; 
				pars=1;
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-nx")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-nx found at position %i, argument is %s\n", n, argv[n+1]);
				Nx=atoi(argv[n+1]);
				dNx=(float) Nx;
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-ny")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-ny found at position %i, argument is %s\n", n, argv[n+1]);
				Ny=atoi(argv[n+1]); 
				dNy=(float) Ny;
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-Lx")==0)
		{
			if (n+1<argc) 
			{
				if (debug) printf("-Lx found at position %i, argument is %s\n", n, argv[n+1]);
				Lx=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-Ly")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-Ly found at position %i, argument is %s\n", n, argv[n+1]);
				Ly=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-lambda")==0)
		{
			if (n+1<argc) 
			{
				if (debug) printf("-lambda found at position %i, argument is %s\n", n, argv[n+1]);
				lambda=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-R1")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-R1 found at position %i, argument is %s\n", n, argv[n+1]);
				innerR=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-R2")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-R2 found at position %i, argument is %s\n", n, argv[n+1]);
				outerR=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-target")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-target found at position %i, argument is %s\n", n, argv[n+1]);
				cloakEnergy=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-alpha")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-alpha found at position %i, argument is %s\n", n, argv[n+1]);
				alpha=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-beta")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-beta found at position %i, argument is %s\n", n, argv[n+1]);
				beta=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-x0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-x0 found at position %i, argument is %s\n", n, argv[n+1]);
				x0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-y0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-y0 found at position %i, argument is %s\n", n, argv[n+1]);
				y0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-sx")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-sx found at position %i, argument is %s\n", n, argv[n+1]);
				sx=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-sy")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-sy found at position %i, argument is %s\n", n, argv[n+1]);
				sy=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-px0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-px0 found at position %i, argument is %s\n", n, argv[n+1]);
				px0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-py0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-py0 found at position %i, argument is %s\n", n, argv[n+1]);
				py0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-dt")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-dt found at position %i, argument is %s\n", n, argv[n+1]);
				dt=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-order")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-order found at position %i, argument is %s\n", n, argv[n+1]);
				order=atoi(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-time")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-time found at position %i, argument is %s\n", n, argv[n+1]);
				tmax=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-file")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-file found at position %i, argument is %s\n", n, argv[n+1]);
				file=argv[n+1];
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-format")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-format found at position %i, argument is %s\n", n, argv[n+1]);
				form=argv[n+1];
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-dir")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-dir found at position %i, argument is %s\n", n, argv[n+1]);
				dir=argv[n+1];
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-V")==0)
		{
			if (debug) printf("-verbose found at position %i\n", n);
			verbose=1;
			n++;
		} else
		if (strcmp(argv[n],"-pbcx")==0)
		{
			if (debug) printf("-pbcx found at position %i\n", n);
			pbcx=1;
			n++;
		} else
		if (strcmp(argv[n],"-pbcy")==0)
		{
			if (debug) printf("-pbcy found at position %i\n", n);
			pbcy=1;
			n++;
		} else
		if (strcmp(argv[n],"-debug")==0)
		{
			debug=1;
			printf("-debug found at position %i; all subsequent arguments are listed\n", n);
			n++;
		} else
		{
			printf("ERROR: Wrong argument at position %i: $s\n", n, argv[n]);
			printf("Cloaking of matter waves in 2D. Wrong parameters.\n");
			printf("Options: \n");
			printf("    System:\n");
			printf("        -nx -ny  Points in X and Y direction\n");
			printf("        -Lx -Ly  Size in X and Y direction (system is from -L to +L)\n");
			printf("        -lambda  Boson-boson interaction strength\n");
			printf("        -R1 -R2  Internal and external cloak radius\n");
			printf("        -target  target energy (factor from chemical potential)\n");
			printf("        -alpha   Intensity of perturbation at origin\n");
			printf("        -beta    1/Radius^2 of perturbation at origin\n");
			printf("        -pbcx -pbcy Periodic boundary conditions\n");
			printf("    Wave packet:\n"         );
			printf("        -x0 -y0  Initial position\n");
			printf("        -sx -sy  Position dispersion (sigmas)\n");
			printf("        -px0 -py0  Initial momentum\n");
			printf("    Simulation:\n"         );
			printf("        -time   Evolution time\n");
			printf("        -dt      Time step\n");
			printf("        -order   Algorithm order (default 2)\n");
			printf("    Input/Output:\n"         );
			printf("        -file    Output file base name\n");
			printf("        -format  Output file format (DT, TP)\n");
			printf("        -pars    Parameters file (all other input is ignored)\n");
			printf("        -dir     Input/Output directory\n");
			printf("        -V       Verbose\n");
			printf("        -debug   Debug\n");
			abort = 1;
			exit(1);
		}
	}
//}}}	
// Memory allocation {{{
	// XXX	file=trim(adjustl(dir))//'/'//trim(file)
	// XXX	fileini=trim(adjustl(dir))//'/'//trim(fileini)
	//int		steps	= (int) (tmax/dt);
	if (pbcx) ax=2.0*Lx/dNx; else ax=2.0*Lx/(dNx+1.0);
	if (pbcy) ay=2.0*Ly/dNy; else ay=2.0*Ly/(dNy+1.0);
	float	Vx		= -hbar*hbar/(2.0*ax*ax);
	float	Vy		= -hbar*hbar/(2.0*ay*ay);
	float	kx		=	0.0;	// rotx*pi/Lx	
	float	ky		=	0.0;	// roty*pi/Ly	
	
	if (debug) printf("Allocating memory\n");
	int MatrixSize=Nx*Ny;
	float *phi0 = (float*) malloc(2*MatrixSize*sizeof(float));
	if (phi0==0)
	{
		printf("ERROR: memory of variable phi0 could not be allocated.\n");
		exit(1);
	}
	float *phit = (float*) malloc(2*MatrixSize*sizeof(float));
	if (phit==0)
	{
		printf("ERROR: memory of variable phit could not be allocated.\n");
		exit(1);
	}
	float *potential = (float*) malloc(MatrixSize*sizeof(float));
	if (potential==0)
	{
		printf("ERROR: memory of variable potential could not be allocated.\n");
		exit(1);
	}
	float *Et = (float*) malloc(MatrixSize*sizeof(float));
	if (Et==0)
	{
		printf("ERROR: memory of variable Et could not be allocated.\n");
		exit(1);
	}
	float *pert = (float*) malloc(MatrixSize*sizeof(float));
	if (pert==0)
	{
		printf("ERROR: memory of variable pert could not be allocated.\n");
		exit(1);
	}
//}}}
// Compute initial conditions{{{
	int mx, my, carraypos, rarraypos;
	float x, y, x2, y2, dx, dx2, sx2, exp_local, exp_xplus, exp_xminus, r2;
	sx2=sx*sx;
	for (mx=0; mx<Nx; mx++)
	{
		x=((float)mx)*ax-Lx;
		x2=x*x;
		dx=x-x0;
		dx2=dx*dx;
		exp_local  = ((float) exp(-0.5*dx2/sx2));
		exp_xminus = ((float) exp(-0.5*(dx-2.0*Lx)*(dx-2.0*Lx)/sx2));
		exp_xplus  = ((float) exp(-0.5*(dx+2.0*Lx)*(dx+2.0*Lx)/sx2));
		for (my=0; my<Ny; my++)
		{
			y=((float)my)*ay-Ly;
			y2=y*y;
			rarraypos=mx*Ny+my;
			carraypos=2*(mx*Ny+my);
			float phi0re=0.0;
			float phi0im=0.0;
			phi0re = exp_local*((float) cos(px0*x+py0*y));
			phi0im = exp_local*((float) sin(px0*x+py0*y));
			if (pbcx)
			{
				phi0re += exp_xminus * ((float) cos(px0*(x-2.0*Lx)+py0*y));
				phi0re += exp_xplus  * ((float) cos(px0*(x+2.0*Lx)+py0*y));
				phi0im += exp_xminus * ((float) sin(px0*(x-2.0*Lx)+py0*y));
				phi0im += exp_xplus  * ((float) sin(px0*(x+2.0*Lx)+py0*y));
			}
			if (pbcy)
			{
//				phi0re += exp_local * ((float) cos(px0*x+py0*(y-2.0*Ly)));
//				phi0re += exp_local * ((float) cos(px0*x+py0*(y+2.0*Ly)));
//				phi0im += exp_local * ((float) sin(px0*x+py0*(y-2.0*Ly)));
//				phi0im += exp_local * ((float) sin(px0*x+py0*(y-2.0*Ly)));
			}
			phi0[carraypos]   = phi0re;
			phi0[carraypos+1] = phi0im;
			r2=x2+y2;
			if (r2<beta*beta) potential[rarraypos]=alpha;
			//potential[rarraypos]  = alpha*exp(-beta*r2);
		}
	}
	float rtemp=0.0;
	float phi0re, phi0re2, phi0im, phi0im2;
	for (mx=0; mx<Nx; mx++)
	{
		for (my=0; my<Ny; my++)
		{
			carraypos=2*(mx*Ny+my);
			phi0re=phi0[carraypos];
			phi0re2=phi0re*phi0re;
			phi0im=phi0[carraypos+1];
			phi0im2=phi0im*phi0im;
			rtemp += ax*ay*(phi0re2+phi0im2);
		}
	}
	float sqr_rtemp=sqrt(rtemp);
	for (mx=0; mx<Nx; mx++)
	{
		for (my=0; my<Ny; my++)
		{
			carraypos=2*(mx*Ny+my);
			phi0[carraypos]   *= 1.0/sqr_rtemp;
			phi0[carraypos+1] *= 1.0/sqr_rtemp;
		}
	}
	// Calculate chemical potential and <r^2>
	float ctempre = 0.0;
	float ctempim = 0.0;
	rtemp = 0.0;
	if (verbose) printf("Computing chemical potential\n");
	int mxm, mxp, mym, myp;
	float rxm, rxp, rym, ryp;
	float prefact, cVx, cVy;
	for (mx=1; mx<(Nx-1); mx++)
	{
		x=((float)mx)*ax-Lx;
		mxp = mx+1;
		if ((pbcx)&&(mx==Nx)) mxp=1;
		rxp=((float)mxp)*ax-Lx;
		mxm = mx-1;
		if ((pbcx)&&(mx==1)) mxm=Nx;
		rxm=((float)mxm)*ax-Lx;
		for (my=1; my<(Ny-1); my++)
		{
			y=((float)my)*ay-Ly;
			myp = my+1;
			if ((pbcy)&&(my==Ny)) myp=1;
			ryp=((float)myp)*ay-Ly;
			mym = my-1;
			if ((pbcy)&&(my==1)) mym=Ny;
			rym=((float)mym)*ay-Ly;
			
			carraypos=2*(mx*Ny+my);
			prefact=ax*ay;
// XXX XXX XXX	cVx=Vx*(phi0[2*(mxp*Ny+my)]*massxx[rxp*Ny+y]+phi0[2*(mxm*Ny+my)]*massxx[rxm*Ny+y]-phi0[2*(mx*Ny+my)]*(massxx[rxm*Ny+y]+massxx[rxp*Ny+y]))
			cVx=Vx*(phi0[2*(mxp*Ny+my)]*mass0+phi0[2*(mxm*Ny+my)]*mass0-phi0[2*(mx*Ny+my)]*(mass0+mass0));
// XXX XXX XXX	cVy=Vy*(phi0[2*(mx*Ny+myp)]*massyy[x*Ny+ryp]+phi0[2*(mx*Ny+mym)]*massyy[x*Ny+rym]-phi0[2*(mx*Ny+my)]*(massyy[x*Ny+ryp]+massyy[x*Ny+rym]))
			cVy=Vy*(phi0[2*(mx*Ny+myp)]*mass0+phi0[2*(mx*Ny+mym)]*mass0-phi0[2*(mx*Ny+my)]*(mass0+mass0));
			phi0re=phi0[carraypos];
			phi0im=phi0[carraypos+1];
			ctempre	+=	 prefact*phi0re*(cVx+cVy);
			ctempim	+=	-prefact*phi0im*(cVx+cVy);
		}
	}
	printf("mu = %f + %f*i; taking real part only\n", ctempre, ctempim);
	float mu=ctempre;
	printf("Chemical potential: %f\n", mu);
	float p2=(px0*px0+py0*py0)/(2.0*mass0);
	printf("p^2: %f\n", p2);
	
	rtemp=2.0*Vx*(1.0-((float) cos(px0*ax)))/mass0+2.0*Vy*(1.0-((float) cos(py0*ay)))/mass0;	//Energy of wave
	printf("Lattice energy\n");
	for (mx=0; mx<Nx; mx++)
	{
		x=((float)mx)*ax-Lx;
		//x2=x*x;
		for (my=0; my<Ny; my++)
		{
			y=((float)my)*ay-Ly;
			//y2=y*y;
			//r=sqrt(x2+y2);
			// XXX XXX XXX potential[mx*Ny+my]+=(1.0d0-detLame(1.0d0*mx,1.0d0*my))*(rtemp*cloakEnergy);
		}
	}
	printf("Hoppings: Vx=%f, Vy=%f\n", Vx, Vy);
	if (verbose) printf("Hoppings: Vx=%f, Vy=%f\n", Vx, Vy);
	if (verbose) printf("Momenta:  kx=%f, ky=%f\n", kx, ky);
	// XXX NOT USED XXX if (verbose) printf("Imaginary time step=%f\n", isteps);
	
	if (verbose)
	{
		rtemp = 0.0;
		for (mx=1; mx<Nx; mx++)
		{
			for (my=1; my<Ny; my++)
			{
				carraypos=2*(mx*Ny+my);
				phi0re=phi0[carraypos];
				phi0im=phi0[carraypos+1];
				phi0re2=phi0re*phi0re;
				phi0im2=phi0im*phi0im;
				rtemp+=ax*ay*(phi0re2+phi0im2);
			}
		}
		printf("Initial state module: rtemp=%f\n", rtemp);
	}
//}}}
// Perform imaginary time evolution	{{ {
	int m;
	for (m=0; m<2*Nx*Ny; m++) phit[m] = phi0[m];
	for (m=0; m<Nx*Ny; m++) Et[m] = potential[m];
	if (debug)
	{
		printf("Saving potential [not implemented yet]\n");
	}
	if (debug)
	{
		printf("Saving initial configuration [not implemented yet]\n");
	}
	printf("tmax   %f\n", tmax);
	printf("dt     %f\n", dt);
	printf("order  %d\n",order);
	
	float sinkxax = ((float) sin(kx*ax));
	float coskxax = ((float) cos(kx*ax));
	float sinkyay = ((float) sin(ky*ay));
	float coskyay = ((float) cos(ky*ay));
	FILE *fp;
	fp=fopen("GPU_Suzuki.ket", "w+");
	int Itot, q, irc;
	Itot=100;
	int NbrOfIterations=Itot+1;
	irc = fwrite(&NbrOfIterations, sizeof(int), 1, fp);
	irc = fwrite(&Nx, sizeof(int), 1, fp);
	irc = fwrite(&Ny, sizeof(int), 1, fp);
	irc = fwrite(phit, sizeof(float), 2*Nx*Ny, fp);
	for (q=0; q<Itot; q++)
	{
		printf("%d\n", q);
		evolve2d(phit, tmax, dt, Et, order, Nx, Ny, Vx, Vy, pbcx, pbcy, sinkxax, coskxax, sinkyay, coskyay);
		irc = fwrite(phit, sizeof(float), 2*Nx*Ny, fp);
	}
	fclose(fp);
// }} }
// Free memory and exit {{{
	if (debug) printf("Freeing allocated memory\n");
	free(phi0);
	free(phit);
	free(potential);
	free(Et);
	free(pert);
	if (debug) printf("All done\n");
	return 0;
//}}}
} 


	.file	"tmpxft_0021b2bb_00000000-6_GPU_Suzuki.cudafe1.cpp"
	.text
#APP

#NO_APP
	.type	_ZL26__cudaUnregisterBinaryUtilv, @function
_ZL26__cudaUnregisterBinaryUtilv:
.LFB2032:
	.cfi_startproc
	endbr64
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	jmp	__cudaUnregisterFatBinary@PLT
	.cfi_endproc
.LFE2032:
	.size	_ZL26__cudaUnregisterBinaryUtilv, .-_ZL26__cudaUnregisterBinaryUtilv
	.globl	_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff
	.type	_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff, @function
_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff:
.LFB2054:
	.cfi_startproc
	endbr64
	subq	$264, %rsp
	.cfi_def_cfa_offset 272
	movq	%rdi, 56(%rsp)
	leaq	80(%rsp), %rdi
	movq	%rsi, 48(%rsp)
	leaq	92(%rsp), %rsi
	movl	%edx, 44(%rsp)
	leaq	64(%rsp), %rdx
	movq	%rcx, 32(%rsp)
	leaq	72(%rsp), %rcx
	movl	%r8d, 28(%rsp)
	movl	%r9d, 24(%rsp)
	movss	%xmm0, 40(%rsp)
	movss	%xmm1, 20(%rsp)
	movss	%xmm2, 16(%rsp)
	movss	%xmm3, 12(%rsp)
	movss	%xmm4, 8(%rsp)
	movss	%xmm5, 4(%rsp)
	movss	%xmm6, (%rsp)
	movq	%fs:40, %rax
	movq	%rax, 248(%rsp)
	xorl	%eax, %eax
	leaq	56(%rsp), %rax
	movq	%rax, 128(%rsp)
	leaq	48(%rsp), %rax
	movq	%rax, 136(%rsp)
	leaq	44(%rsp), %rax
	movq	%rax, 144(%rsp)
	leaq	40(%rsp), %rax
	movq	%rax, 152(%rsp)
	leaq	32(%rsp), %rax
	movq	%rax, 160(%rsp)
	leaq	28(%rsp), %rax
	movq	%rax, 168(%rsp)
	leaq	24(%rsp), %rax
	movq	%rax, 176(%rsp)
	leaq	272(%rsp), %rax
	movq	%rax, 184(%rsp)
	leaq	280(%rsp), %rax
	movq	%rax, 192(%rsp)
	leaq	20(%rsp), %rax
	movq	%rax, 200(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 208(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 216(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 224(%rsp)
	leaq	4(%rsp), %rax
	movq	%rax, 232(%rsp)
	movq	%rsp, %rax
	movq	%rax, 240(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 80(%rsp)
	movl	$1, 88(%rsp)
	movq	%rax, 92(%rsp)
	movl	$1, 100(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L2
	pushq	72(%rsp)
	.cfi_def_cfa_offset 280
	leaq	_Z8H2d_stepPfS_ifS_iiiiffffff(%rip), %rdi
	pushq	72(%rsp)
	.cfi_def_cfa_offset 288
	movq	108(%rsp), %rcx
	movl	116(%rsp), %r8d
	movq	96(%rsp), %rsi
	movl	104(%rsp), %edx
	leaq	144(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 280
	popq	%rdx
	.cfi_def_cfa_offset 272
.L2:
	movq	248(%rsp), %rax
	subq	%fs:40, %rax
	je	.L4
	call	__stack_chk_fail@PLT
.L4:
	addq	$264, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2054:
	.size	_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff, .-_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff
	.globl	_Z8H2d_stepPfS_ifS_iiiiffffff
	.type	_Z8H2d_stepPfS_ifS_iiiiffffff, @function
_Z8H2d_stepPfS_ifS_iiiiffffff:
.LFB2055:
	.cfi_startproc
	endbr64
	jmp	_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff
	.cfi_endproc
.LFE2055:
	.size	_Z8H2d_stepPfS_ifS_iiiiffffff, .-_Z8H2d_stepPfS_ifS_iiiiffffff
	.globl	_Z10evolve2dO2PfffS_iiffiiffff
	.type	_Z10evolve2dO2PfffS_iiffiiffff, @function
_Z10evolve2dO2PfffS_iiffiiffff:
.LFB2028:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	divss	%xmm1, %xmm0
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	movq	%rsi, %r13
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	movl	%ecx, %ebp
	movl	$24, %ecx
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	movl	%edx, %ebx
	movl	%ebx, %r14d
	imull	%ebp, %r14d
	subq	$152, %rsp
	.cfi_def_cfa_offset 208
	movq	%rdi, 8(%rsp)
	movl	%r8d, 32(%rsp)
	movl	%r9d, 36(%rsp)
	movss	%xmm1, 20(%rsp)
	movss	%xmm2, 24(%rsp)
	movss	%xmm3, 28(%rsp)
	movss	%xmm4, 40(%rsp)
	movss	%xmm5, 44(%rsp)
	movss	%xmm6, 48(%rsp)
	movss	%xmm7, 52(%rsp)
	cvttss2sil	%xmm0, %r15d
	movq	%fs:40, %rax
	movq	%rax, 136(%rsp)
	movabsq	$60129542172, %rax
	movl	$1, 120(%rsp)
	movl	$1, 132(%rsp)
	movq	%rax, 112(%rsp)
	leal	23(%rdx), %eax
	cltd
	idivl	%ecx
	movl	%eax, 124(%rsp)
	leal	23(%rbp), %eax
	cltd
	idivl	%ecx
	movl	%eax, 128(%rsp)
	leal	(%r14,%r14), %eax
	cltq
	salq	$2, %rax
	movq	%rax, %rdi
	movq	%rax, (%rsp)
	call	malloc@PLT
	movq	%rax, %r12
	xorl	%eax, %eax
.L9:
	cmpl	%eax, %r14d
	jle	.L19
	cvtss2sd	24(%rsp), %xmm1
	addsd	%xmm1, %xmm1
	leaq	72(%rsp), %rdi
	cvtss2sd	0(%r13,%rax,4), %xmm0
	leaq	64(%rsp), %rsi
	movq	%rax, 56(%rsp)
	subsd	%xmm1, %xmm0
	cvtss2sd	28(%rsp), %xmm1
	addsd	%xmm1, %xmm1
	subsd	%xmm1, %xmm0
	movss	20(%rsp), %xmm1
	xorps	.LC0(%rip), %xmm1
	cvtss2sd	%xmm1, %xmm1
	mulsd	%xmm1, %xmm0
	call	sincos@PLT
	movq	56(%rsp), %rax
	cvtsd2ss	64(%rsp), %xmm0
	movss	%xmm0, (%r12,%rax,8)
	cvtsd2ss	72(%rsp), %xmm0
	movss	%xmm0, 4(%r12,%rax,8)
	incq	%rax
	jmp	.L9
.L19:
	movq	(%rsp), %rsi
	leaq	88(%rsp), %rdi
	xorl	%r13d, %r13d
	call	cudaMalloc@PLT
	movq	(%rsp), %rsi
	leaq	96(%rsp), %rdi
	call	cudaMalloc@PLT
	movq	(%rsp), %rsi
	leaq	104(%rsp), %rdi
	call	cudaMalloc@PLT
	movq	(%rsp), %rdx
	movq	8(%rsp), %rsi
	movl	$1, %ecx
	movq	88(%rsp), %rdi
	call	cudaMemcpy@PLT
	movq	(%rsp), %rdx
	movq	8(%rsp), %rsi
	movl	$1, %ecx
	movq	96(%rsp), %rdi
	call	cudaMemcpy@PLT
	movq	(%rsp), %rdx
	movq	104(%rsp), %rdi
	movq	%r12, %rsi
	movl	$1, %ecx
	xorl	%r12d, %r12d
	call	cudaMemcpy@PLT
.L11:
	cmpl	%r15d, %r13d
	jge	.L20
	movl	120(%rsp), %ecx
	movq	112(%rsp), %rdx
	xorl	%r9d, %r9d
	xorl	%r8d, %r8d
	movq	124(%rsp), %rdi
	movl	132(%rsp), %esi
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L12
	pushq	%rbp
	.cfi_def_cfa_offset 216
	movl	%r12d, %edx
	pushq	%rbx
	.cfi_def_cfa_offset 224
	movss	68(%rsp), %xmm6
	movss	64(%rsp), %xmm5
	movss	60(%rsp), %xmm4
	movss	56(%rsp), %xmm3
	movss	44(%rsp), %xmm2
	movss	40(%rsp), %xmm1
	movl	52(%rsp), %r9d
	movl	48(%rsp), %r8d
	movq	120(%rsp), %rcx
	movss	36(%rsp), %xmm0
	movq	112(%rsp), %rsi
	movq	104(%rsp), %rdi
	call	_Z43__device_stub__Z8H2d_stepPfS_ifS_iiiiffffffPfS_ifS_iiiiffffff
	popq	%rax
	.cfi_def_cfa_offset 216
	popq	%rdx
	.cfi_def_cfa_offset 208
.L12:
	call	cudaThreadSynchronize@PLT
	xorl	$1, %r12d
	incl	%r13d
	jmp	.L11
.L20:
	movq	(%rsp), %rdx
	movl	$2, %ecx
	testl	%r12d, %r12d
	jne	.L14
	movq	88(%rsp), %rsi
	jmp	.L18
.L14:
	movq	96(%rsp), %rsi
.L18:
	movq	8(%rsp), %rdi
	call	cudaMemcpy@PLT
	movq	88(%rsp), %rdi
	call	cudaFree@PLT
	movq	96(%rsp), %rdi
	call	cudaFree@PLT
	movq	104(%rsp), %rdi
	call	cudaFree@PLT
	movq	136(%rsp), %rax
	subq	%fs:40, %rax
	je	.L16
	call	__stack_chk_fail@PLT
.L16:
	addq	$152, %rsp
	.cfi_def_cfa_offset 56
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2028:
	.size	_Z10evolve2dO2PfffS_iiffiiffff, .-_Z10evolve2dO2PfffS_iiffiiffff
	.globl	_Z8evolve2dPfffS_iiiffiiffff
	.type	_Z8evolve2dPfffS_iiiffiiffff, @function
_Z8evolve2dPfffS_iiiffiiffff:
.LFB2027:
	.cfi_startproc
	endbr64
	movl	%edx, %eax
	movl	%ecx, %edx
	movl	%r8d, %ecx
	movl	%r9d, %r8d
	movl	8(%rsp), %r9d
	cmpl	$2, %eax
	jne	.L21
	jmp	_Z10evolve2dO2PfffS_iiffiiffff
.L21:
	ret
	.cfi_endproc
.LFE2027:
	.size	_Z8evolve2dPfffS_iiiffiiffff, .-_Z8evolve2dPfffS_iiiffiiffff
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC9:
	.string	"-pars"
.LC10:
	.string	"-pars found at position %i, argument is %s\n"
.LC11:
	.string	"-nx"
.LC12:
	.string	"-nx found at position %i, argument is %s\n"
.LC13:
	.string	"-ny"
.LC14:
	.string	"-ny found at position %i, argument is %s\n"
.LC15:
	.string	"-Lx"
.LC16:
	.string	"-Lx found at position %i, argument is %s\n"
.LC17:
	.string	"-Ly"
.LC18:
	.string	"-Ly found at position %i, argument is %s\n"
.LC19:
	.string	"-lambda"
.LC20:
	.string	"-lambda found at position %i, argument is %s\n"
.LC21:
	.string	"-R1"
.LC22:
	.string	"-R1 found at position %i, argument is %s\n"
.LC23:
	.string	"-R2"
.LC24:
	.string	"-R2 found at position %i, argument is %s\n"
.LC25:
	.string	"-target"
.LC26:
	.string	"-target found at position %i, argument is %s\n"
.LC27:
	.string	"-alpha"
.LC28:
	.string	"-alpha found at position %i, argument is %s\n"
.LC29:
	.string	"-beta"
.LC30:
	.string	"-beta found at position %i, argument is %s\n"
.LC31:
	.string	"-x0"
.LC32:
	.string	"-x0 found at position %i, argument is %s\n"
.LC33:
	.string	"-y0"
.LC34:
	.string	"-y0 found at position %i, argument is %s\n"
.LC35:
	.string	"-sx"
.LC36:
	.string	"-sx found at position %i, argument is %s\n"
.LC37:
	.string	"-sy"
.LC38:
	.string	"-sy found at position %i, argument is %s\n"
.LC39:
	.string	"-px0"
.LC40:
	.string	"-px0 found at position %i, argument is %s\n"
.LC41:
	.string	"-py0"
.LC42:
	.string	"-py0 found at position %i, argument is %s\n"
.LC43:
	.string	"-dt"
.LC44:
	.string	"-dt found at position %i, argument is %s\n"
.LC45:
	.string	"-order"
.LC46:
	.string	"-order found at position %i, argument is %s\n"
.LC47:
	.string	"-time"
.LC48:
	.string	"-time found at position %i, argument is %s\n"
.LC49:
	.string	"-file"
.LC50:
	.string	"-file found at position %i, argument is %s\n"
.LC51:
	.string	"-format"
.LC52:
	.string	"-format found at position %i, argument is %s\n"
.LC53:
	.string	"-dir"
.LC54:
	.string	"-dir found at position %i, argument is %s\n"
.LC55:
	.string	"-V"
.LC56:
	.string	"-verbose found at position %i\n"
.LC57:
	.string	"-pbcx"
.LC58:
	.string	"-pbcx found at position %i\n"
.LC59:
	.string	"-pbcy"
.LC60:
	.string	"-pbcy found at position %i\n"
.LC61:
	.string	"-debug"
.LC62:
	.string	"-debug found at position %i; all subsequent arguments are listed\n"
.LC63:
	.string	"ERROR: Wrong argument at position %i: $s\n"
.LC64:
	.string	"Cloaking of matter waves in 2D. Wrong parameters.\n"
.LC65:
	.string	"Options: \n"
.LC66:
	.string	"    System:\n"
.LC67:
	.string	"        -nx -ny  Points in X and Y direction\n"
.LC68:
	.string	"        -Lx -Ly  Size in X and Y direction (system is from -L to +L)\n"
.LC69:
	.string	"        -lambda  Boson-boson interaction strength\n"
.LC70:
	.string	"        -R1 -R2  Internal and external cloak radius\n"
.LC71:
	.string	"        -target  target energy (factor from chemical potential)\n"
.LC72:
	.string	"        -alpha   Intensity of perturbation at origin\n"
.LC73:
	.string	"        -beta    1/Radius^2 of perturbation at origin\n"
.LC74:
	.string	"        -pbcx -pbcy Periodic boundary conditions\n"
.LC75:
	.string	"    Wave packet:\n"
.LC76:
	.string	"        -x0 -y0  Initial position\n"
.LC77:
	.string	"        -sx -sy  Position dispersion (sigmas)\n"
.LC78:
	.string	"        -px0 -py0  Initial momentum\n"
.LC79:
	.string	"    Simulation:\n"
.LC80:
	.string	"        -time   Evolution time\n"
.LC81:
	.string	"        -dt      Time step\n"
.LC82:
	.string	"        -order   Algorithm order (default 2)\n"
.LC83:
	.string	"    Input/Output:\n"
.LC84:
	.string	"        -file    Output file base name\n"
.LC85:
	.string	"        -format  Output file format (DT, TP)\n"
.LC86:
	.string	"        -pars    Parameters file (all other input is ignored)\n"
.LC87:
	.string	"        -dir     Input/Output directory\n"
.LC88:
	.string	"        -V       Verbose\n"
.LC89:
	.string	"        -debug   Debug\n"
.LC91:
	.string	"Allocating memory\n"
.LC92:
	.string	"ERROR: memory of variable phi0 could not be allocated.\n"
.LC93:
	.string	"ERROR: memory of variable phit could not be allocated.\n"
.LC94:
	.string	"ERROR: memory of variable potential could not be allocated.\n"
.LC95:
	.string	"ERROR: memory of variable Et could not be allocated.\n"
.LC96:
	.string	"ERROR: memory of variable pert could not be allocated.\n"
.LC99:
	.string	"Computing chemical potential\n"
.LC101:
	.string	"mu = %f + %f*i; taking real part only\n"
.LC102:
	.string	"Chemical potential: %f\n"
.LC103:
	.string	"p^2: %f\n"
.LC104:
	.string	"Lattice energy\n"
.LC105:
	.string	"Hoppings: Vx=%f, Vy=%f\n"
.LC106:
	.string	"Momenta:  kx=%f, ky=%f\n"
.LC108:
	.string	"Initial state module: rtemp=%f\n"
.LC109:
	.string	"Saving potential [not implemented yet]\n"
.LC110:
	.string	"Saving initial configuration [not implemented yet]\n"
.LC111:
	.string	"tmax   %f\n"
.LC112:
	.string	"dt     %f\n"
.LC113:
	.string	"order  %d\n"
.LC114:
	.string	"w+"
.LC115:
	.string	"GPU_Suzuki.ket"
.LC116:
	.string	"%d\n"
.LC117:
	.string	"Freeing allocated memory\n"
.LC118:
	.string	"All done\n"
	.section	.text.startup,"ax",@progbits
	.globl	main
	.type	main, @function
main:
.LFB2029:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	movl	%edi, %r13d
	xorl	%edi, %edi
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	movq	%rsi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	xorl	%ebp, %ebp
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	movl	$1, %ebx
	subq	$296, %rsp
	.cfi_def_cfa_offset 352
	movss	.LC1(%rip), %xmm4
	movss	.LC4(%rip), %xmm6
	movq	%fs:40, %rax
	movq	%rax, 280(%rsp)
	xorl	%eax, %eax
	movss	.LC5(%rip), %xmm3
	movl	%edi, 44(%rsp)
	movss	%xmm4, 84(%rsp)
	movss	.LC2(%rip), %xmm4
	movl	$400, 268(%rsp)
	movss	%xmm4, 76(%rsp)
	movss	.LC6(%rip), %xmm4
	movl	$400, 272(%rsp)
	movss	%xmm4, 36(%rsp)
	movl	$2, 80(%rsp)
	movl	$0x00000000, 52(%rsp)
	movl	$0x00000000, 40(%rsp)
	movss	%xmm6, 48(%rsp)
	movss	%xmm3, 112(%rsp)
	movss	.LC7(%rip), %xmm6
	movss	%xmm4, 72(%rsp)
	movss	%xmm4, 88(%rsp)
	movss	.LC8(%rip), %xmm4
	movss	%xmm6, 100(%rsp)
	movss	%xmm4, 32(%rsp)
	movss	%xmm4, 16(%rsp)
.L24:
	cmpl	%r13d, %ebx
	jge	.L229
	movslq	%ebx, %r14
	leaq	.LC9(%rip), %rsi
	movq	(%r12,%r14,8), %rax
	leaq	0(,%r14,8), %r15
	movq	%rax, %rdi
	movq	%rax, 8(%rsp)
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L25
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r14,8), %rcx
	movl	%ebx, %edx
	leaq	.LC10(%rip), %rsi
	jmp	.L228
.L25:
	movq	8(%rsp), %rdi
	leaq	.LC11(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L28
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L29
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC12(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L29:
	movq	(%r14), %rdi
	call	atoi@PLT
	cvtsi2ssl	%eax, %xmm6
	movl	%eax, 268(%rsp)
	movss	%xmm6, 16(%rsp)
.L222:
	addl	$2, %ebx
	jmp	.L24
.L28:
	movq	8(%rsp), %rdi
	leaq	.LC13(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L30
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L31
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC14(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L31:
	movq	(%r14), %rdi
	call	atoi@PLT
	cvtsi2ssl	%eax, %xmm7
	movl	%eax, 272(%rsp)
	movss	%xmm7, 32(%rsp)
	jmp	.L222
.L30:
	movq	8(%rsp), %rdi
	leaq	.LC15(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L32
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L33
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC16(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L33:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm3
	movss	%xmm3, 88(%rsp)
	jmp	.L222
.L32:
	movq	8(%rsp), %rdi
	leaq	.LC17(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L34
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L35
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC18(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L35:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm4
	movss	%xmm4, 72(%rsp)
	jmp	.L222
.L34:
	movq	8(%rsp), %rdi
	leaq	.LC19(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L36
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r14,8), %rcx
	movl	%ebx, %edx
	leaq	.LC20(%rip), %rsi
	jmp	.L228
.L36:
	movq	8(%rsp), %rdi
	leaq	.LC21(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L38
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r14,8), %rcx
	movl	%ebx, %edx
	leaq	.LC22(%rip), %rsi
	jmp	.L228
.L38:
	movq	8(%rsp), %rdi
	leaq	.LC23(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L40
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r14,8), %rcx
	movl	%ebx, %edx
	leaq	.LC24(%rip), %rsi
	jmp	.L228
.L40:
	movq	8(%rsp), %rdi
	leaq	.LC25(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L42
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r14,8), %rcx
	movl	%ebx, %edx
	leaq	.LC26(%rip), %rsi
	jmp	.L228
.L42:
	movq	8(%rsp), %rdi
	leaq	.LC27(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L44
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L45
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC28(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L45:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm5
	movss	%xmm5, 100(%rsp)
	jmp	.L222
.L44:
	movq	8(%rsp), %rdi
	leaq	.LC29(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L46
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L47
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC30(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L47:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm6
	movss	%xmm6, 36(%rsp)
	jmp	.L222
.L46:
	movq	8(%rsp), %rdi
	leaq	.LC31(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L48
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r14,8), %r14
	testl	%ebp, %ebp
	je	.L49
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC32(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L49:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm7
	movss	%xmm7, 112(%rsp)
	jmp	.L222
.L48:
	movq	8(%rsp), %rdi
	leaq	.LC33(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L50
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r15), %rcx
	movl	%ebx, %edx
	leaq	.LC34(%rip), %rsi
	jmp	.L228
.L50:
	movq	8(%rsp), %rdi
	leaq	.LC35(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L52
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r15), %r14
	testl	%ebp, %ebp
	je	.L53
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC36(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L53:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm3
	movss	%xmm3, 48(%rsp)
	jmp	.L222
.L52:
	movq	8(%rsp), %rdi
	leaq	.LC37(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L54
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r15), %rcx
	movl	%ebx, %edx
	leaq	.LC38(%rip), %rsi
	jmp	.L228
.L54:
	movq	8(%rsp), %rdi
	leaq	.LC39(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L56
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r15), %r14
	testl	%ebp, %ebp
	je	.L57
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC40(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L57:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm4
	movss	%xmm4, 40(%rsp)
	jmp	.L222
.L56:
	movq	8(%rsp), %rdi
	leaq	.LC41(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L58
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r15), %r14
	testl	%ebp, %ebp
	je	.L59
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC42(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L59:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm5
	movss	%xmm5, 52(%rsp)
	jmp	.L222
.L58:
	movq	8(%rsp), %rdi
	leaq	.LC43(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L60
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r15), %r14
	testl	%ebp, %ebp
	je	.L61
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC44(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L61:
	movq	(%r14), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm6
	movss	%xmm6, 76(%rsp)
	jmp	.L222
.L60:
	movq	8(%rsp), %rdi
	leaq	.LC45(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L62
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	leaq	8(%r12,%r15), %r14
	testl	%ebp, %ebp
	je	.L63
	movq	(%r14), %rcx
	movl	%ebx, %edx
	leaq	.LC46(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L63:
	movq	(%r14), %rdi
	call	atoi@PLT
	movl	%eax, 80(%rsp)
	jmp	.L222
.L62:
	movq	8(%rsp), %rdi
	leaq	.LC47(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L64
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L65
	movq	8(%r12,%r15), %rcx
	movl	%ebx, %edx
	leaq	.LC48(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
.L65:
	movq	8(%r12,%r15), %rdi
	call	atof@PLT
	cvtsd2ss	%xmm0, %xmm7
	movss	%xmm7, 84(%rsp)
	jmp	.L222
.L64:
	movq	8(%rsp), %rdi
	leaq	.LC49(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L66
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r15), %rcx
	movl	%ebx, %edx
	leaq	.LC50(%rip), %rsi
	jmp	.L228
.L66:
	movq	8(%rsp), %rdi
	leaq	.LC51(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L68
	leal	1(%rbx), %eax
	cmpl	%r13d, %eax
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r15), %rcx
	movl	%ebx, %edx
	leaq	.LC52(%rip), %rsi
.L228:
	movl	$2, %edi
	xorl	%eax, %eax
	jmp	.L225
.L68:
	movq	8(%rsp), %rdi
	leaq	.LC53(%rip), %rsi
	leal	1(%rbx), %r14d
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L70
	cmpl	%r13d, %r14d
	jge	.L24
	testl	%ebp, %ebp
	je	.L222
	movq	8(%r12,%r15), %rcx
	movl	%ebx, %edx
	movl	$2, %edi
	leaq	.LC54(%rip), %rsi
.L225:
	call	__printf_chk@PLT
	jmp	.L222
.L70:
	movq	8(%rsp), %rdi
	leaq	.LC55(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L72
	testl	%ebp, %ebp
	je	.L73
	movl	%ebx, %edx
	leaq	.LC56(%rip), %rsi
	movl	$2, %edi
	call	__printf_chk@PLT
.L73:
	movl	$1, 44(%rsp)
	movl	%r14d, %ebx
	jmp	.L24
.L72:
	movq	8(%rsp), %rdi
	leaq	.LC57(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L74
	movl	%ebx, %edx
	leaq	.LC58(%rip), %rsi
	testl	%ebp, %ebp
	je	.L77
	jmp	.L226
.L74:
	movq	8(%rsp), %rdi
	leaq	.LC59(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L76
	testl	%ebp, %ebp
	je	.L77
	movl	%ebx, %edx
	leaq	.LC60(%rip), %rsi
.L226:
	movl	$2, %edi
	call	__printf_chk@PLT
.L77:
	incl	%ebx
	jmp	.L24
.L76:
	movq	8(%rsp), %rdi
	leaq	.LC61(%rip), %rsi
	call	strcmp@PLT
	testl	%eax, %eax
	jne	.L78
	movl	%ebx, %edx
	leaq	.LC62(%rip), %rsi
	movl	$2, %edi
	movl	%r14d, %ebx
	call	__printf_chk@PLT
	movl	$1, %ebp
	jmp	.L24
.L78:
	movq	8(%rsp), %rcx
	movl	%ebx, %edx
	leaq	.LC63(%rip), %rsi
	xorl	%eax, %eax
	movl	$2, %edi
	call	__printf_chk@PLT
	leaq	.LC64(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC65(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC66(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC67(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC68(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC69(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC70(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC71(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC72(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC73(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC74(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC75(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC76(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC77(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC78(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	xorl	%eax, %eax
	movl	$2, %edi
	leaq	.LC79(%rip), %rsi
	call	__printf_chk@PLT
	leaq	.LC80(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC81(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC82(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC83(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC84(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC85(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC86(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC87(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC88(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC89(%rip), %rsi
	jmp	.L223
.L229:
	cvtss2sd	88(%rsp), %xmm0
	addsd	%xmm0, %xmm0
	movsd	%xmm0, 24(%rsp)
	movsd	24(%rsp), %xmm1
	cvtss2sd	16(%rsp), %xmm0
	divsd	%xmm0, %xmm1
	cvtss2sd	72(%rsp), %xmm0
	addsd	%xmm0, %xmm0
	cvtsd2ss	%xmm1, %xmm3
	cvtss2sd	32(%rsp), %xmm1
	divsd	%xmm1, %xmm0
	movss	%xmm3, 8(%rsp)
	cvtsd2ss	%xmm0, %xmm4
	cvtss2sd	%xmm3, %xmm0
	movaps	%xmm0, %xmm1
	movss	%xmm4, 32(%rsp)
	addsd	%xmm0, %xmm1
	mulsd	%xmm0, %xmm1
	movsd	.LC90(%rip), %xmm0
	movaps	%xmm0, %xmm2
	divsd	%xmm1, %xmm2
	cvtsd2ss	%xmm2, %xmm5
	cvtss2sd	%xmm4, %xmm2
	movaps	%xmm2, %xmm1
	movss	%xmm5, 92(%rsp)
	addsd	%xmm2, %xmm1
	mulsd	%xmm2, %xmm1
	divsd	%xmm1, %xmm0
	cvtsd2ss	%xmm0, %xmm6
	movss	%xmm6, 96(%rsp)
	testl	%ebp, %ebp
	je	.L80
	leaq	.LC91(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L80:
	movl	268(%rsp), %r14d
	movl	272(%rsp), %r13d
	movl	%r14d, %r12d
	imull	%r13d, %r12d
	leal	(%r12,%r12), %r15d
	movslq	%r15d, %r15
	salq	$2, %r15
	movq	%r15, %rdi
	call	malloc@PLT
	movq	%rax, %rbx
	testq	%rax, %rax
	jne	.L81
	leaq	.LC92(%rip), %rsi
.L223:
	movl	$2, %edi
	xorl	%eax, %eax
.L224:
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L81:
	movq	%r15, %rdi
	call	malloc@PLT
	leaq	.LC93(%rip), %rsi
	movq	%rax, 16(%rsp)
	testq	%rax, %rax
	je	.L227
	movslq	%r12d, %r12
	salq	$2, %r12
	movq	%r12, %rdi
	call	malloc@PLT
	leaq	.LC94(%rip), %rsi
	movq	%rax, %r15
	testq	%rax, %rax
	je	.L223
	movq	%r12, %rdi
	call	malloc@PLT
	leaq	.LC95(%rip), %rsi
	movq	%rax, 56(%rsp)
	testq	%rax, %rax
	je	.L227
	movq	%r12, %rdi
	call	malloc@PLT
	movq	%rax, 104(%rsp)
	testq	%rax, %rax
	jne	.L85
	leaq	.LC96(%rip), %rsi
.L227:
	movl	$2, %edi
	jmp	.L224
.L85:
	movss	48(%rsp), %xmm7
	xorl	%esi, %esi
	xorl	%r12d, %r12d
	movl	%esi, 124(%rsp)
	mulss	%xmm7, %xmm7
	movss	%xmm7, 128(%rsp)
.L86:
	cmpl	%r12d, %r14d
	jle	.L230
	cvtss2sd	128(%rsp), %xmm2
	cvtsi2ssl	%r12d, %xmm0
	mulss	8(%rsp), %xmm0
	movsd	%xmm2, 64(%rsp)
	subss	88(%rsp), %xmm0
	movaps	%xmm0, %xmm1
	subss	112(%rsp), %xmm1
	movaps	%xmm0, %xmm7
	movss	%xmm0, 48(%rsp)
	mulss	%xmm0, %xmm7
	movaps	%xmm1, %xmm0
	movss	%xmm1, 120(%rsp)
	mulss	%xmm1, %xmm0
	movss	%xmm7, 132(%rsp)
	cvtss2sd	%xmm0, %xmm0
	mulsd	.LC97(%rip), %xmm0
	divsd	%xmm2, %xmm0
	call	exp@PLT
	movss	120(%rsp), %xmm1
	cvtsd2ss	%xmm0, %xmm3
	movsd	.LC97(%rip), %xmm0
	movss	%xmm3, 116(%rsp)
	cvtss2sd	%xmm1, %xmm1
	movaps	%xmm1, %xmm2
	subsd	24(%rsp), %xmm2
	movsd	%xmm1, 136(%rsp)
	mulsd	%xmm2, %xmm0
	mulsd	%xmm2, %xmm0
	divsd	64(%rsp), %xmm0
	call	exp@PLT
	movsd	136(%rsp), %xmm1
	addsd	24(%rsp), %xmm1
	cvtsd2ss	%xmm0, %xmm6
	movsd	.LC97(%rip), %xmm0
	movss	%xmm6, 120(%rsp)
	mulsd	%xmm1, %xmm0
	mulsd	%xmm1, %xmm0
	divsd	64(%rsp), %xmm0
	call	exp@PLT
	movslq	124(%rsp), %rax
	leaq	252(%rsp), %rdx
	movq	%rdx, 144(%rsp)
	cvtsd2ss	%xmm0, %xmm4
	leaq	(%rbx,%rax,8), %rcx
	leaq	(%r15,%rax,4), %r8
	xorl	%eax, %eax
.L87:
	cmpl	%eax, %r13d
	jle	.L231
	cvtsi2ssl	%eax, %xmm1
	mulss	32(%rsp), %xmm1
	movss	52(%rsp), %xmm5
	leaq	248(%rsp), %rsi
	subss	72(%rsp), %xmm1
	movss	40(%rsp), %xmm0
	movq	%rcx, 224(%rsp)
	mulss	48(%rsp), %xmm0
	movq	144(%rsp), %rdi
	movq	%r8, 216(%rsp)
	movq	%rax, 200(%rsp)
	movss	%xmm4, 212(%rsp)
	mulss	%xmm1, %xmm5
	movss	%xmm1, 208(%rsp)
	movss	%xmm5, 152(%rsp)
	addss	%xmm5, %xmm0
	call	sincosf@PLT
	movss	116(%rsp), %xmm6
	mulss	252(%rsp), %xmm6
	cvtss2sd	48(%rsp), %xmm2
	movaps	%xmm2, %xmm0
	subsd	24(%rsp), %xmm0
	movss	116(%rsp), %xmm7
	leaq	240(%rsp), %rdi
	leaq	232(%rsp), %rsi
	movq	%rdi, 160(%rsp)
	mulss	248(%rsp), %xmm7
	movss	152(%rsp), %xmm5
	movq	%rsi, 168(%rsp)
	movsd	%xmm2, 192(%rsp)
	movss	%xmm6, 136(%rsp)
	cvtss2sd	40(%rsp), %xmm6
	mulsd	%xmm6, %xmm0
	cvtss2sd	%xmm5, %xmm5
	movsd	%xmm6, 184(%rsp)
	movss	%xmm7, 64(%rsp)
	movsd	%xmm5, 176(%rsp)
	addsd	%xmm5, %xmm0
	call	sincos@PLT
	movq	168(%rsp), %rsi
	movsd	192(%rsp), %xmm2
	cvtsd2ss	232(%rsp), %xmm0
	addsd	24(%rsp), %xmm2
	mulss	120(%rsp), %xmm0
	movsd	184(%rsp), %xmm6
	addss	64(%rsp), %xmm0
	movsd	176(%rsp), %xmm5
	movq	160(%rsp), %rdi
	movsd	240(%rsp), %xmm3
	mulsd	%xmm6, %xmm2
	movss	%xmm0, 64(%rsp)
	movsd	%xmm3, 152(%rsp)
	addsd	%xmm5, %xmm2
	movaps	%xmm2, %xmm0
	call	sincos@PLT
	movq	200(%rsp), %rax
	movss	212(%rsp), %xmm4
	cvtsd2ss	232(%rsp), %xmm2
	movq	224(%rsp), %rcx
	movq	216(%rsp), %r8
	movsd	152(%rsp), %xmm3
	mulss	%xmm4, %xmm2
	movss	208(%rsp), %xmm1
	addss	64(%rsp), %xmm2
	cvtsd2ss	%xmm3, %xmm0
	mulss	120(%rsp), %xmm0
	addss	136(%rsp), %xmm0
	mulss	%xmm1, %xmm1
	addss	132(%rsp), %xmm1
	movss	%xmm2, (%rcx,%rax,8)
	cvtsd2ss	240(%rsp), %xmm2
	mulss	%xmm4, %xmm2
	addss	%xmm0, %xmm2
	movss	36(%rsp), %xmm0
	mulss	%xmm0, %xmm0
	movss	%xmm2, 4(%rcx,%rax,8)
	comiss	%xmm1, %xmm0
	jbe	.L88
	movss	100(%rsp), %xmm7
	movss	%xmm7, (%r8,%rax,4)
.L88:
	incq	%rax
	jmp	.L87
.L231:
	addl	%r13d, 124(%rsp)
	incl	%r12d
	jmp	.L86
.L230:
	xorl	%ecx, %ecx
	xorps	%xmm2, %xmm2
	xorl	%esi, %esi
.L92:
	cmpl	%esi, %r14d
	jle	.L94
	leal	(%rcx,%rcx), %eax
	xorl	%edx, %edx
	cltq
	leaq	(%rbx,%rax,4), %rax
.L95:
	cmpl	%edx, %r13d
	jle	.L232
	movss	(%rax), %xmm0
	movss	4(%rax), %xmm1
	incl	%edx
	addq	$8, %rax
	mulss	%xmm1, %xmm1
	mulss	%xmm0, %xmm0
	addss	%xmm1, %xmm0
	movss	8(%rsp), %xmm1
	mulss	32(%rsp), %xmm1
	mulss	%xmm1, %xmm0
	addss	%xmm0, %xmm2
	jmp	.L95
.L232:
	incl	%esi
	addl	%r13d, %ecx
	jmp	.L92
.L94:
	movaps	%xmm2, %xmm0
	call	sqrtf@PLT
	movsd	.LC98(%rip), %xmm3
	xorl	%ecx, %ecx
	xorl	%esi, %esi
.L96:
	cmpl	%esi, %r14d
	jle	.L98
	leal	(%rcx,%rcx), %eax
	xorl	%edx, %edx
	cltq
	leaq	(%rbx,%rax,4), %rax
.L99:
	cmpl	%edx, %r13d
	jle	.L233
	movaps	%xmm3, %xmm2
	cvtss2sd	%xmm0, %xmm1
	incl	%edx
	addq	$8, %rax
	divsd	%xmm1, %xmm2
	cvtss2sd	-8(%rax), %xmm1
	mulsd	%xmm2, %xmm1
	cvtsd2ss	%xmm1, %xmm1
	movss	%xmm1, -8(%rax)
	cvtss2sd	-4(%rax), %xmm1
	mulsd	%xmm2, %xmm1
	cvtsd2ss	%xmm1, %xmm1
	movss	%xmm1, -4(%rax)
	jmp	.L99
.L233:
	incl	%esi
	addl	%r13d, %ecx
	jmp	.L96
.L98:
	cmpl	$0, 44(%rsp)
	je	.L100
	leaq	.LC99(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L100:
	movl	272(%rsp), %esi
	xorps	%xmm1, %xmm1
	movl	268(%rsp), %r9d
	movl	$1, %ecx
	movss	.LC100(%rip), %xmm4
	movaps	%xmm1, %xmm5
	movss	.LC0(%rip), %xmm6
	leal	-1(%r9), %r11d
	leal	-1(%rsi), %r12d
	movl	%esi, %r8d
.L101:
	cmpl	%ecx, %r11d
	jle	.L234
	movl	%r9d, %eax
	cmpl	$1, %ecx
	je	.L102
	leal	-1(%rcx), %eax
.L102:
	imull	%esi, %eax
	leal	2(%r8,%r8), %edx
	movslq	%edx, %rdx
	leal	(%rsi,%r8), %r10d
	leaq	(%rbx,%rdx,4), %rdi
	movslq	%r10d, %rdx
	cltq
	leaq	(%rbx,%rdx,8), %r14
	movl	$1, %edx
	leaq	(%rbx,%rax,8), %r13
.L103:
	cmpl	%edx, %r12d
	jle	.L235
	movl	%esi, %eax
	cmpq	$1, %rdx
	je	.L104
	leal	-1(%rdx), %eax
.L104:
	addl	%r8d, %eax
	movss	8(%rdi), %xmm0
	movss	(%rdi), %xmm3
	addq	$8, %rdi
	addl	%eax, %eax
	movss	0(%r13,%rdx,8), %xmm7
	mulss	%xmm4, %xmm0
	cltq
	movss	(%rbx,%rax,4), %xmm2
	mulss	%xmm4, %xmm7
	mulss	%xmm4, %xmm2
	addss	%xmm0, %xmm2
	movss	(%r14,%rdx,8), %xmm0
	incq	%rdx
	mulss	%xmm4, %xmm0
	subss	%xmm3, %xmm2
	mulss	96(%rsp), %xmm2
	addss	%xmm7, %xmm0
	subss	%xmm3, %xmm0
	mulss	92(%rsp), %xmm0
	addss	%xmm0, %xmm2
	movss	8(%rsp), %xmm0
	mulss	32(%rsp), %xmm0
	mulss	%xmm0, %xmm3
	xorps	%xmm6, %xmm0
	mulss	-4(%rdi), %xmm0
	mulss	%xmm2, %xmm3
	mulss	%xmm2, %xmm0
	addss	%xmm3, %xmm5
	addss	%xmm0, %xmm1
	jmp	.L103
.L235:
	incl	%ecx
	movl	%r10d, %r8d
	jmp	.L101
.L234:
	movl	$2, %edi
	movb	$2, %al
	cvtss2sd	%xmm5, %xmm0
	leaq	.LC101(%rip), %rsi
	cvtss2sd	%xmm1, %xmm1
	movsd	%xmm0, 24(%rsp)
	leaq	.LC105(%rip), %r13
	call	__printf_chk@PLT
	movsd	24(%rsp), %xmm0
	leaq	.LC102(%rip), %rsi
	movb	$1, %al
	movl	$2, %edi
	call	__printf_chk@PLT
	movss	40(%rsp), %xmm0
	movss	52(%rsp), %xmm1
	movb	$1, %al
	leaq	.LC103(%rip), %rsi
	movl	$2, %edi
	mulss	%xmm1, %xmm1
	mulss	%xmm0, %xmm0
	addss	%xmm1, %xmm0
	cvtss2sd	%xmm0, %xmm0
	call	__printf_chk@PLT
	movl	$2, %edi
	leaq	.LC104(%rip), %rsi
	xorl	%eax, %eax
	cvtss2sd	92(%rsp), %xmm5
	cvtss2sd	96(%rsp), %xmm1
	movq	%xmm5, %r12
	movsd	%xmm1, 24(%rsp)
	call	__printf_chk@PLT
	movsd	24(%rsp), %xmm1
	movq	%r13, %rsi
	movb	$2, %al
	movq	%r12, %xmm0
	movl	$2, %edi
	call	__printf_chk@PLT
	cmpl	$0, 44(%rsp)
	movsd	24(%rsp), %xmm1
	je	.L107
	movq	%r12, %xmm0
	movq	%r13, %rsi
	movl	$2, %edi
	movb	$2, %al
	call	__printf_chk@PLT
	xorps	%xmm1, %xmm1
	movl	$2, %edi
	movb	$2, %al
	movaps	%xmm1, %xmm0
	leaq	.LC106(%rip), %rsi
	call	__printf_chk@PLT
	movl	272(%rsp), %ecx
	movl	268(%rsp), %edi
	xorps	%xmm0, %xmm0
	movl	%ecx, %edx
.L108:
	movl	44(%rsp), %eax
	cmpl	%eax, %edi
	jle	.L110
	movslq	%edx, %rax
	leaq	(%rbx,%rax,8), %rsi
	xorl	%eax, %eax
.L111:
	incq	%rax
	cmpl	%eax, %ecx
	jle	.L236
	movss	(%rsi,%rax,8), %xmm1
	movss	4(%rsi,%rax,8), %xmm2
	mulss	%xmm1, %xmm1
	mulss	%xmm2, %xmm2
	addss	%xmm2, %xmm1
	movss	8(%rsp), %xmm2
	mulss	32(%rsp), %xmm2
	mulss	%xmm2, %xmm1
	addss	%xmm1, %xmm0
	jmp	.L111
.L236:
	incl	44(%rsp)
	addl	%ecx, %edx
	jmp	.L108
.L110:
	leaq	.LC108(%rip), %rsi
	movl	$2, %edi
	movb	$1, %al
	cvtss2sd	%xmm0, %xmm0
	call	__printf_chk@PLT
.L107:
	movl	268(%rsp), %edx
	imull	272(%rsp), %edx
	xorl	%eax, %eax
	leal	(%rdx,%rdx), %ecx
.L112:
	cmpl	%eax, %ecx
	jle	.L237
	movss	(%rbx,%rax,4), %xmm0
	movq	16(%rsp), %rdi
	movss	%xmm0, (%rdi,%rax,4)
	incq	%rax
	jmp	.L112
.L237:
	xorl	%eax, %eax
.L114:
	cmpl	%eax, %edx
	jle	.L238
	movss	(%r15,%rax,4), %xmm0
	movq	56(%rsp), %rcx
	movss	%xmm0, (%rcx,%rax,4)
	incq	%rax
	jmp	.L114
.L238:
	testl	%ebp, %ebp
	je	.L116
	leaq	.LC109(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	leaq	.LC110(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L116:
	movl	$2, %edi
	leaq	.LC111(%rip), %rsi
	movb	$1, %al
	cvtss2sd	84(%rsp), %xmm0
	call	__printf_chk@PLT
	leaq	.LC112(%rip), %rsi
	movb	$1, %al
	xorl	%r14d, %r14d
	movl	$2, %edi
	cvtss2sd	76(%rsp), %xmm0
	leaq	252(%rsp), %r12
	leaq	248(%rsp), %r13
	call	__printf_chk@PLT
	movl	80(%rsp), %edx
	movl	$2, %edi
	xorl	%eax, %eax
	leaq	.LC113(%rip), %rsi
	call	__printf_chk@PLT
	xorps	%xmm1, %xmm1
	movq	%r13, %rsi
	movq	%r12, %rdi
	movss	8(%rsp), %xmm0
	mulss	%xmm1, %xmm0
	call	sincosf@PLT
	xorps	%xmm1, %xmm1
	movq	%r13, %rsi
	movq	%r12, %rdi
	movss	32(%rsp), %xmm0
	leaq	.LC116(%rip), %r13
	movss	248(%rsp), %xmm3
	movss	252(%rsp), %xmm4
	mulss	%xmm1, %xmm0
	movss	%xmm3, 36(%rsp)
	movss	%xmm4, 24(%rsp)
	call	sincosf@PLT
	leaq	.LC114(%rip), %rsi
	movss	248(%rsp), %xmm5
	movss	252(%rsp), %xmm6
	leaq	.LC115(%rip), %rdi
	movss	%xmm5, 32(%rsp)
	movss	%xmm6, 8(%rsp)
	call	fopen@PLT
	movl	$1, %edx
	movl	$4, %esi
	leaq	276(%rsp), %rdi
	movq	%rax, %r12
	movq	%rax, %rcx
	movl	$101, 276(%rsp)
	call	fwrite@PLT
	leaq	268(%rsp), %rdi
	movq	%r12, %rcx
	movl	$1, %edx
	movl	$4, %esi
	call	fwrite@PLT
	leaq	272(%rsp), %rdi
	movq	%r12, %rcx
	movl	$1, %edx
	movl	$4, %esi
	call	fwrite@PLT
	movl	268(%rsp), %edx
	movq	16(%rsp), %rdi
	movq	%r12, %rcx
	imull	272(%rsp), %edx
	movl	$4, %esi
	addl	%edx, %edx
	movslq	%edx, %rdx
	call	fwrite@PLT
.L117:
	movl	%r14d, %edx
	movq	%r13, %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %r9d
	incl	%r14d
	pushq	%rax
	.cfi_def_cfa_offset 360
	pushq	$1
	.cfi_def_cfa_offset 368
	movss	48(%rsp), %xmm7
	movss	24(%rsp), %xmm6
	movss	52(%rsp), %xmm5
	movss	40(%rsp), %xmm4
	movss	112(%rsp), %xmm3
	movss	108(%rsp), %xmm2
	movl	288(%rsp), %r8d
	movq	72(%rsp), %rsi
	movss	92(%rsp), %xmm1
	movss	100(%rsp), %xmm0
	movq	32(%rsp), %rdi
	movl	284(%rsp), %ecx
	movl	96(%rsp), %edx
	call	_Z8evolve2dPfffS_iiiffiiffff
	popq	%rdx
	.cfi_def_cfa_offset 360
	popq	%rcx
	.cfi_def_cfa_offset 352
	movl	$4, %esi
	movl	268(%rsp), %edx
	movq	16(%rsp), %rdi
	movq	%r12, %rcx
	imull	272(%rsp), %edx
	addl	%edx, %edx
	movslq	%edx, %rdx
	call	fwrite@PLT
	cmpl	$100, %r14d
	jne	.L117
	movq	%r12, %rdi
	call	fclose@PLT
	testl	%ebp, %ebp
	je	.L118
	leaq	.LC117(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L118:
	movq	%rbx, %rdi
	call	free@PLT
	movq	16(%rsp), %rdi
	call	free@PLT
	movq	%r15, %rdi
	call	free@PLT
	movq	56(%rsp), %rdi
	call	free@PLT
	movq	104(%rsp), %rdi
	call	free@PLT
	testl	%ebp, %ebp
	je	.L119
	leaq	.LC118(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L119:
	movq	280(%rsp), %rax
	subq	%fs:40, %rax
	je	.L120
	call	__stack_chk_fail@PLT
.L120:
	addq	$296, %rsp
	.cfi_def_cfa_offset 56
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2029:
	.size	main, .-main
	.text
	.globl	_Z32__device_stub__Z5H2d_xPffiiiifffPffiiiifff
	.type	_Z32__device_stub__Z5H2d_xPffiiiifffPffiiiifff, @function
_Z32__device_stub__Z5H2d_xPffiiiifffPffiiiifff:
.LFB2056:
	.cfi_startproc
	endbr64
	subq	$200, %rsp
	.cfi_def_cfa_offset 208
	movq	%rdi, 40(%rsp)
	leaq	64(%rsp), %rdi
	movl	%esi, 32(%rsp)
	leaq	76(%rsp), %rsi
	movl	%edx, 28(%rsp)
	leaq	48(%rsp), %rdx
	movl	%ecx, 24(%rsp)
	leaq	56(%rsp), %rcx
	movl	%r8d, 20(%rsp)
	movss	%xmm0, 36(%rsp)
	movss	%xmm1, 16(%rsp)
	movss	%xmm2, 12(%rsp)
	movss	%xmm3, 8(%rsp)
	movq	%fs:40, %rax
	movq	%rax, 184(%rsp)
	xorl	%eax, %eax
	leaq	40(%rsp), %rax
	movl	$1, 72(%rsp)
	movq	%rax, 112(%rsp)
	leaq	36(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	32(%rsp), %rax
	movq	%rax, 128(%rsp)
	leaq	28(%rsp), %rax
	movq	%rax, 136(%rsp)
	leaq	24(%rsp), %rax
	movq	%rax, 144(%rsp)
	leaq	20(%rsp), %rax
	movq	%rax, 152(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 160(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 168(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 176(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 64(%rsp)
	movq	%rax, 76(%rsp)
	movl	$1, 84(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L239
	pushq	56(%rsp)
	.cfi_def_cfa_offset 216
	leaq	_Z5H2d_xPffiiiifff(%rip), %rdi
	pushq	56(%rsp)
	.cfi_def_cfa_offset 224
	movq	92(%rsp), %rcx
	movl	100(%rsp), %r8d
	movq	80(%rsp), %rsi
	movl	88(%rsp), %edx
	leaq	128(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 216
	popq	%rdx
	.cfi_def_cfa_offset 208
.L239:
	movq	184(%rsp), %rax
	subq	%fs:40, %rax
	je	.L241
	call	__stack_chk_fail@PLT
.L241:
	addq	$200, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2056:
	.size	_Z32__device_stub__Z5H2d_xPffiiiifffPffiiiifff, .-_Z32__device_stub__Z5H2d_xPffiiiifffPffiiiifff
	.globl	_Z5H2d_xPffiiiifff
	.type	_Z5H2d_xPffiiiifff, @function
_Z5H2d_xPffiiiifff:
.LFB2057:
	.cfi_startproc
	endbr64
	jmp	_Z32__device_stub__Z5H2d_xPffiiiifffPffiiiifff
	.cfi_endproc
.LFE2057:
	.size	_Z5H2d_xPffiiiifff, .-_Z5H2d_xPffiiiifff
	.globl	_Z32__device_stub__Z5H2d_yPffiiiifffPffiiiifff
	.type	_Z32__device_stub__Z5H2d_yPffiiiifffPffiiiifff, @function
_Z32__device_stub__Z5H2d_yPffiiiifffPffiiiifff:
.LFB2058:
	.cfi_startproc
	endbr64
	subq	$200, %rsp
	.cfi_def_cfa_offset 208
	movq	%rdi, 40(%rsp)
	leaq	64(%rsp), %rdi
	movl	%esi, 32(%rsp)
	leaq	76(%rsp), %rsi
	movl	%edx, 28(%rsp)
	leaq	48(%rsp), %rdx
	movl	%ecx, 24(%rsp)
	leaq	56(%rsp), %rcx
	movl	%r8d, 20(%rsp)
	movss	%xmm0, 36(%rsp)
	movss	%xmm1, 16(%rsp)
	movss	%xmm2, 12(%rsp)
	movss	%xmm3, 8(%rsp)
	movq	%fs:40, %rax
	movq	%rax, 184(%rsp)
	xorl	%eax, %eax
	leaq	40(%rsp), %rax
	movl	$1, 72(%rsp)
	movq	%rax, 112(%rsp)
	leaq	36(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	32(%rsp), %rax
	movq	%rax, 128(%rsp)
	leaq	28(%rsp), %rax
	movq	%rax, 136(%rsp)
	leaq	24(%rsp), %rax
	movq	%rax, 144(%rsp)
	leaq	20(%rsp), %rax
	movq	%rax, 152(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 160(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 168(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 176(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 64(%rsp)
	movq	%rax, 76(%rsp)
	movl	$1, 84(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L244
	pushq	56(%rsp)
	.cfi_def_cfa_offset 216
	leaq	_Z5H2d_yPffiiiifff(%rip), %rdi
	pushq	56(%rsp)
	.cfi_def_cfa_offset 224
	movq	92(%rsp), %rcx
	movl	100(%rsp), %r8d
	movq	80(%rsp), %rsi
	movl	88(%rsp), %edx
	leaq	128(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 216
	popq	%rdx
	.cfi_def_cfa_offset 208
.L244:
	movq	184(%rsp), %rax
	subq	%fs:40, %rax
	je	.L246
	call	__stack_chk_fail@PLT
.L246:
	addq	$200, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2058:
	.size	_Z32__device_stub__Z5H2d_yPffiiiifffPffiiiifff, .-_Z32__device_stub__Z5H2d_yPffiiiifffPffiiiifff
	.globl	_Z5H2d_yPffiiiifff
	.type	_Z5H2d_yPffiiiifff, @function
_Z5H2d_yPffiiiifff:
.LFB2059:
	.cfi_startproc
	endbr64
	jmp	_Z32__device_stub__Z5H2d_yPffiiiifffPffiiiifff
	.cfi_endproc
.LFE2059:
	.size	_Z5H2d_yPffiiiifff, .-_Z5H2d_yPffiiiifff
	.globl	_Z33__device_stub__Z7Hdiag2dPffS_iiffPffS_iiff
	.type	_Z33__device_stub__Z7Hdiag2dPffS_iiffPffS_iiff, @function
_Z33__device_stub__Z7Hdiag2dPffS_iiffPffS_iiff:
.LFB2060:
	.cfi_startproc
	endbr64
	subq	$184, %rsp
	.cfi_def_cfa_offset 192
	movq	%rdi, 40(%rsp)
	leaq	64(%rsp), %rdi
	movq	%rsi, 24(%rsp)
	leaq	76(%rsp), %rsi
	movl	%edx, 32(%rsp)
	leaq	48(%rsp), %rdx
	movl	%ecx, 20(%rsp)
	leaq	56(%rsp), %rcx
	movss	%xmm0, 36(%rsp)
	movss	%xmm1, 16(%rsp)
	movss	%xmm2, 12(%rsp)
	movq	%fs:40, %rax
	movq	%rax, 168(%rsp)
	xorl	%eax, %eax
	leaq	40(%rsp), %rax
	movl	$1, 72(%rsp)
	movq	%rax, 112(%rsp)
	leaq	36(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	24(%rsp), %rax
	movq	%rax, 128(%rsp)
	leaq	32(%rsp), %rax
	movq	%rax, 136(%rsp)
	leaq	20(%rsp), %rax
	movq	%rax, 144(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 152(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 160(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 64(%rsp)
	movq	%rax, 76(%rsp)
	movl	$1, 84(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L249
	pushq	56(%rsp)
	.cfi_def_cfa_offset 200
	leaq	_Z7Hdiag2dPffS_iiff(%rip), %rdi
	pushq	56(%rsp)
	.cfi_def_cfa_offset 208
	movq	92(%rsp), %rcx
	movl	100(%rsp), %r8d
	movq	80(%rsp), %rsi
	movl	88(%rsp), %edx
	leaq	128(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 200
	popq	%rdx
	.cfi_def_cfa_offset 192
.L249:
	movq	168(%rsp), %rax
	subq	%fs:40, %rax
	je	.L251
	call	__stack_chk_fail@PLT
.L251:
	addq	$184, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2060:
	.size	_Z33__device_stub__Z7Hdiag2dPffS_iiffPffS_iiff, .-_Z33__device_stub__Z7Hdiag2dPffS_iiffPffS_iiff
	.globl	_Z7Hdiag2dPffS_iiff
	.type	_Z7Hdiag2dPffS_iiff, @function
_Z7Hdiag2dPffS_iiff:
.LFB2061:
	.cfi_startproc
	endbr64
	jmp	_Z33__device_stub__Z7Hdiag2dPffS_iiffPffS_iiff
	.cfi_endproc
.LFE2061:
	.size	_Z7Hdiag2dPffS_iiff, .-_Z7Hdiag2dPffS_iiff
	.section	.rodata.str1.1
.LC119:
	.string	"_Z7Hdiag2dPffS_iiff"
.LC120:
	.string	"_Z5H2d_yPffiiiifff"
.LC121:
	.string	"_Z5H2d_xPffiiiifff"
.LC122:
	.string	"_Z8H2d_stepPfS_ifS_iiiiffffff"
	.section	.text.startup
	.type	_ZL24__sti____cudaRegisterAllv, @function
_ZL24__sti____cudaRegisterAllv:
.LFB2063:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	leaq	_ZL15__fatDeviceText(%rip), %rdi
	call	__cudaRegisterFatBinary@PLT
	pushq	$0
	.cfi_def_cfa_offset 24
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 32
	leaq	.LC119(%rip), %rdx
	movq	%rax, %rdi
	movq	%rax, %rbx
	pushq	$0
	.cfi_def_cfa_offset 40
	movq	%rdx, %rcx
	leaq	_Z7Hdiag2dPffS_iiff(%rip), %rsi
	pushq	$0
	.cfi_def_cfa_offset 48
	movq	%rax, _ZL20__cudaFatCubinHandle(%rip)
	call	__cudaRegisterFunction@PLT
	addq	$32, %rsp
	.cfi_def_cfa_offset 16
	movq	%rbx, %rdi
	xorl	%r9d, %r9d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC120(%rip), %rdx
	orl	$-1, %r8d
	leaq	_Z5H2d_yPffiiiifff(%rip), %rsi
	pushq	$0
	.cfi_def_cfa_offset 32
	movq	%rdx, %rcx
	pushq	$0
	.cfi_def_cfa_offset 40
	pushq	$0
	.cfi_def_cfa_offset 48
	call	__cudaRegisterFunction@PLT
	addq	$32, %rsp
	.cfi_def_cfa_offset 16
	movq	%rbx, %rdi
	xorl	%r9d, %r9d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC121(%rip), %rdx
	orl	$-1, %r8d
	leaq	_Z5H2d_xPffiiiifff(%rip), %rsi
	pushq	$0
	.cfi_def_cfa_offset 32
	movq	%rdx, %rcx
	pushq	$0
	.cfi_def_cfa_offset 40
	pushq	$0
	.cfi_def_cfa_offset 48
	call	__cudaRegisterFunction@PLT
	addq	$32, %rsp
	.cfi_def_cfa_offset 16
	movq	%rbx, %rdi
	xorl	%r9d, %r9d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC122(%rip), %rdx
	orl	$-1, %r8d
	leaq	_Z8H2d_stepPfS_ifS_iiiiffffff(%rip), %rsi
	pushq	$0
	.cfi_def_cfa_offset 32
	movq	%rdx, %rcx
	pushq	$0
	.cfi_def_cfa_offset 40
	pushq	$0
	.cfi_def_cfa_offset 48
	call	__cudaRegisterFunction@PLT
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	addq	$32, %rsp
	.cfi_def_cfa_offset 16
	call	__cudaRegisterFatBinaryEnd@PLT
	leaq	_ZL26__cudaUnregisterBinaryUtilv(%rip), %rdi
	popq	%rbx
	.cfi_def_cfa_offset 8
	jmp	atexit@PLT
	.cfi_endproc
.LFE2063:
	.size	_ZL24__sti____cudaRegisterAllv, .-_ZL24__sti____cudaRegisterAllv
	.section	.init_array,"aw"
	.align 8
	.quad	_ZL24__sti____cudaRegisterAllv
	.section	.nvFatBinSegment,"aw"
	.align 8
	.type	_ZL15__fatDeviceText, @object
	.size	_ZL15__fatDeviceText, 24
_ZL15__fatDeviceText:
	.long	1180844977
	.long	1
	.quad	fatbinData
	.quad	0
	.local	_ZL20__cudaFatCubinHandle
	.comm	_ZL20__cudaFatCubinHandle,8,8
	.section	.rodata.cst16,"aM",@progbits,16
	.align 16
.LC0:
	.long	-2147483648
	.long	0
	.long	0
	.long	0
	.section	.rodata.cst4,"aM",@progbits,4
	.align 4
.LC1:
	.long	1092616192
	.align 4
.LC2:
	.long	981668463
	.align 4
.LC4:
	.long	1077936128
	.align 4
.LC5:
	.long	-1052770304
	.align 4
.LC6:
	.long	1101004800
	.align 4
.LC7:
	.long	1120403456
	.align 4
.LC8:
	.long	1137180672
	.section	.rodata.cst8,"aM",@progbits,8
	.align 8
.LC90:
	.long	0
	.long	-1074790400
	.align 8
.LC97:
	.long	0
	.long	-1075838976
	.align 8
.LC98:
	.long	0
	.long	1072693248
	.section	.rodata.cst4
	.align 4
.LC100:
	.long	1056964608
	.ident	"GCC: (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

// XXX XXX XXX CAREFUL WITH IMAGINARY TIME EVOLUTION: MUST BE tau=-it

//#include <math.h>

#include <hip/hip_runtime.h>
#include <stdio.h>
#include <stdlib.h>
//#include <time.h>
//#include <cuda.h> // XXX REALLY NECESSARY?

#define SHARED_SIZE_PRIMARY 28
#define SHARED_SIZE_SECONDARY 14

void evolve2d(float *ket, float t, float deltat, float *energias, int order, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay); 
void evolve2dO2(float *ket, float t, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float kxax, float coskxax, float sinkyay, float kyay);
void H2d(float *ket, float deltat, int id, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay);
__global__ void H2d_step(float *ket_in, float *ket_out, int dataketid, float deltat, float *prepared_energias, int pbcx, int pbcy, int Nx, int Ny, float Vx, float Vy, float sinkxax, float coskxax, float sinkyay, float coskyay);
__global__ void H2d_x(float *ket, float deltat, int id, int pbcx, int Nx, int Ny, float Vx, float sinkxax, float coskxax);
__global__ void H2d_y(float *ket, float deltat, int id, int pbcy, int Nx, int Ny, float Vy, float sinkyay, float coskyay);
__global__ void Hdiag2d(float *ket, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy);
//__global__ void H2di_x(float *ket, float deltatau, int id, int pbcx, int Nx, int Ny, float Vx, float sinkxax, float coskxax);
//__global__ void H2di_y(float *ket, float deltatau, int id, int pbcy, int Nx, int Ny, float Vy, float sinkyay, float coskyay);
//__global__ void Hdiag2di(float *ket, float deltatau, float *energias, int Nx, int Ny, float Vx, float Vy);

// Definition of variables {{{
/*
	int		debug;
	float	pi;
	float hbar;
	float	dNx;
	float	dNy;
	float	Lx;
	float	Ly;
	//int 	pbcx;
	//int 	pbcy;
	float	lambda;	
	float	innerR;
	float	outerR;
	float	alpha;
	float	beta;
	float	dt;
	float	dtmax;
	int		order;
	int		gsteps;
	int		verbose;
	int		debut;
	int		ground;
	int		nodyn;
	int		pars;
	char*	filepars;
	float	cloakEnergy;
	float	tmax;
	float	mass0;
	//float	ax;
	//float	ay;
	//float	kx;
	//float	ky;
*/
//}}}

// Definition of functions { { {
void evolve2d(float *ket, float t, float deltat, float *energias, int order, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay) {{{
{
	if (order==2) evolve2dO2(ket, t, deltat, energias, Nx, Ny, Vx, Vy, pbcx, pbcy, sinkxax, coskxax, sinkyay, coskyay);
//	if (order==4) evolve2dO4(ket, t, deltat, energias, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);
} }}}
void evolve2dO2(float *ket, float t, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy, int pbcx, int pbcy, float sinkxax, float coskxax, float sinkyay, float coskyay) {{{
//	This function leads the real-time evolution in second order up to time t.
//	float	ket			1D array describing the ket always alternating real and imaginary part of the ket
//	float	t			duration of the evolution
//	float	deltat		incremental timestep
//	float	energias*	Potential surface (e.g. external trapping potential) acting on the condensate
//	int		Nx			Number of discretization points in x direction
//	int		Ny			Number of discretization points in y direction
//	float	Vx			Off-disgonal matrix terms in x direction
//	float	Vy			Off-disgonal matrix terms in y direction
//	float	sinkxax		sin(kx*ax) - for better performance
//	float	coskxax		cos(kx*ax) - for better performance
//	float	sinkyay		sin(kx*ax) - for better performance
//	float	coskyay		cos(kx*ax) - for better performance
{
	// Threadsize depends on local (cache) memory.
	// My cards have only 16kB per block.
	// Each floating point takes 4 bits x 2 for complex numbers
	// Therefore, 32*32*8 = 8kB is already quite a lot.
	// XXX TRY LARGER VALUES
	// XXX 45x45*8 = 16200 < 16384
	int threadsPerBlockX         = SHARED_SIZE_PRIMARY;
	int threadsPerBlockY         = SHARED_SIZE_SECONDARY;
	int overhead                 = 2;
	int effectiveThreadsPerBlock = threadsPerBlockX - 2*overhead;
	int blocksPerGridX = (Nx + effectiveThreadsPerBlock - 1) / effectiveThreadsPerBlock;
	int blocksPerGridY = (Ny + effectiveThreadsPerBlock - 1) / effectiveThreadsPerBlock;
	dim3 threadsPerBlock(threadsPerBlockX, threadsPerBlockY);
	dim3 blocksPerGrid(blocksPerGridX, blocksPerGridY);
	
	int Nbrofits = (int) (t/deltat);
	float Remainingtime=t-((float)Nbrofits)*deltat;
	
	//int *inputarray = (int*) malloc(blocksPerGridX*blocksPerGridY*sizeof(int));
	//for (int i=0; i<blocksPerGridX*blocksPerGridY; i++) inputarray[i] = 0;

	float *prepared_energias = (float*) malloc(2*Nx*Ny*sizeof(float));
	for (int i=0; i<Nx*Ny; i++)
	{
		prepared_energias[2*i]   = cos(-deltat*(energias[i]-2.0*Vx-2.0*Vy));
		prepared_energias[2*i+1] = sin(-deltat*(energias[i]-2.0*Vx-2.0*Vy));
		//prepared_energias[2*i]   = 1.0;
		//prepared_energias[2*i+1] = 0.0;
	}

	float *d_ket0;
	float *d_ket1;
	float *d_prepared_energias;
	//int *d_inputarray;
	hipMalloc((void**)&d_ket0, 2*Nx*Ny*sizeof(float));
	hipMalloc((void**)&d_ket1, 2*Nx*Ny*sizeof(float));
	hipMalloc((void**)&d_prepared_energias, 2*Nx*Ny*sizeof(float));
	//cudaMalloc((void**)&d_inputarray, blocksPerGridX*blocksPerGridY*sizeof(int));
    hipMemcpy(d_ket0, ket, 2*Nx*Ny*sizeof(float), hipMemcpyHostToDevice);
    hipMemcpy(d_ket1, ket, 2*Nx*Ny*sizeof(float), hipMemcpyHostToDevice);
    hipMemcpy(d_prepared_energias, prepared_energias, 2*Nx*Ny*sizeof(float), hipMemcpyHostToDevice);
    //cudaMemcpy(d_inputarray, inputarray, blocksPerGridX*blocksPerGridY*sizeof(int), cudaMemcpyHostToDevice);
	
	
	bool DoRemainder;
	if (Remainingtime/deltat > 0.001) DoRemainder = true;
	else DoRemainder = false;
	float dt;
	float dthalf;
	
	dt     = deltat;
	dthalf = deltat/2.0;
	int dataketid=0;
	//printf("%f %d %d %d %d %f %f %f %f %f %f %f %f\n", dt, pbcx, pbcy, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);
	for (int i=0; i<Nbrofits; i++)
	//for (int i=0; i<1; i++)
	{
		H2d_step<<<blocksPerGrid, threadsPerBlock>>>(d_ket0, d_ket1, dataketid, dt, d_prepared_energias, pbcx, pbcy, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);
		hipDeviceSynchronize();
		dataketid=1-dataketid;
	}
	
//	if (DoRemainder)
//	{
//		dt     = Remainingtime;
//		H2d_step<<<blocksPerGrid, threadsPerBlock>>>(d_ket, dt, energias, pbcx, pbcy, Nx, Ny, Vx, Vy, sinkxax, coskxax, sinkyay, coskyay);		// x-axis, odd
//	}
	
	if (dataketid == 0) hipMemcpy(ket, d_ket0, 2*Nx*Ny*sizeof(float), hipMemcpyDeviceToHost);
	else hipMemcpy(ket, d_ket1, 2*Nx*Ny*sizeof(float), hipMemcpyDeviceToHost);

	hipFree(d_ket0);
	hipFree(d_ket1);
	hipFree(d_prepared_energias);
} }}}
__global__ void H2d_step(float *ket0, float *ket1, int dataketid, float deltat, float* prepared_energias, int pbcx, int pbcy, int Nx, int Ny, float Vx, float Vy, float sinkxax, float coskxax, float sinkyay, float coskyay) {{{
{
	// Two ket positions on each side need to be calculated for
	// intermediate steps but cannot be returned as result
	int overhead  = 2;
	// The number of threads to be returned from this block
	// is the number of input threads minus the overhead on each side
	// Note taht the number of ket elements will be (twice=complex) the
	// square of this number
	//int effectiveSize = SHARED_SIZE_PRIMARY - 2*overhead;
	// The local storage block has the same size as the 
	__shared__ float shared_ket[2*SHARED_SIZE_PRIMARY*SHARED_SIZE_PRIMARY];
	
	int globalx0 = (SHARED_SIZE_PRIMARY-2*overhead)*blockIdx.x - overhead;
	int globaly0 = (SHARED_SIZE_PRIMARY-2*overhead)*blockIdx.y - overhead;
	
	int globalid = ((globalx0 + threadIdx.x))*Ny + ((globaly0+2*threadIdx.y));
	int globalidpbc0 = ((Nx + globalx0 + threadIdx.x)%Nx)*Ny + ((Ny+globaly0+2*threadIdx.y)%Ny);
	int globalidpbc1 = ((Nx + globalx0 + threadIdx.x)%Nx)*Ny + ((Ny+globaly0+2*threadIdx.y+1)%Ny);
	int sharedid = threadIdx.x*SHARED_SIZE_PRIMARY + 2*threadIdx.y;
	int spos = 2*(sharedid);
	int gpos = 2*(globalid);
	int gpospbc0 = 2*(globalidpbc0);
	int gpospbc1 = 2*(globalidpbc1);
	if ( dataketid == 0 )
	{
		shared_ket[spos]   = ket0[gpospbc0];
		shared_ket[spos+1] = ket0[gpospbc0+1];
		shared_ket[spos+2] = ket0[gpospbc1];
		shared_ket[spos+3] = ket0[gpospbc1+1];
	} else {
		shared_ket[spos]   = ket1[gpospbc0];
		shared_ket[spos+1] = ket1[gpospbc0+1];
		shared_ket[spos+2] = ket1[gpospbc1];
		shared_ket[spos+3] = ket1[gpospbc1+1];
	}	
//	if (!(pbcx)) // XXX NOT IMPLEMENTED YET
//	if (!(pbcy)) // XXX NOT IMPLEMENTED YET
//	{	
//		shared_ket[spos]   = 0.0;
//		shared_ket[spos+1] = 0.0;
//		shared_ket[spos+2] = 0.0;
//		shared_ket[spos+3] = 0.0;
//	}
	__syncthreads();
					
	int mx, my;
	
	float temp1re, temp1im, temp2re, temp2im;
	float ketre, ketim;
	int cap, cap_p;
	
	float ketre_p, ketim_p;
	
	float deltathalf = deltat/2.0;
	
	float costx=(float) cos(deltathalf*Vx);
	float sintx=(float) sin(deltathalf*Vx);
	
	float costy=(float) cos(deltathalf*Vy);
	float sinty=(float) sin(deltathalf*Vy);
	
	int rap;
	float kre, kim, tmp, costmp, sintmp;
	
	my = threadIdx.x;
	mx = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	// temp1=costx*ket(x,y) - i sintx ket(x+1,y) exp(i ax kx)
	temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
	temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
	// temp2=- i sintx ket(x,y) exp(-i ax kx) + costx*ket(x+1,y);
	temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
	temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
	//ket(x,y) = (costx-i*sintx)*temp1
	shared_ket[cap]=costx*temp1re+sintx*temp1im;
	shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
	//ket(x+1,y) = (costx-i*sintx)*temp2
	shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
	shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	__syncthreads();
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		mx = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
		temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
		temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
		temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
		shared_ket[cap]=costx*temp1re+sintx*temp1im;
		shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
		shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
		shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	}
	__syncthreads();
	mx = threadIdx.x;
	my = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
	temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
	temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
	temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
	shared_ket[cap]=costy*temp1re+sinty*temp1im;
	shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
	shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
	shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	__syncthreads();
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		my = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
		temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
		temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
		temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
		shared_ket[cap]=costy*temp1re+sinty*temp1im;
		shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
		shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
		shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	}
	__syncthreads();
	for (int id=0; id<2; id++)
	{
		my = 2*threadIdx.y+id;
		rap=2*(((Nx+globalx0+mx)%Nx)*Ny+((globaly0+my+Ny)%Ny));
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		//tmp=-deltat*(energias[rap]-2.0*Vx-2.0*Vy);
		//costmp=(float) cos(tmp);
		//sintmp=(float) sin(tmp);
		costmp=prepared_energias[rap];
		sintmp=prepared_energias[rap+1];
		kre = ketre*costmp - ketim*sintmp;
		kim = ketim*costmp + ketre*sintmp;
		shared_ket[cap] = kre;
		shared_ket[cap+1] =kim;
	}
	__syncthreads();
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		my = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
		temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
		temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
		temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
		shared_ket[cap]=costy*temp1re+sinty*temp1im;
		shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
		shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
		shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	}
	__syncthreads();
	my = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*(mx*SHARED_SIZE_PRIMARY+(my+1));
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	temp1re=costy*ketre+sinty*(ketim_p*coskyay+ketre_p*sinkyay);
	temp1im=costy*ketim-sinty*(ketre_p*coskyay-ketim_p*sinkyay);
	temp2re=sinty*(-ketre*sinkyay+ketim*coskyay) + costy*ketre_p;
	temp2im=sinty*(-ketim*sinkyay-ketre*coskyay) + costy*ketim_p;
	shared_ket[cap]=costy*temp1re+sinty*temp1im;
	shared_ket[cap+1]=costy*temp1im-sinty*temp1re;
	shared_ket[cap_p]=costy*temp2re+sinty*temp2im;
	shared_ket[cap_p+1]=costy*temp2im-sinty*temp2re;
	__syncthreads();
	my = threadIdx.x;
	if (threadIdx.y < SHARED_SIZE_SECONDARY-1)
	{
		mx = 2*threadIdx.y+1;
		cap=2*(mx*SHARED_SIZE_PRIMARY+my);
		cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
		ketre=shared_ket[cap];
		ketim=shared_ket[cap+1];
		ketre_p=shared_ket[cap_p];
		ketim_p=shared_ket[cap_p+1];
		temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
		temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
		temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
		temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
		shared_ket[cap]=costx*temp1re+sintx*temp1im;
		shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
		shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
		shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	}
	__syncthreads();
	mx = 2*threadIdx.y;
	cap=2*(mx*SHARED_SIZE_PRIMARY+my);
	cap_p=2*((mx+1)*SHARED_SIZE_PRIMARY+my);
	ketre=shared_ket[cap];
	ketim=shared_ket[cap+1];
	ketre_p=shared_ket[cap_p];
	ketim_p=shared_ket[cap_p+1];
	temp1re=costx*ketre+sintx*(ketim_p*coskxax+ketre_p*sinkxax);
	temp1im=costx*ketim-sintx*(ketre_p*coskxax-ketim_p*sinkxax);
	temp2re=sintx*(-ketre*sinkxax+ketim*coskxax) + costx*ketre_p;
	temp2im=sintx*(-ketim*sinkxax-ketre*coskxax) + costx*ketim_p;
	shared_ket[cap]=costx*temp1re+sintx*temp1im;
	shared_ket[cap+1]=costx*temp1im-sintx*temp1re;
	shared_ket[cap_p]=costx*temp2re+sintx*temp2im;
	shared_ket[cap_p+1]=costx*temp2im-sintx*temp2re;
	__syncthreads();
	
	if (threadIdx.x>=overhead && 2*threadIdx.y>=overhead && threadIdx.x<SHARED_SIZE_PRIMARY-overhead && 2*threadIdx.y<SHARED_SIZE_PRIMARY-overhead-1)
	{
		if ( (globalx0+threadIdx.x < Nx) && (globaly0+2*threadIdx.y<Ny-1) )
		{
			if ( dataketid == 0 )
			{
				ket1[gpos]   = shared_ket[spos];
				ket1[gpos+1] = shared_ket[spos+1];
				ket1[gpos+2] = shared_ket[spos+2];
				ket1[gpos+3] = shared_ket[spos+3];
			} else 
			{
				ket0[gpos]   = shared_ket[spos];
				ket0[gpos+1] = shared_ket[spos+1];
				ket0[gpos+2] = shared_ket[spos+2];
				ket0[gpos+3] = shared_ket[spos+3];
			}
		}
	}
} }}}
__global__ void H2d_x(float *ket, float deltat, int id, int pbcx, int Nx, int Ny, float Vx, float sinkxax, float coskxax) {{{
{
//	int Radius = 3;
//	int BlockDim_x = blockDim.x;
//	__shared__ float s_a[BlockDim_x+2*Radius];
//	int global_ix = blockDim.x*blockIdx.x + threadIdx.x;
//	int local_ix = Radius + threadIdx.x;
//	
//	s_a[local_ix] = input[global_ix];
//	
//	if ( threadIdx.x < Radius )
//	{
//		s_a[local_ix-Radius]     = input[global_ix-Radius];
//		s_a[local_ix+BlockDim_x] = input[global_ix+BlockDim_x];
//	}
//	__syncthreads();
//	
//	float value = 0.0;
//	for (offset = -Radius; offset <=Radius; offset++)
//		value += s_a[local_ix + offset];
//
//	output[global_ix] = value;

//	int globalSizeX = 1000;
//	int globalSizeY = 1000;
//	int RadiusX = 3;
//	int RadiusY = 3;
//	int BlockDimX = blockDim.x;
//	int BlockDimY = blockDim.y;
//	int localSizeX = BlockDimX+2*RadiusX;
//	int localSizeY = BlockDimY+2*RadiusY;
//	__shared__ float s_a[SizeX*SizeY];
//	int global_ix = blockDim.x*blockIdx.x + threadIdx.x;
//	int global_iy = blockDim.y*blockIdx.y + threadIdx.y;
//	int local_ix = RadiusX + threadIdx.x;
//	int local_iy = RadiusY + threadIdx.y;
//	
//	s_a[local_ix*localSizeY+local_iy] = input[global_ix*globalSizeY+global_iy];
//	
//	if ( threadIdx.x < RadiusX )
//	{
//		s_a[(local_ix-RadiusX)*localSizeY+local_iy]   = input[(global_ix-Radius)*globalSizeY+global_iy];
//		s_a[(local_ix+BlockDimX)*localSizeY+local_iy] = input[(global_ix+BlockDim_x)*globalSizeY+global_iy];
//	}
//	if ( threadIdx.y < RadiusY )
//	{
//		s_a[local_ix*localSizeY+local_iy-RadiusY]   = input[global_ix*globalSizeY+global_iy-RadiusY];
//		s_a[local_ix*localSizeY+local_iy+BlockDimY] = input[global_ix*globalSizeY+global_iy+BlockDimY];
//	}
//	__syncthreads();
//	
//	float value = 0.0;
//	for (offsetX = -RadiusX; offsetX <=RadiusX; offsetX++)
//		for (offsetY = -RadiusY; offsetY <=RadiusY; offsetY++)
//			value += s_a[(local_ix + offsetX)*localSizeY+local_iy+offsetY];
//
//	output[global_ix*globalSizeY+global_iy] = value;

/*	
	int globalSizeX = 500;
	int globalSizeY = 500;
	int RadiusX = 3;
	int RadiusY = 3;
	int BlockDimX = blockDim.x;
	int BlockDimY = blockDim.y;
	int localSizeX = BlockDimX+2*RadiusX;
	int localSizeY = BlockDimY+2*RadiusY;
	__shared__ float s_a[SizeX*SizeY];
	int global_ix = blockDim.x*blockIdx.x + threadIdx.x;
	int global_iy = blockDim.y*blockIdx.y + threadIdx.y;
	int local_ix = RadiusX + threadIdx.x;
	int local_iy = RadiusY + threadIdx.y;
	
	s_a[local_ix*localSizeY+local_iy] = input[global_ix*globalSizeY+global_iy];
	
	if ( threadIdx.x < RadiusX )
	{
		s_a[(local_ix-RadiusX)*localSizeY+local_iy]   = input[(global_ix-Radius)*globalSizeY+global_iy];
		s_a[(local_ix+BlockDimX)*localSizeY+local_iy] = input[(global_ix+BlockDim_x)*globalSizeY+global_iy];
	}
	if ( threadIdx.y < RadiusY )
	{
		s_a[local_ix*localSizeY+local_iy-RadiusY]   = input[global_ix*globalSizeY+global_iy-RadiusY];
		s_a[local_ix*localSizeY+local_iy+BlockDimY] = input[global_ix*globalSizeY+global_iy+BlockDimY];
	}
	__syncthreads();
	
	float value = 0.0;
	for (offsetX = -RadiusX; offsetX <=RadiusX; offsetX++)
		for (offsetY = -RadiusY; offsetY <=RadiusY; offsetY++)
			value += s_a[(local_ix + offsetX)*localSizeY+local_iy+offsetY];

	output[global_ix*globalSizeY+global_iy] = value;
*/
	
	int my = blockDim.x * blockIdx.x + threadIdx.x;
	int Nstart;
	int Nfinal;
	if (id==1)
	{
		Nstart=0;
		Nfinal=Nx-1;
	}
	if (id==2)
	{
		Nstart=1;
		Nfinal=Nx-2;
	}
	float cost, sint, temp1re, temp1im, temp2re, temp2im;;
	int mx, cap, cap_p;
	cost=(float) cos(deltat*Vx);
	sint=(float) sin(deltat*Vx);
	float ketre, ketim, ketre_p, ketim_p;
	if (my<Ny)
	{
		
		
		for (mx=Nstart; mx<Nfinal; mx+=2)
		{
			cap=2*(mx*Ny+my);
			cap_p=2*((mx+1)*Ny+my);
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			// temp1=cost*ket(x,y) - i sint ket(x+1,y) exp(i ax kx)
			temp1re=cost*ketre+sint*(ketim_p*coskxax+ketre_p*sinkxax);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskxax-ketim_p*sinkxax);	// checked: ok - fixed one sign error!!
			// temp2=- i sint ket(x,y) exp(-i ax kx) + cost*ket(x+1,y);
			temp2re=sint*(-ketre*sinkxax+ketim*coskxax) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkxax-ketre*coskxax) + cost*ketim_p;	// checked: ok
			//ket(x,y) = (cost-i*sint)*temp1
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			//ket(x+1,y) = (cost-i*sint)*temp2
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
	if ((pbcx)&&(id==2))
	{
		if (my<Ny)
		{
			cap=2*((Nx-1)*Ny+my);
			cap_p=2*my;
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			temp1re=cost*ketre+sint*(ketim_p*coskxax+ketre_p*sinkxax);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskxax-ketim_p*sinkxax);	// checked: ok - fixed one sign error!!
			temp2re=sint*(-ketre*sinkxax+ketim*coskxax) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkxax-ketre*coskxax) + cost*ketim_p;	// checked: ok
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
} }}}
__global__ void H2d_y(float *ket, float deltat, int id, int pbcy, int Nx, int Ny, float Vy, float sinkyay, float coskyay) {{{
{
	int mx = blockDim.x * blockIdx.x + threadIdx.x;
	int Nstart;
	int Nfinal;
	if (id==1)
	{
		Nstart=0;
		Nfinal=Ny-1;
	}
	if (id==2)
	{
		Nstart=1;
		Nfinal=Ny-2;
	}
	float cost, sint, temp1re, temp1im, temp2re, temp2im;;
	int  my, cap, cap_p;
	cost=(float) cos(deltat*Vy);
	sint=(float) sin(deltat*Vy);
	float ketre, ketim, ketre_p, ketim_p;
	if (mx<Nx)
	{
		for (my=Nstart; my<Nfinal; my+=2)
		{
			cap=2*(mx*Ny+my);
			cap_p=2*(mx*Ny+(my+1));
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			temp1re=cost*ketre+sint*(ketim_p*coskyay+ketre_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskyay-ketim_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp2re=sint*(-ketre*sinkyay+ketim*coskyay) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkyay-ketre*coskyay) + cost*ketim_p;	// checked: ok
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
	if ((pbcy)&&(id==2))
	{
		if (mx<Nx)
		{
			cap=2*(mx*Ny+Ny-1);
			cap_p=2*(mx*Ny);
			ketre=ket[cap];
			ketim=ket[cap+1];
			ketre_p=ket[cap_p];
			ketim_p=ket[cap_p+1];
			temp1re=cost*ketre+sint*(ketim_p*coskyay+ketre_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp1im=cost*ketim-sint*(ketre_p*coskyay-ketim_p*sinkyay);	// checked: ok - fixed one sign error!!
			temp2re=sint*(-ketre*sinkyay+ketim*coskyay) + cost*ketre_p;	// checked: ok
			temp2im=sint*(-ketim*sinkyay-ketre*coskyay) + cost*ketim_p;	// checked: ok
			ket[cap]=cost*temp1re+sint*temp1im;							// checked: ok
			ket[cap+1]=cost*temp1im-sint*temp1re;						// checked: ok
			ket[cap_p]=cost*temp2re+sint*temp2im;						// checked: ok
			ket[cap_p+1]=cost*temp2im-sint*temp2re;					// checked: ok
		}
	}
} }}}
__global__ void Hdiag2d(float *ket, float deltat, float *energias, int Nx, int Ny, float Vx, float Vy) {{{
{
	int mx = blockDim.x * blockIdx.x + threadIdx.x;
	int my;
	int cap;
	int rap;
	float kre, kim, tmp, costmp, sintmp;
	float ketre, ketim;
	if (mx < Nx)
	{
		for (my=0; my<Ny; my++)
		{
			rap=mx*Ny+my;
			cap=2*rap;
			ketre=ket[cap];
			ketim=ket[cap+1];
			tmp=-deltat*(energias[rap]-2.0*Vx-2.0*Vy);
			costmp=(float) cos(tmp);
			sintmp=(float) sin(tmp);
			kre = ketre*costmp - ketim*sintmp;
			kim = ketim*costmp + ketre*sintmp;
			ket[cap] = kre;
			ket[cap+1] =kim;
		}
	}

} }}}
// } } }
// commented main 
int main(int argc, char *argv[])
{
 // Definition of variables {{{ 
	int		debug	=	0;
	float	pi		= 4.0*((float) atan(1.0));
	float	hbar	= 1.0; // XXX XXX XXX WE SET hbar = 1.0 XXX XXX XXX
	int		Nx		= 400;
	int		Ny		= 400;
	float	dNx		= (float) Nx;
	float	dNy		= (float) Ny;
	float	Lx		=  20.0;
	float	Ly		=  20.0;
	int		pbcx	=   1; // C has no boolean data type; we use false=0, true=1
	int		pbcy	=   1; // C has no boolean data type; we use false=0, true=1
	float	lambda	=   0.0; // XXX NEVER USED XXX
	float	innerR	=   0.0; // XXX NEVER USED XXX
	float	outerR	=   4.0; // XXX NEVER USED XXX
	float	alpha	= 100.0;
	float	beta	=  20.0;
	float	x0		= -12.0;
	float	y0		=   0.0; // XXX NEVER USED XXX
	float	sx		=   3.0;
	float	sy		=   3.0; // XXX NEVER USED XXX
	float	px0		=   0.0;	// XXX formerly: 0.1*pi*hbar/ax;
	float	py0		=   0.0;
	float	dt		=   0.001;
//	float	dtmax	=	1.0; // XXX NEVER USED XXX
	int		order	=	2; // XXX NEVER USED XXX
//	int		gsteps	= 100; // XXX NEVER USED XXX
	char	*file	= "test"; // XXX NEVER USED XXX
//	char	*filein	= "test"; // XXX NEVER USED XXX
	char	*dir	= "data"; // XXX NEVER USED XXX
	int		verbose	=	0;
//	int		debut	=	0; // XXX NEVER USED XXX
//	int		ground	=	0; // XXX NEVER USED XXX
//	int		nodyn	=	0; // XXX NEVER USED XXX
	char	*form	= "DT"; // XXX NEVER USED XXX
	int		pars	=	0; // XXX NEVER USED XXX
	int 	abort	=	0; // XXX NEVER USED XXX
	float	cloakEnergy = 0.0; // XXX NEVER USED XXX
	float	mass0=0.5;
	float	tmax	=	10.0;

	char	*filepars;
	float	ax;
	float	ay;
//}}}
// Command line arguments analysis {{{
	int n=1;
	while (n<argc)
	{
		if (strcmp(argv[n],"-pars")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-pars found at position %i, argument is %s\n", n, argv[n+1]);
				filepars=argv[n+1]; 
				pars=1;
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-nx")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-nx found at position %i, argument is %s\n", n, argv[n+1]);
				Nx=atoi(argv[n+1]);
				dNx=(float) Nx;
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-ny")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-ny found at position %i, argument is %s\n", n, argv[n+1]);
				Ny=atoi(argv[n+1]); 
				dNy=(float) Ny;
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-Lx")==0)
		{
			if (n+1<argc) 
			{
				if (debug) printf("-Lx found at position %i, argument is %s\n", n, argv[n+1]);
				Lx=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-Ly")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-Ly found at position %i, argument is %s\n", n, argv[n+1]);
				Ly=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-lambda")==0)
		{
			if (n+1<argc) 
			{
				if (debug) printf("-lambda found at position %i, argument is %s\n", n, argv[n+1]);
				lambda=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-R1")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-R1 found at position %i, argument is %s\n", n, argv[n+1]);
				innerR=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-R2")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-R2 found at position %i, argument is %s\n", n, argv[n+1]);
				outerR=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-target")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-target found at position %i, argument is %s\n", n, argv[n+1]);
				cloakEnergy=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-alpha")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-alpha found at position %i, argument is %s\n", n, argv[n+1]);
				alpha=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-beta")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-beta found at position %i, argument is %s\n", n, argv[n+1]);
				beta=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-x0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-x0 found at position %i, argument is %s\n", n, argv[n+1]);
				x0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-y0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-y0 found at position %i, argument is %s\n", n, argv[n+1]);
				y0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-sx")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-sx found at position %i, argument is %s\n", n, argv[n+1]);
				sx=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-sy")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-sy found at position %i, argument is %s\n", n, argv[n+1]);
				sy=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-px0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-px0 found at position %i, argument is %s\n", n, argv[n+1]);
				px0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-py0")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-py0 found at position %i, argument is %s\n", n, argv[n+1]);
				py0=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-dt")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-dt found at position %i, argument is %s\n", n, argv[n+1]);
				dt=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-order")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-order found at position %i, argument is %s\n", n, argv[n+1]);
				order=atoi(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-time")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-time found at position %i, argument is %s\n", n, argv[n+1]);
				tmax=(float) atof(argv[n+1]);
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-file")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-file found at position %i, argument is %s\n", n, argv[n+1]);
				file=argv[n+1];
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-format")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-format found at position %i, argument is %s\n", n, argv[n+1]);
				form=argv[n+1];
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-dir")==0)
		{
			if (n+1<argc)
			{
				if (debug) printf("-dir found at position %i, argument is %s\n", n, argv[n+1]);
				dir=argv[n+1];
				n+=2;
			}
		} else
		if (strcmp(argv[n],"-V")==0)
		{
			if (debug) printf("-verbose found at position %i\n", n);
			verbose=1;
			n++;
		} else
		if (strcmp(argv[n],"-pbcx")==0)
		{
			if (debug) printf("-pbcx found at position %i\n", n);
			pbcx=1;
			n++;
		} else
		if (strcmp(argv[n],"-pbcy")==0)
		{
			if (debug) printf("-pbcy found at position %i\n", n);
			pbcy=1;
			n++;
		} else
		if (strcmp(argv[n],"-debug")==0)
		{
			debug=1;
			printf("-debug found at position %i; all subsequent arguments are listed\n", n);
			n++;
		} else
		{
			printf("ERROR: Wrong argument at position %i: $s\n", n, argv[n]);
			printf("Cloaking of matter waves in 2D. Wrong parameters.\n");
			printf("Options: \n");
			printf("    System:\n");
			printf("        -nx -ny  Points in X and Y direction\n");
			printf("        -Lx -Ly  Size in X and Y direction (system is from -L to +L)\n");
			printf("        -lambda  Boson-boson interaction strength\n");
			printf("        -R1 -R2  Internal and external cloak radius\n");
			printf("        -target  target energy (factor from chemical potential)\n");
			printf("        -alpha   Intensity of perturbation at origin\n");
			printf("        -beta    1/Radius^2 of perturbation at origin\n");
			printf("        -pbcx -pbcy Periodic boundary conditions\n");
			printf("    Wave packet:\n"         );
			printf("        -x0 -y0  Initial position\n");
			printf("        -sx -sy  Position dispersion (sigmas)\n");
			printf("        -px0 -py0  Initial momentum\n");
			printf("    Simulation:\n"         );
			printf("        -time   Evolution time\n");
			printf("        -dt      Time step\n");
			printf("        -order   Algorithm order (default 2)\n");
			printf("    Input/Output:\n"         );
			printf("        -file    Output file base name\n");
			printf("        -format  Output file format (DT, TP)\n");
			printf("        -pars    Parameters file (all other input is ignored)\n");
			printf("        -dir     Input/Output directory\n");
			printf("        -V       Verbose\n");
			printf("        -debug   Debug\n");
			abort = 1;
			exit(1);
		}
	}
//}}}	
// Memory allocation {{{
	// XXX	file=trim(adjustl(dir))//'/'//trim(file)
	// XXX	fileini=trim(adjustl(dir))//'/'//trim(fileini)
	//int		steps	= (int) (tmax/dt);
	if (pbcx) ax=2.0*Lx/dNx; else ax=2.0*Lx/(dNx+1.0);
	if (pbcy) ay=2.0*Ly/dNy; else ay=2.0*Ly/(dNy+1.0);
	float	Vx		= -hbar*hbar/(2.0*ax*ax);
	float	Vy		= -hbar*hbar/(2.0*ay*ay);
	float	kx		=	0.0;	// rotx*pi/Lx	
	float	ky		=	0.0;	// roty*pi/Ly	
	
	if (debug) printf("Allocating memory\n");
	int MatrixSize=Nx*Ny;
	float *phi0 = (float*) malloc(2*MatrixSize*sizeof(float));
	if (phi0==0)
	{
		printf("ERROR: memory of variable phi0 could not be allocated.\n");
		exit(1);
	}
	float *phit = (float*) malloc(2*MatrixSize*sizeof(float));
	if (phit==0)
	{
		printf("ERROR: memory of variable phit could not be allocated.\n");
		exit(1);
	}
	float *potential = (float*) malloc(MatrixSize*sizeof(float));
	if (potential==0)
	{
		printf("ERROR: memory of variable potential could not be allocated.\n");
		exit(1);
	}
	float *Et = (float*) malloc(MatrixSize*sizeof(float));
	if (Et==0)
	{
		printf("ERROR: memory of variable Et could not be allocated.\n");
		exit(1);
	}
	float *pert = (float*) malloc(MatrixSize*sizeof(float));
	if (pert==0)
	{
		printf("ERROR: memory of variable pert could not be allocated.\n");
		exit(1);
	}
//}}}
// Compute initial conditions{{{
	int mx, my, carraypos, rarraypos;
	float x, y, x2, y2, dx, dx2, sx2, exp_local, exp_xplus, exp_xminus, r2;
	sx2=sx*sx;
	for (mx=0; mx<Nx; mx++)
	{
		x=((float)mx)*ax-Lx;
		x2=x*x;
		dx=x-x0;
		dx2=dx*dx;
		exp_local  = ((float) exp(-0.5*dx2/sx2));
		exp_xminus = ((float) exp(-0.5*(dx-2.0*Lx)*(dx-2.0*Lx)/sx2));
		exp_xplus  = ((float) exp(-0.5*(dx+2.0*Lx)*(dx+2.0*Lx)/sx2));
		for (my=0; my<Ny; my++)
		{
			y=((float)my)*ay-Ly;
			y2=y*y;
			rarraypos=mx*Ny+my;
			carraypos=2*(mx*Ny+my);
			float phi0re=0.0;
			float phi0im=0.0;
			phi0re = exp_local*((float) cos(px0*x+py0*y));
			phi0im = exp_local*((float) sin(px0*x+py0*y));
			if (pbcx)
			{
				phi0re += exp_xminus * ((float) cos(px0*(x-2.0*Lx)+py0*y));
				phi0re += exp_xplus  * ((float) cos(px0*(x+2.0*Lx)+py0*y));
				phi0im += exp_xminus * ((float) sin(px0*(x-2.0*Lx)+py0*y));
				phi0im += exp_xplus  * ((float) sin(px0*(x+2.0*Lx)+py0*y));
			}
			if (pbcy)
			{
//				phi0re += exp_local * ((float) cos(px0*x+py0*(y-2.0*Ly)));
//				phi0re += exp_local * ((float) cos(px0*x+py0*(y+2.0*Ly)));
//				phi0im += exp_local * ((float) sin(px0*x+py0*(y-2.0*Ly)));
//				phi0im += exp_local * ((float) sin(px0*x+py0*(y-2.0*Ly)));
			}
			phi0[carraypos]   = phi0re;
			phi0[carraypos+1] = phi0im;
			r2=x2+y2;
			if (r2<beta*beta) potential[rarraypos]=alpha;
			//potential[rarraypos]  = alpha*exp(-beta*r2);
		}
	}
	float rtemp=0.0;
	float phi0re, phi0re2, phi0im, phi0im2;
	for (mx=0; mx<Nx; mx++)
	{
		for (my=0; my<Ny; my++)
		{
			carraypos=2*(mx*Ny+my);
			phi0re=phi0[carraypos];
			phi0re2=phi0re*phi0re;
			phi0im=phi0[carraypos+1];
			phi0im2=phi0im*phi0im;
			rtemp += ax*ay*(phi0re2+phi0im2);
		}
	}
	float sqr_rtemp=sqrt(rtemp);
	for (mx=0; mx<Nx; mx++)
	{
		for (my=0; my<Ny; my++)
		{
			carraypos=2*(mx*Ny+my);
			phi0[carraypos]   *= 1.0/sqr_rtemp;
			phi0[carraypos+1] *= 1.0/sqr_rtemp;
		}
	}
	// Calculate chemical potential and <r^2>
	float ctempre = 0.0;
	float ctempim = 0.0;
	rtemp = 0.0;
	if (verbose) printf("Computing chemical potential\n");
	int mxm, mxp, mym, myp;
	float rxm, rxp, rym, ryp;
	float prefact, cVx, cVy;
	for (mx=1; mx<(Nx-1); mx++)
	{
		x=((float)mx)*ax-Lx;
		mxp = mx+1;
		if ((pbcx)&&(mx==Nx)) mxp=1;
		rxp=((float)mxp)*ax-Lx;
		mxm = mx-1;
		if ((pbcx)&&(mx==1)) mxm=Nx;
		rxm=((float)mxm)*ax-Lx;
		for (my=1; my<(Ny-1); my++)
		{
			y=((float)my)*ay-Ly;
			myp = my+1;
			if ((pbcy)&&(my==Ny)) myp=1;
			ryp=((float)myp)*ay-Ly;
			mym = my-1;
			if ((pbcy)&&(my==1)) mym=Ny;
			rym=((float)mym)*ay-Ly;
			
			carraypos=2*(mx*Ny+my);
			prefact=ax*ay;
// XXX XXX XXX	cVx=Vx*(phi0[2*(mxp*Ny+my)]*massxx[rxp*Ny+y]+phi0[2*(mxm*Ny+my)]*massxx[rxm*Ny+y]-phi0[2*(mx*Ny+my)]*(massxx[rxm*Ny+y]+massxx[rxp*Ny+y]))
			cVx=Vx*(phi0[2*(mxp*Ny+my)]*mass0+phi0[2*(mxm*Ny+my)]*mass0-phi0[2*(mx*Ny+my)]*(mass0+mass0));
// XXX XXX XXX	cVy=Vy*(phi0[2*(mx*Ny+myp)]*massyy[x*Ny+ryp]+phi0[2*(mx*Ny+mym)]*massyy[x*Ny+rym]-phi0[2*(mx*Ny+my)]*(massyy[x*Ny+ryp]+massyy[x*Ny+rym]))
			cVy=Vy*(phi0[2*(mx*Ny+myp)]*mass0+phi0[2*(mx*Ny+mym)]*mass0-phi0[2*(mx*Ny+my)]*(mass0+mass0));
			phi0re=phi0[carraypos];
			phi0im=phi0[carraypos+1];
			ctempre	+=	 prefact*phi0re*(cVx+cVy);
			ctempim	+=	-prefact*phi0im*(cVx+cVy);
		}
	}
	printf("mu = %f + %f*i; taking real part only\n", ctempre, ctempim);
	float mu=ctempre;
	printf("Chemical potential: %f\n", mu);
	float p2=(px0*px0+py0*py0)/(2.0*mass0);
	printf("p^2: %f\n", p2);
	
	rtemp=2.0*Vx*(1.0-((float) cos(px0*ax)))/mass0+2.0*Vy*(1.0-((float) cos(py0*ay)))/mass0;	//Energy of wave
	printf("Lattice energy\n");
	for (mx=0; mx<Nx; mx++)
	{
		x=((float)mx)*ax-Lx;
		//x2=x*x;
		for (my=0; my<Ny; my++)
		{
			y=((float)my)*ay-Ly;
			//y2=y*y;
			//r=sqrt(x2+y2);
			// XXX XXX XXX potential[mx*Ny+my]+=(1.0d0-detLame(1.0d0*mx,1.0d0*my))*(rtemp*cloakEnergy);
		}
	}
	printf("Hoppings: Vx=%f, Vy=%f\n", Vx, Vy);
	if (verbose) printf("Hoppings: Vx=%f, Vy=%f\n", Vx, Vy);
	if (verbose) printf("Momenta:  kx=%f, ky=%f\n", kx, ky);
	// XXX NOT USED XXX if (verbose) printf("Imaginary time step=%f\n", isteps);
	
	if (verbose)
	{
		rtemp = 0.0;
		for (mx=1; mx<Nx; mx++)
		{
			for (my=1; my<Ny; my++)
			{
				carraypos=2*(mx*Ny+my);
				phi0re=phi0[carraypos];
				phi0im=phi0[carraypos+1];
				phi0re2=phi0re*phi0re;
				phi0im2=phi0im*phi0im;
				rtemp+=ax*ay*(phi0re2+phi0im2);
			}
		}
		printf("Initial state module: rtemp=%f\n", rtemp);
	}
//}}}
// Perform imaginary time evolution	{{ {
	int m;
	for (m=0; m<2*Nx*Ny; m++) phit[m] = phi0[m];
	for (m=0; m<Nx*Ny; m++) Et[m] = potential[m];
	if (debug)
	{
		printf("Saving potential [not implemented yet]\n");
	}
	if (debug)
	{
		printf("Saving initial configuration [not implemented yet]\n");
	}
	printf("tmax   %f\n", tmax);
	printf("dt     %f\n", dt);
	printf("order  %d\n",order);
	
	float sinkxax = ((float) sin(kx*ax));
	float coskxax = ((float) cos(kx*ax));
	float sinkyay = ((float) sin(ky*ay));
	float coskyay = ((float) cos(ky*ay));
	FILE *fp;
	fp=fopen("GPU_Suzuki.ket", "w+");
	int Itot, q, irc;
	Itot=100;
	int NbrOfIterations=Itot+1;
	irc = fwrite(&NbrOfIterations, sizeof(int), 1, fp);
	irc = fwrite(&Nx, sizeof(int), 1, fp);
	irc = fwrite(&Ny, sizeof(int), 1, fp);
	irc = fwrite(phit, sizeof(float), 2*Nx*Ny, fp);
	for (q=0; q<Itot; q++)
	{
		printf("%d\n", q);
		evolve2d(phit, tmax, dt, Et, order, Nx, Ny, Vx, Vy, pbcx, pbcy, sinkxax, coskxax, sinkyay, coskyay);
		irc = fwrite(phit, sizeof(float), 2*Nx*Ny, fp);
	}
	fclose(fp);
// }} }
// Free memory and exit {{{
	if (debug) printf("Freeing allocated memory\n");
	free(phi0);
	free(phit);
	free(potential);
	free(Et);
	free(pert);
	if (debug) printf("All done\n");
	return 0;
//}}}
} 


	.text
	.file	"GPU_Suzuki.hip"
	.globl	_Z8evolve2dPfffS_iiiffiiffff    # -- Begin function _Z8evolve2dPfffS_iiiffiiffff
	.type	_Z8evolve2dPfffS_iiiffiiffff,@function
_Z8evolve2dPfffS_iiiffiiffff:           # @_Z8evolve2dPfffS_iiiffiiffff
	.cfi_startproc
# %bb.0:
	cmpl	$2, %edx
	jne	.LBB0_1
# %bb.2:
	movl	8(%rsp), %eax
	movl	%ecx, %edx
	movl	%r8d, %ecx
	movl	%r9d, %r8d
	movl	%eax, %r9d
	jmp	_Z10evolve2dO2PfffS_iiffiiffff  # TAILCALL
.LBB0_1:
	retq
.Lfunc_end0:
	.size	_Z8evolve2dPfffS_iiiffiiffff, .Lfunc_end0-_Z8evolve2dPfffS_iiiffiiffff
	.cfi_endproc
                                        # -- End function
	.section	.rodata.cst16,"aM",@progbits,16
	.p2align	4, 0x0                          # -- Begin function _Z10evolve2dO2PfffS_iiffiiffff
.LCPI1_0:
	.long	0x80000000                      # float -0
	.long	0x80000000                      # float -0
	.long	0x80000000                      # float -0
	.long	0x80000000                      # float -0
	.text
	.globl	_Z10evolve2dO2PfffS_iiffiiffff
	.type	_Z10evolve2dO2PfffS_iiffiiffff,@function
_Z10evolve2dO2PfffS_iiffiiffff:         # @_Z10evolve2dO2PfffS_iiffiiffff
	.cfi_startproc
# %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	pushq	%r15
	.cfi_def_cfa_offset 24
	pushq	%r14
	.cfi_def_cfa_offset 32
	pushq	%r13
	.cfi_def_cfa_offset 40
	pushq	%r12
	.cfi_def_cfa_offset 48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	subq	$136, %rsp
	.cfi_def_cfa_offset 192
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movss	%xmm7, 60(%rsp)                 # 4-byte Spill
	movss	%xmm6, 56(%rsp)                 # 4-byte Spill
	movss	%xmm5, 52(%rsp)                 # 4-byte Spill
	movss	%xmm4, 48(%rsp)                 # 4-byte Spill
	movl	%r9d, 44(%rsp)                  # 4-byte Spill
	movl	%r8d, 40(%rsp)                  # 4-byte Spill
	movss	%xmm3, 12(%rsp)                 # 4-byte Spill
	movss	%xmm2, 8(%rsp)                  # 4-byte Spill
                                        # kill: def $ecx killed $ecx def $rcx
                                        # kill: def $edx killed $edx def $rdx
	movq	%rsi, %rbp
	movq	%rdi, 104(%rsp)                 # 8-byte Spill
	movaps	%xmm1, 112(%rsp)                # 16-byte Spill
	divss	%xmm1, %xmm0
	cvttss2si	%xmm0, %r12d
	movq	%rcx, 72(%rsp)                  # 8-byte Spill
	movl	%ecx, %r14d
	movq	%rdx, 64(%rsp)                  # 8-byte Spill
	imull	%edx, %r14d
	leal	(%r14,%r14), %eax
	movslq	%eax, %r15
	shlq	$2, %r15
	movq	%r15, %rdi
	callq	malloc
	movq	%rax, %rbx
	testl	%r14d, %r14d
	jle	.LBB1_3
# %bb.1:                                # %.lr.ph
	movaps	.LCPI1_0(%rip), %xmm0           # xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]
	xorps	112(%rsp), %xmm0                # 16-byte Folded Reload
	cvtss2sd	%xmm0, %xmm0
	movsd	%xmm0, 96(%rsp)                 # 8-byte Spill
	xorps	%xmm0, %xmm0
	cvtss2sd	8(%rsp), %xmm0                  # 4-byte Folded Reload
	addsd	%xmm0, %xmm0
	movsd	%xmm0, 88(%rsp)                 # 8-byte Spill
	xorps	%xmm0, %xmm0
	cvtss2sd	12(%rsp), %xmm0                 # 4-byte Folded Reload
	addsd	%xmm0, %xmm0
	movsd	%xmm0, 80(%rsp)                 # 8-byte Spill
	movl	%r14d, %r14d
	xorl	%r13d, %r13d
.LBB1_2:                                # =>This Inner Loop Header: Depth=1
	xorps	%xmm0, %xmm0
	cvtss2sd	(%rbp,%r13,4), %xmm0
	subsd	88(%rsp), %xmm0                 # 8-byte Folded Reload
	subsd	80(%rsp), %xmm0                 # 8-byte Folded Reload
	mulsd	96(%rsp), %xmm0                 # 8-byte Folded Reload
	callq	cos
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, (%rbx,%r13,8)
	xorps	%xmm0, %xmm0
	cvtss2sd	(%rbp,%r13,4), %xmm0
	subsd	88(%rsp), %xmm0                 # 8-byte Folded Reload
	subsd	80(%rsp), %xmm0                 # 8-byte Folded Reload
	mulsd	96(%rsp), %xmm0                 # 8-byte Folded Reload
	callq	sin
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 4(%rbx,%r13,8)
	incq	%r13
	cmpq	%r13, %r14
	jne	.LBB1_2
.LBB1_3:                                # %._crit_edge
	leaq	32(%rsp), %r14
	movq	%r14, %rdi
	movq	%r15, %rsi
	callq	hipMalloc
	leaq	24(%rsp), %rbp
	movq	%rbp, %rdi
	movq	%r15, %rsi
	callq	hipMalloc
	leaq	16(%rsp), %rdi
	movq	%r15, %rsi
	callq	hipMalloc
	movq	(%r14), %rdi
	movq	104(%rsp), %r13                 # 8-byte Reload
	movq	%r13, %rsi
	movq	%r15, %rdx
	movl	$1, %ecx
	callq	hipMemcpy
	movq	(%rbp), %rdi
	movq	%r13, %rsi
	movq	%r15, %rdx
	movl	$1, %ecx
	callq	hipMemcpy
	leaq	16(%rsp), %rax
	movq	(%rax), %rdi
	movq	%rbx, %rsi
	movq	%r15, %rdx
	movl	$1, %ecx
	callq	hipMemcpy
	testl	%r12d, %r12d
	jle	.LBB1_9
# %bb.4:                                # %.lr.ph92.preheader
	movq	72(%rsp), %rax                  # 8-byte Reload
	addl	$23, %eax
	movq	64(%rsp), %rcx                  # 8-byte Reload
	addl	$23, %ecx
	cltq
	movslq	%ecx, %rcx
	imulq	$715827883, %rax, %rbx          # imm = 0x2AAAAAAB
	imulq	$715827883, %rcx, %rax          # imm = 0x2AAAAAAB
	movq	%rbx, %rcx
	shrq	$63, %rcx
	sarq	$34, %rbx
	movq	%rax, %rdx
	shrq	$63, %rdx
	sarq	$34, %rax
	addl	%ecx, %ebx
	addl	%edx, %eax
	shlq	$32, %rbx
	orq	%rax, %rbx
	xorl	%eax, %eax
	movabsq	$60129542172, %rbp              # imm = 0xE0000001C
.LBB1_5:                                # %.lr.ph92
                                        # =>This Inner Loop Header: Depth=1
	movl	%eax, %r14d
	movq	%rbx, %rdi
	movl	$1, %esi
	movq	%rbp, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB1_7
# %bb.6:                                #   in Loop: Header=BB1_5 Depth=1
	movq	32(%rsp), %rdi
	movq	24(%rsp), %rsi
	movq	16(%rsp), %rcx
	movl	%r14d, %edx
	movaps	112(%rsp), %xmm0                # 16-byte Reload
	movl	40(%rsp), %r8d                  # 4-byte Reload
	movl	44(%rsp), %r9d                  # 4-byte Reload
	movss	8(%rsp), %xmm1                  # 4-byte Reload
                                        # xmm1 = mem[0],zero,zero,zero
	movss	12(%rsp), %xmm2                 # 4-byte Reload
                                        # xmm2 = mem[0],zero,zero,zero
	movss	48(%rsp), %xmm3                 # 4-byte Reload
                                        # xmm3 = mem[0],zero,zero,zero
	movss	52(%rsp), %xmm4                 # 4-byte Reload
                                        # xmm4 = mem[0],zero,zero,zero
	movss	56(%rsp), %xmm5                 # 4-byte Reload
                                        # xmm5 = mem[0],zero,zero,zero
	movss	60(%rsp), %xmm6                 # 4-byte Reload
                                        # xmm6 = mem[0],zero,zero,zero
	pushq	72(%rsp)                        # 8-byte Folded Reload
	.cfi_adjust_cfa_offset 8
	pushq	72(%rsp)                        # 8-byte Folded Reload
	.cfi_adjust_cfa_offset 8
	callq	_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff
	addq	$16, %rsp
	.cfi_adjust_cfa_offset -16
.LBB1_7:                                #   in Loop: Header=BB1_5 Depth=1
	callq	hipDeviceSynchronize
	movl	$1, %eax
	subl	%r14d, %eax
	decl	%r12d
	jne	.LBB1_5
# %bb.8:                                # %._crit_edge93
	cmpl	$1, %r14d
	leaq	32(%rsp), %rax
	leaq	24(%rsp), %r14
	cmoveq	%rax, %r14
.LBB1_9:                                # %._crit_edge93.thread
	movq	(%r14), %rsi
	movq	%r13, %rdi
	movq	%r15, %rdx
	movl	$2, %ecx
	callq	hipMemcpy
	movq	32(%rsp), %rdi
	callq	hipFree
	movq	24(%rsp), %rdi
	callq	hipFree
	movq	16(%rsp), %rdi
	callq	hipFree
	addq	$136, %rsp
	.cfi_def_cfa_offset 56
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%r12
	.cfi_def_cfa_offset 40
	popq	%r13
	.cfi_def_cfa_offset 32
	popq	%r14
	.cfi_def_cfa_offset 24
	popq	%r15
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end1:
	.size	_Z10evolve2dO2PfffS_iiffiiffff, .Lfunc_end1-_Z10evolve2dO2PfffS_iiffiiffff
	.cfi_endproc
                                        # -- End function
	.globl	_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff # -- Begin function _Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff
	.type	_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff,@function
_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff: # @_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r13
	.cfi_def_cfa_offset 32
	pushq	%r12
	.cfi_def_cfa_offset 40
	pushq	%rbx
	.cfi_def_cfa_offset 48
	subq	$240, %rsp
	.cfi_def_cfa_offset 288
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	72(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	64(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	36(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	32(%rsp), %rdx
	movss	%xmm0, (%rdx)
	leaq	56(%rsp), %r10
	movq	%rcx, (%r10)
	leaq	28(%rsp), %rcx
	movl	%r8d, (%rcx)
	leaq	24(%rsp), %r8
	movl	%r9d, (%r8)
	leaq	20(%rsp), %r9
	movss	%xmm1, (%r9)
	leaq	16(%rsp), %r11
	movss	%xmm2, (%r11)
	leaq	12(%rsp), %r14
	movss	%xmm3, (%r14)
	leaq	8(%rsp), %r15
	movss	%xmm4, (%r15)
	leaq	4(%rsp), %r12
	movss	%xmm5, (%r12)
	movq	%rsp, %r13
	movss	%xmm6, (%r13)
	leaq	112(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%rdx, 24(%rbx)
	movq	%r10, 32(%rbx)
	movq	%rcx, 40(%rbx)
	movq	%r8, 48(%rbx)
	leaq	288(%rsp), %rax
	movq	%rax, 56(%rbx)
	leaq	296(%rsp), %rax
	movq	%rax, 64(%rbx)
	movq	%r9, 72(%rbx)
	movq	%r11, 80(%rbx)
	movq	%r14, 88(%rbx)
	movq	%r15, 96(%rbx)
	movq	%r12, 104(%rbx)
	movq	%r13, 112(%rbx)
	leaq	96(%rsp), %r14
	leaq	80(%rsp), %r15
	leaq	48(%rsp), %r12
	leaq	40(%rsp), %r13
	movq	%r14, %rdi
	movq	%r15, %rsi
	movq	%r12, %rdx
	movq	%r13, %rcx
	callq	__hipPopCallConfiguration
	movq	(%r14), %rsi
	movl	8(%r14), %edx
	movq	(%r15), %rcx
	movl	8(%r15), %r8d
	movl	$_Z8H2d_stepPfS_ifS_iiiiffffff, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$256, %rsp                      # imm = 0x100
	.cfi_adjust_cfa_offset -256
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end2:
	.size	_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff, .Lfunc_end2-_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff
	.cfi_endproc
                                        # -- End function
	.globl	_Z20__device_stub__H2d_xPffiiiifff # -- Begin function _Z20__device_stub__H2d_xPffiiiifff
	.type	_Z20__device_stub__H2d_xPffiiiifff,@function
_Z20__device_stub__H2d_xPffiiiifff:     # @_Z20__device_stub__H2d_xPffiiiifff
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r13
	.cfi_def_cfa_offset 32
	pushq	%r12
	.cfi_def_cfa_offset 40
	pushq	%rbx
	.cfi_def_cfa_offset 48
	subq	$176, %rsp
	.cfi_def_cfa_offset 224
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	56(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	36(%rsp), %rdi
	movss	%xmm0, (%rdi)
	leaq	32(%rsp), %r9
	movl	%esi, (%r9)
	leaq	28(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	24(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	20(%rsp), %rcx
	movl	%r8d, (%rcx)
	leaq	16(%rsp), %r8
	movss	%xmm1, (%r8)
	leaq	12(%rsp), %r10
	movss	%xmm2, (%r10)
	leaq	8(%rsp), %r11
	movss	%xmm3, (%r11)
	leaq	96(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%r9, 16(%rbx)
	movq	%rsi, 24(%rbx)
	movq	%rdx, 32(%rbx)
	movq	%rcx, 40(%rbx)
	movq	%r8, 48(%rbx)
	movq	%r10, 56(%rbx)
	movq	%r11, 64(%rbx)
	leaq	80(%rsp), %r14
	leaq	64(%rsp), %r15
	leaq	48(%rsp), %r12
	leaq	40(%rsp), %r13
	movq	%r14, %rdi
	movq	%r15, %rsi
	movq	%r12, %rdx
	movq	%r13, %rcx
	callq	__hipPopCallConfiguration
	movq	(%r14), %rsi
	movl	8(%r14), %edx
	movq	(%r15), %rcx
	movl	8(%r15), %r8d
	movl	$_Z5H2d_xPffiiiifff, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$192, %rsp
	.cfi_adjust_cfa_offset -192
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end3:
	.size	_Z20__device_stub__H2d_xPffiiiifff, .Lfunc_end3-_Z20__device_stub__H2d_xPffiiiifff
	.cfi_endproc
                                        # -- End function
	.globl	_Z20__device_stub__H2d_yPffiiiifff # -- Begin function _Z20__device_stub__H2d_yPffiiiifff
	.type	_Z20__device_stub__H2d_yPffiiiifff,@function
_Z20__device_stub__H2d_yPffiiiifff:     # @_Z20__device_stub__H2d_yPffiiiifff
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r13
	.cfi_def_cfa_offset 32
	pushq	%r12
	.cfi_def_cfa_offset 40
	pushq	%rbx
	.cfi_def_cfa_offset 48
	subq	$176, %rsp
	.cfi_def_cfa_offset 224
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	56(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	36(%rsp), %rdi
	movss	%xmm0, (%rdi)
	leaq	32(%rsp), %r9
	movl	%esi, (%r9)
	leaq	28(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	24(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	20(%rsp), %rcx
	movl	%r8d, (%rcx)
	leaq	16(%rsp), %r8
	movss	%xmm1, (%r8)
	leaq	12(%rsp), %r10
	movss	%xmm2, (%r10)
	leaq	8(%rsp), %r11
	movss	%xmm3, (%r11)
	leaq	96(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%r9, 16(%rbx)
	movq	%rsi, 24(%rbx)
	movq	%rdx, 32(%rbx)
	movq	%rcx, 40(%rbx)
	movq	%r8, 48(%rbx)
	movq	%r10, 56(%rbx)
	movq	%r11, 64(%rbx)
	leaq	80(%rsp), %r14
	leaq	64(%rsp), %r15
	leaq	48(%rsp), %r12
	leaq	40(%rsp), %r13
	movq	%r14, %rdi
	movq	%r15, %rsi
	movq	%r12, %rdx
	movq	%r13, %rcx
	callq	__hipPopCallConfiguration
	movq	(%r14), %rsi
	movl	8(%r14), %edx
	movq	(%r15), %rcx
	movl	8(%r15), %r8d
	movl	$_Z5H2d_yPffiiiifff, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$192, %rsp
	.cfi_adjust_cfa_offset -192
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end4:
	.size	_Z20__device_stub__H2d_yPffiiiifff, .Lfunc_end4-_Z20__device_stub__H2d_yPffiiiifff
	.cfi_endproc
                                        # -- End function
	.globl	_Z22__device_stub__Hdiag2dPffS_iiff # -- Begin function _Z22__device_stub__Hdiag2dPffS_iiff
	.type	_Z22__device_stub__Hdiag2dPffS_iiff,@function
_Z22__device_stub__Hdiag2dPffS_iiff:    # @_Z22__device_stub__Hdiag2dPffS_iiff
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r13
	.cfi_def_cfa_offset 32
	pushq	%r12
	.cfi_def_cfa_offset 40
	pushq	%rbx
	.cfi_def_cfa_offset 48
	subq	$160, %rsp
	.cfi_def_cfa_offset 208
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	56(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	28(%rsp), %rdi
	movss	%xmm0, (%rdi)
	leaq	48(%rsp), %r8
	movq	%rsi, (%r8)
	leaq	24(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	20(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	16(%rsp), %rcx
	movss	%xmm1, (%rcx)
	leaq	12(%rsp), %r9
	movss	%xmm2, (%r9)
	leaq	96(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%r8, 16(%rbx)
	movq	%rsi, 24(%rbx)
	movq	%rdx, 32(%rbx)
	movq	%rcx, 40(%rbx)
	movq	%r9, 48(%rbx)
	leaq	80(%rsp), %r14
	leaq	64(%rsp), %r15
	leaq	40(%rsp), %r12
	leaq	32(%rsp), %r13
	movq	%r14, %rdi
	movq	%r15, %rsi
	movq	%r12, %rdx
	movq	%r13, %rcx
	callq	__hipPopCallConfiguration
	movq	(%r14), %rsi
	movl	8(%r14), %edx
	movq	(%r15), %rcx
	movl	8(%r15), %r8d
	movl	$_Z7Hdiag2dPffS_iiff, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$176, %rsp
	.cfi_adjust_cfa_offset -176
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end5:
	.size	_Z22__device_stub__Hdiag2dPffS_iiff, .Lfunc_end5-_Z22__device_stub__Hdiag2dPffS_iiff
	.cfi_endproc
                                        # -- End function
	.section	.rodata.cst4,"aM",@progbits,4
	.p2align	2, 0x0                          # -- Begin function main
.LCPI6_0:
	.long	0x43c80000                      # float 400
.LCPI6_1:
	.long	0x42c80000                      # float 100
.LCPI6_2:
	.long	0x41a00000                      # float 20
.LCPI6_3:
	.long	0xc1400000                      # float -12
.LCPI6_4:
	.long	0x40400000                      # float 3
.LCPI6_5:
	.long	0x3a83126f                      # float 0.00100000005
.LCPI6_6:
	.long	0x41200000                      # float 10
.LCPI6_11:
	.long	0x3f000000                      # float 0.5
.LCPI6_12:
	.long	0x00000000                      # float 0
	.section	.rodata.cst8,"aM",@progbits,8
	.p2align	3, 0x0
.LCPI6_7:
	.quad	0xbff0000000000000              # double -1
.LCPI6_8:
	.quad	0xbfe0000000000000              # double -0.5
.LCPI6_9:
	.quad	0x3ff0000000000000              # double 1
	.section	.rodata.cst16,"aM",@progbits,16
	.p2align	4, 0x0
.LCPI6_10:
	.long	0x80000000                      # float -0
	.long	0x80000000                      # float -0
	.long	0x80000000                      # float -0
	.long	0x80000000                      # float -0
	.text
	.globl	main
	.type	main,@function
main:                                   # @main
	.cfi_startproc
# %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	pushq	%r15
	.cfi_def_cfa_offset 24
	pushq	%r14
	.cfi_def_cfa_offset 32
	pushq	%r13
	.cfi_def_cfa_offset 40
	pushq	%r12
	.cfi_def_cfa_offset 48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	subq	$296, %rsp                      # imm = 0x128
	.cfi_def_cfa_offset 352
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	cmpl	$2, %edi
	jl	.LBB6_126
# %bb.1:                                # %.lr.ph.preheader
	movq	%rsi, %r13
	movl	%edi, %ebp
	movl	$400, %ebx                      # imm = 0x190
	movl	$1, %r12d
	movss	.LCPI6_6(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 80(%rsp)                 # 4-byte Spill
	movl	$2, 92(%rsp)                    # 4-byte Folded Spill
	movss	.LCPI6_5(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 84(%rsp)                 # 4-byte Spill
	xorps	%xmm0, %xmm0
	movss	%xmm0, 44(%rsp)                 # 4-byte Spill
	movss	.LCPI6_4(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 16(%rsp)                 # 4-byte Spill
	movss	.LCPI6_3(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 104(%rsp)                # 4-byte Spill
	movss	.LCPI6_1(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 108(%rsp)                # 4-byte Spill
	movss	.LCPI6_2(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	.LCPI6_0(%rip), %xmm1           # xmm1 = mem[0],zero,zero,zero
	xorl	%r14d, %r14d
	movss	%xmm1, 8(%rsp)                  # 4-byte Spill
	movss	%xmm1, 32(%rsp)                 # 4-byte Spill
	movss	%xmm0, 96(%rsp)                 # 4-byte Spill
	movss	%xmm0, 88(%rsp)                 # 4-byte Spill
	movss	%xmm0, 68(%rsp)                 # 4-byte Spill
	xorps	%xmm0, %xmm0
	movss	%xmm0, 72(%rsp)                 # 4-byte Spill
	movl	$0, 76(%rsp)                    # 4-byte Folded Spill
	movl	$400, %eax                      # imm = 0x190
	movq	%rax, 56(%rsp)                  # 8-byte Spill
.LBB6_2:                                # %.lr.ph
                                        # =>This Inner Loop Header: Depth=1
	movslq	%r12d, %rax
	movq	(%r13,%rax,8), %r15
	movl	$.L.str.3, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_30
# %bb.3:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.5, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_34
# %bb.4:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.7, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_38
# %bb.5:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.9, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_43
# %bb.6:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.11, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_47
# %bb.7:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.13, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_54
# %bb.8:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.15, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_57
# %bb.9:                                #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.17, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_60
# %bb.10:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.19, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_63
# %bb.11:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.21, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_66
# %bb.12:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.23, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_70
# %bb.13:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.25, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_74
# %bb.14:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.27, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_78
# %bb.15:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.29, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_81
# %bb.16:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.31, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_85
# %bb.17:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.33, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_88
# %bb.18:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.35, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_92
# %bb.19:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.37, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_96
# %bb.20:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.39, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_100
# %bb.21:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.41, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_104
# %bb.22:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.43, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_108
# %bb.23:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.45, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_111
# %bb.24:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.47, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_114
# %bb.25:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.49, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_117
# %bb.26:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.51, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_120
# %bb.27:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.53, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	je	.LBB6_123
# %bb.28:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.55, %esi
	movq	%r15, %rdi
	callq	strcmp
	testl	%eax, %eax
	jne	.LBB6_193
# %bb.29:                               #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.56, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
	incl	%r12d
	movl	$1, %r14d
	jmp	.LBB6_53
.LBB6_30:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.31:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.32:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.4, %edi
.LBB6_33:                               #   in Loop: Header=BB6_2 Depth=1
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
	jmp	.LBB6_42
.LBB6_34:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.35:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_37
# %bb.36:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.6, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_37:                               # %._crit_edge976
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atoi
                                        # kill: def $eax killed $eax def $rax
	movq	%rax, 56(%rsp)                  # 8-byte Spill
	xorps	%xmm0, %xmm0
	cvtsi2ss	%eax, %xmm0
	movss	%xmm0, 8(%rsp)                  # 4-byte Spill
	jmp	.LBB6_51
.LBB6_38:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.39:                               #   in Loop: Header=BB6_2 Depth=1
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_41
# %bb.40:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.8, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_41:                               # %._crit_edge975
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atoi
	movl	%eax, %ebx
	xorps	%xmm0, %xmm0
	cvtsi2ss	%eax, %xmm0
	movss	%xmm0, 32(%rsp)                 # 4-byte Spill
.LBB6_42:                               #   in Loop: Header=BB6_2 Depth=1
	addl	$2, %r12d
	jmp	.LBB6_53
.LBB6_43:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.44:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_46
# %bb.45:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.10, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_46:                               # %._crit_edge974
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 88(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_47:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.48:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_50
# %bb.49:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.12, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_50:                               # %._crit_edge973
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 96(%rsp)                 # 4-byte Spill
.LBB6_51:                               #   in Loop: Header=BB6_2 Depth=1
	addl	$2, %r12d
.LBB6_52:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%r15, %rbx
.LBB6_53:                               #   in Loop: Header=BB6_2 Depth=1
	cmpl	%ebp, %r12d
	jl	.LBB6_2
	jmp	.LBB6_127
.LBB6_54:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.55:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.56:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.14, %edi
	jmp	.LBB6_33
.LBB6_57:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.58:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.59:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.16, %edi
	jmp	.LBB6_33
.LBB6_60:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.61:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.62:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.18, %edi
	jmp	.LBB6_33
.LBB6_63:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.64:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.65:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.20, %edi
	jmp	.LBB6_33
.LBB6_66:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.67:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_69
# %bb.68:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.22, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_69:                               # %._crit_edge972
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 108(%rsp)                # 4-byte Spill
	jmp	.LBB6_51
.LBB6_70:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.71:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_73
# %bb.72:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.24, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_73:                               # %._crit_edge971
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 68(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_74:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.75:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_77
# %bb.76:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.26, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_77:                               # %._crit_edge970
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 104(%rsp)                # 4-byte Spill
	jmp	.LBB6_51
.LBB6_78:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.79:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.80:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.28, %edi
	jmp	.LBB6_33
.LBB6_81:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.82:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_84
# %bb.83:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.30, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_84:                               # %._crit_edge969
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 16(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_85:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.86:                               #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.87:                               #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.32, %edi
	jmp	.LBB6_33
.LBB6_88:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.89:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_91
# %bb.90:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.34, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_91:                               # %._crit_edge968
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 44(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_92:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.93:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_95
# %bb.94:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.36, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_95:                               # %._crit_edge967
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 72(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_96:                               #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.97:                               #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_99
# %bb.98:                               #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.38, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_99:                               # %._crit_edge966
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 84(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_100:                              #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.101:                              #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_103
# %bb.102:                              #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.40, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_103:                              # %._crit_edge965
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atoi
	movl	%eax, 92(%rsp)                  # 4-byte Spill
	jmp	.LBB6_51
.LBB6_104:                              #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.105:                              #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movslq	%eax, %rbx
	testl	%r14d, %r14d
	je	.LBB6_107
# %bb.106:                              #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdx
	movl	$.L.str.42, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_107:                              # %._crit_edge964
                                        #   in Loop: Header=BB6_2 Depth=1
	movq	(%r13,%rbx,8), %rdi
	callq	atof
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 80(%rsp)                 # 4-byte Spill
	jmp	.LBB6_51
.LBB6_108:                              #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.109:                              #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.110:                              #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.44, %edi
	jmp	.LBB6_33
.LBB6_111:                              #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.112:                              #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.113:                              #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.46, %edi
	jmp	.LBB6_33
.LBB6_114:                              #   in Loop: Header=BB6_2 Depth=1
	leal	1(%r12), %eax
	cmpl	%ebp, %eax
	jge	.LBB6_53
# %bb.115:                              #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_42
# %bb.116:                              #   in Loop: Header=BB6_2 Depth=1
	cltq
	movq	(%r13,%rax,8), %rdx
	movl	$.L.str.48, %edi
	jmp	.LBB6_33
.LBB6_117:                              #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_119
# %bb.118:                              #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.50, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_119:                              #   in Loop: Header=BB6_2 Depth=1
	incl	%r12d
	movl	$1, 76(%rsp)                    # 4-byte Folded Spill
	jmp	.LBB6_53
.LBB6_120:                              #   in Loop: Header=BB6_2 Depth=1
	testl	%r14d, %r14d
	je	.LBB6_122
# %bb.121:                              #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.52, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_122:                              #   in Loop: Header=BB6_2 Depth=1
	incl	%r12d
	jmp	.LBB6_53
.LBB6_123:                              #   in Loop: Header=BB6_2 Depth=1
	movq	%rbx, %r15
	movl	%r14d, %ebx
	testl	%r14d, %r14d
	je	.LBB6_125
# %bb.124:                              #   in Loop: Header=BB6_2 Depth=1
	movl	$.L.str.54, %edi
	movl	%r12d, %esi
	xorl	%eax, %eax
	callq	printf
.LBB6_125:                              #   in Loop: Header=BB6_2 Depth=1
	incl	%r12d
	movl	%ebx, %r14d
	jmp	.LBB6_52
.LBB6_126:
	movss	.LCPI6_0(%rip), %xmm2           # xmm2 = mem[0],zero,zero,zero
	movss	.LCPI6_1(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 108(%rsp)                # 4-byte Spill
	movss	.LCPI6_2(%rip), %xmm1           # xmm1 = mem[0],zero,zero,zero
	movss	.LCPI6_3(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 104(%rsp)                # 4-byte Spill
	movss	.LCPI6_4(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 16(%rsp)                 # 4-byte Spill
	xorps	%xmm0, %xmm0
	movss	%xmm0, 72(%rsp)                 # 4-byte Spill
	movss	.LCPI6_5(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 84(%rsp)                 # 4-byte Spill
	movl	$2, 92(%rsp)                    # 4-byte Folded Spill
	movl	$0, 76(%rsp)                    # 4-byte Folded Spill
	movss	.LCPI6_6(%rip), %xmm0           # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, 80(%rsp)                 # 4-byte Spill
	movl	$400, %eax                      # imm = 0x190
	movq	%rax, 56(%rsp)                  # 8-byte Spill
	movl	$400, %ebx                      # imm = 0x190
	xorps	%xmm0, %xmm0
	movss	%xmm0, 44(%rsp)                 # 4-byte Spill
	movss	%xmm1, 96(%rsp)                 # 4-byte Spill
	movss	%xmm1, 68(%rsp)                 # 4-byte Spill
	movss	%xmm1, 88(%rsp)                 # 4-byte Spill
	movss	%xmm2, 32(%rsp)                 # 4-byte Spill
	movss	%xmm2, 8(%rsp)                  # 4-byte Spill
	xorl	%r14d, %r14d
.LBB6_127:                              # %._crit_edge
	movl	%ebx, 224(%rsp)
	movq	56(%rsp), %r15                  # 8-byte Reload
	movl	%r15d, 228(%rsp)
	testl	%r14d, %r14d
	je	.LBB6_129
# %bb.128:
	movl	$.Lstr, %edi
	callq	puts@PLT
.LBB6_129:
	movq	%rbx, 120(%rsp)                 # 8-byte Spill
	movl	%ebx, %r13d
	imull	%r15d, %r13d
	leal	(,%r13,2), %eax
	movl	%eax, 200(%rsp)                 # 4-byte Spill
	movslq	%eax, %rbx
	shlq	$2, %rbx
	movq	%rbx, %rdi
	callq	malloc
	testq	%rax, %rax
	je	.LBB6_188
# %bb.130:
	movq	%rax, %r12
	movq	%rbx, %rdi
	callq	malloc
	movq	%rax, 112(%rsp)                 # 8-byte Spill
	testq	%rax, %rax
	je	.LBB6_189
# %bb.131:
	movslq	%r13d, %rbx
	shlq	$2, %rbx
	movq	%rbx, %rdi
	callq	malloc
	movq	%rax, 144(%rsp)                 # 8-byte Spill
	testq	%rax, %rax
	je	.LBB6_190
# %bb.132:
	movq	%r13, 248(%rsp)                 # 8-byte Spill
	movq	%rbx, %rdi
	callq	malloc
	movq	%rax, 152(%rsp)                 # 8-byte Spill
	testq	%rax, %rax
	je	.LBB6_191
# %bb.133:
	cvtss2sd	88(%rsp), %xmm3                 # 4-byte Folded Reload
	xorps	%xmm0, %xmm0
	cvtss2sd	96(%rsp), %xmm0                 # 4-byte Folded Reload
	addsd	%xmm3, %xmm3
	xorps	%xmm1, %xmm1
	cvtss2sd	8(%rsp), %xmm1                  # 4-byte Folded Reload
	addsd	%xmm0, %xmm0
	cvtss2sd	32(%rsp), %xmm2                 # 4-byte Folded Reload
	divsd	%xmm2, %xmm0
	movsd	%xmm3, 168(%rsp)                # 8-byte Spill
	movapd	%xmm3, %xmm2
	divsd	%xmm1, %xmm2
	cvtsd2ss	%xmm2, %xmm2
	xorps	%xmm1, %xmm1
	cvtsd2ss	%xmm0, %xmm1
	movss	%xmm2, 48(%rsp)                 # 4-byte Spill
	xorps	%xmm0, %xmm0
	cvtss2sd	%xmm2, %xmm0
	movss	%xmm1, 52(%rsp)                 # 4-byte Spill
	cvtss2sd	%xmm1, %xmm1
	movaps	%xmm0, %xmm5
	addsd	%xmm0, %xmm5
	movaps	%xmm1, %xmm6
	addsd	%xmm1, %xmm6
	mulsd	%xmm0, %xmm5
	movsd	.LCPI6_7(%rip), %xmm4           # xmm4 = mem[0],zero
	mulsd	%xmm1, %xmm6
	cmpl	$0, 56(%rsp)                    # 4-byte Folded Reload
	movl	%r14d, 100(%rsp)                # 4-byte Spill
	movq	120(%rsp), %rbx                 # 8-byte Reload
	jle	.LBB6_156
# %bb.134:                              # %.lr.ph852
	movsd	%xmm6, 232(%rsp)                # 8-byte Spill
	movsd	%xmm5, 240(%rsp)                # 8-byte Spill
	movss	16(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	%xmm0, %xmm0
	cvtss2sd	%xmm0, %xmm0
	movsd	%xmm0, 176(%rsp)                # 8-byte Spill
	xorps	%xmm0, %xmm0
	cvtss2sd	44(%rsp), %xmm0                 # 4-byte Folded Reload
	movsd	%xmm0, 256(%rsp)                # 8-byte Spill
	movss	68(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	%xmm0, %xmm0
	movss	%xmm0, 68(%rsp)                 # 4-byte Spill
	movl	56(%rsp), %r15d                 # 4-byte Reload
	movl	%ebx, %r13d
	leal	(%rbx,%rbx), %r8d
	xorl	%eax, %eax
	movq	%rax, 160(%rsp)                 # 8-byte Spill
	movl	$0, 140(%rsp)                   # 4-byte Folded Spill
	xorl	%ebp, %ebp
	movq	%r15, 264(%rsp)                 # 8-byte Spill
	movl	%r8d, 136(%rsp)                 # 4-byte Spill
.LBB6_135:                              # =>This Loop Header: Depth=1
                                        #     Child Loop BB6_137 Depth 2
	xorps	%xmm0, %xmm0
	cvtsi2ss	%ebp, %xmm0
	mulss	48(%rsp), %xmm0                 # 4-byte Folded Reload
	subss	88(%rsp), %xmm0                 # 4-byte Folded Reload
	movss	%xmm0, 32(%rsp)                 # 4-byte Spill
	subss	104(%rsp), %xmm0                # 4-byte Folded Reload
	movss	%xmm0, 8(%rsp)                  # 4-byte Spill
	mulss	%xmm0, %xmm0
	cvtss2sd	%xmm0, %xmm0
	movsd	.LCPI6_8(%rip), %xmm1           # xmm1 = mem[0],zero
	mulsd	%xmm1, %xmm0
	divsd	176(%rsp), %xmm0                # 8-byte Folded Reload
	callq	exp
	movsd	%xmm0, 16(%rsp)                 # 8-byte Spill
	xorps	%xmm1, %xmm1
	cvtss2sd	8(%rsp), %xmm1                  # 4-byte Folded Reload
	movsd	%xmm1, 8(%rsp)                  # 8-byte Spill
	subsd	168(%rsp), %xmm1                # 8-byte Folded Reload
	movapd	%xmm1, %xmm0
	mulsd	.LCPI6_8(%rip), %xmm0
	mulsd	%xmm1, %xmm0
	divsd	176(%rsp), %xmm0                # 8-byte Folded Reload
	callq	exp
	movsd	%xmm0, 24(%rsp)                 # 8-byte Spill
	movsd	8(%rsp), %xmm1                  # 8-byte Reload
                                        # xmm1 = mem[0],zero
	addsd	168(%rsp), %xmm1                # 8-byte Folded Reload
	movapd	%xmm1, %xmm0
	mulsd	.LCPI6_8(%rip), %xmm0
	mulsd	%xmm1, %xmm0
	divsd	176(%rsp), %xmm0                # 8-byte Folded Reload
	callq	exp
	testl	%ebx, %ebx
	jle	.LBB6_140
# %bb.136:                              # %.lr.ph848
                                        #   in Loop: Header=BB6_135 Depth=1
	movl	140(%rsp), %eax                 # 4-byte Reload
	movq	144(%rsp), %rcx                 # 8-byte Reload
	leaq	(%rcx,%rax,4), %r14
	movss	32(%rsp), %xmm2                 # 4-byte Reload
                                        # xmm2 = mem[0],zero,zero,zero
	movaps	%xmm2, %xmm1
	mulss	%xmm2, %xmm1
	movss	%xmm1, 220(%rsp)                # 4-byte Spill
	xorps	%xmm1, %xmm1
	cvtsd2ss	16(%rsp), %xmm1                 # 8-byte Folded Reload
	movss	%xmm1, 216(%rsp)                # 4-byte Spill
	xorps	%xmm1, %xmm1
	cvtsd2ss	24(%rsp), %xmm1                 # 8-byte Folded Reload
	movss	%xmm1, 212(%rsp)                # 4-byte Spill
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 208(%rsp)                # 4-byte Spill
	movss	44(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	%xmm2, %xmm0
	movss	%xmm0, 204(%rsp)                # 4-byte Spill
	xorps	%xmm1, %xmm1
	cvtss2sd	%xmm2, %xmm1
	movsd	168(%rsp), %xmm0                # 8-byte Reload
                                        # xmm0 = mem[0],zero
	movapd	%xmm0, %xmm2
	addsd	%xmm1, %xmm2
	subsd	%xmm0, %xmm1
	movsd	256(%rsp), %xmm0                # 8-byte Reload
                                        # xmm0 = mem[0],zero
	mulsd	%xmm0, %xmm1
	movsd	%xmm1, 280(%rsp)                # 8-byte Spill
	mulsd	%xmm0, %xmm2
	movsd	%xmm2, 272(%rsp)                # 8-byte Spill
	movq	160(%rsp), %r15                 # 8-byte Reload
                                        # kill: def $r15d killed $r15d killed $r15 def $r15
	xorl	%ebx, %ebx
.LBB6_137:                              #   Parent Loop BB6_135 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	xorps	%xmm0, %xmm0
	cvtsi2ss	%ebx, %xmm0
	mulss	52(%rsp), %xmm0                 # 4-byte Folded Reload
	subss	96(%rsp), %xmm0                 # 4-byte Folded Reload
	movss	72(%rsp), %xmm1                 # 4-byte Reload
                                        # xmm1 = mem[0],zero,zero,zero
	mulss	%xmm0, %xmm1
	movss	%xmm1, 8(%rsp)                  # 4-byte Spill
	mulss	%xmm0, %xmm0
	addss	220(%rsp), %xmm0                # 4-byte Folded Reload
	movss	%xmm0, 32(%rsp)                 # 4-byte Spill
	movss	204(%rsp), %xmm0                # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	addss	%xmm1, %xmm0
	cvtss2sd	%xmm0, %xmm0
	movsd	%xmm0, 24(%rsp)                 # 8-byte Spill
	callq	cos
	movsd	%xmm0, 16(%rsp)                 # 8-byte Spill
	movsd	24(%rsp), %xmm0                 # 8-byte Reload
                                        # xmm0 = mem[0],zero
	callq	sin
	movsd	%xmm0, 128(%rsp)                # 8-byte Spill
	xorps	%xmm1, %xmm1
	cvtss2sd	8(%rsp), %xmm1                  # 4-byte Folded Reload
	movsd	%xmm1, 8(%rsp)                  # 8-byte Spill
	movsd	280(%rsp), %xmm0                # 8-byte Reload
                                        # xmm0 = mem[0],zero
	addsd	%xmm1, %xmm0
	movsd	%xmm0, 184(%rsp)                # 8-byte Spill
	callq	cos
	movsd	%xmm0, 24(%rsp)                 # 8-byte Spill
	movsd	8(%rsp), %xmm0                  # 8-byte Reload
                                        # xmm0 = mem[0],zero
	addsd	272(%rsp), %xmm0                # 8-byte Folded Reload
	movsd	%xmm0, 8(%rsp)                  # 8-byte Spill
	callq	cos
	movsd	%xmm0, 192(%rsp)                # 8-byte Spill
	movsd	184(%rsp), %xmm0                # 8-byte Reload
                                        # xmm0 = mem[0],zero
	callq	sin
	movsd	%xmm0, 184(%rsp)                # 8-byte Spill
	movsd	8(%rsp), %xmm0                  # 8-byte Reload
                                        # xmm0 = mem[0],zero
	callq	sin
	xorps	%xmm1, %xmm1
	cvtsd2ss	128(%rsp), %xmm1                # 8-byte Folded Reload
	xorps	%xmm2, %xmm2
	cvtsd2ss	184(%rsp), %xmm2                # 8-byte Folded Reload
	movss	216(%rsp), %xmm3                # 4-byte Reload
                                        # xmm3 = mem[0],zero,zero,zero
	mulss	%xmm3, %xmm1
	movss	212(%rsp), %xmm4                # 4-byte Reload
                                        # xmm4 = mem[0],zero,zero,zero
	mulss	%xmm4, %xmm2
	cvtsd2ss	%xmm0, %xmm0
	addss	%xmm1, %xmm2
	movss	208(%rsp), %xmm5                # 4-byte Reload
                                        # xmm5 = mem[0],zero,zero,zero
	mulss	%xmm5, %xmm0
	xorps	%xmm1, %xmm1
	cvtsd2ss	16(%rsp), %xmm1                 # 8-byte Folded Reload
	addss	%xmm2, %xmm0
	mulss	%xmm3, %xmm1
	xorps	%xmm2, %xmm2
	cvtsd2ss	24(%rsp), %xmm2                 # 8-byte Folded Reload
	mulss	%xmm4, %xmm2
	addss	%xmm1, %xmm2
	xorps	%xmm1, %xmm1
	cvtsd2ss	192(%rsp), %xmm1                # 8-byte Folded Reload
	mulss	%xmm5, %xmm1
	addss	%xmm2, %xmm1
	movl	%r15d, %eax
	movss	%xmm1, (%r12,%rax,4)
	leal	1(%r15), %eax
	movss	%xmm0, (%r12,%rax,4)
	movss	68(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	ucomiss	32(%rsp), %xmm0                 # 4-byte Folded Reload
	jbe	.LBB6_139
# %bb.138:                              #   in Loop: Header=BB6_137 Depth=2
	movss	108(%rsp), %xmm0                # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	movss	%xmm0, (%r14,%rbx,4)
.LBB6_139:                              #   in Loop: Header=BB6_137 Depth=2
	incq	%rbx
	addl	$2, %r15d
	cmpq	%rbx, %r13
	jne	.LBB6_137
.LBB6_140:                              # %._crit_edge849
                                        #   in Loop: Header=BB6_135 Depth=1
	incq	%rbp
	movq	120(%rsp), %rbx                 # 8-byte Reload
	addl	%ebx, 140(%rsp)                 # 4-byte Folded Spill
	movl	136(%rsp), %r8d                 # 4-byte Reload
	movq	160(%rsp), %rax                 # 8-byte Reload
	addl	%r8d, %eax
	movq	%rax, 160(%rsp)                 # 8-byte Spill
	movq	264(%rsp), %r15                 # 8-byte Reload
	cmpq	%r15, %rbp
	jne	.LBB6_135
# %bb.141:                              # %.preheader792
	cmpl	$0, 56(%rsp)                    # 4-byte Folded Reload
	movl	100(%rsp), %r14d                # 4-byte Reload
	movsd	.LCPI6_7(%rip), %xmm4           # xmm4 = mem[0],zero
	movsd	240(%rsp), %xmm5                # 8-byte Reload
                                        # xmm5 = mem[0],zero
	movsd	232(%rsp), %xmm6                # 8-byte Reload
                                        # xmm6 = mem[0],zero
	jle	.LBB6_156
# %bb.142:                              # %.preheader791.lr.ph
	movss	52(%rsp), %xmm1                 # 4-byte Reload
                                        # xmm1 = mem[0],zero,zero,zero
	mulss	48(%rsp), %xmm1                 # 4-byte Folded Reload
	xorps	%xmm0, %xmm0
	xorl	%eax, %eax
	xorl	%ecx, %ecx
.LBB6_143:                              # %.preheader791
                                        # =>This Loop Header: Depth=1
                                        #     Child Loop BB6_145 Depth 2
	testl	%ebx, %ebx
	jle	.LBB6_146
# %bb.144:                              # %.lr.ph855
                                        #   in Loop: Header=BB6_143 Depth=1
	movq	%r13, %rdx
	movl	%eax, %esi
.LBB6_145:                              #   Parent Loop BB6_143 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	movl	%esi, %edi
	movss	(%r12,%rdi,4), %xmm2            # xmm2 = mem[0],zero,zero,zero
	mulss	%xmm2, %xmm2
	leal	1(%rsi), %edi
	movss	(%r12,%rdi,4), %xmm3            # xmm3 = mem[0],zero,zero,zero
	mulss	%xmm3, %xmm3
	addss	%xmm2, %xmm3
	mulss	%xmm1, %xmm3
	addss	%xmm3, %xmm0
	addl	$2, %esi
	decq	%rdx
	jne	.LBB6_145
.LBB6_146:                              # %._crit_edge856
                                        #   in Loop: Header=BB6_143 Depth=1
	incq	%rcx
	addl	%r8d, %eax
	cmpq	%r15, %rcx
	jne	.LBB6_143
# %bb.147:                              # %._crit_edge860
	xorps	%xmm1, %xmm1
	ucomiss	%xmm1, %xmm0
	jb	.LBB6_149
# %bb.148:
	sqrtss	%xmm0, %xmm0
	jmp	.LBB6_150
.LBB6_149:                              # %call.sqrt
	callq	sqrtf@PLT
	movl	136(%rsp), %r8d                 # 4-byte Reload
	movsd	232(%rsp), %xmm6                # 8-byte Reload
                                        # xmm6 = mem[0],zero
	movsd	240(%rsp), %xmm5                # 8-byte Reload
                                        # xmm5 = mem[0],zero
	movsd	.LCPI6_7(%rip), %xmm4           # xmm4 = mem[0],zero
.LBB6_150:                              # %._crit_edge860.split
	cmpl	$0, 56(%rsp)                    # 4-byte Folded Reload
	jle	.LBB6_156
# %bb.151:                              # %.preheader790.lr.ph
	xorps	%xmm1, %xmm1
	cvtss2sd	%xmm0, %xmm1
	movsd	.LCPI6_9(%rip), %xmm0           # xmm0 = mem[0],zero
	divsd	%xmm1, %xmm0
	xorl	%eax, %eax
	xorl	%ecx, %ecx
.LBB6_152:                              # %.preheader790
                                        # =>This Loop Header: Depth=1
                                        #     Child Loop BB6_154 Depth 2
	testl	%ebx, %ebx
	jle	.LBB6_155
# %bb.153:                              # %.lr.ph863
                                        #   in Loop: Header=BB6_152 Depth=1
	movq	%r13, %rdx
	movl	%eax, %esi
.LBB6_154:                              #   Parent Loop BB6_152 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	movl	%esi, %edi
	xorps	%xmm1, %xmm1
	cvtss2sd	(%r12,%rdi,4), %xmm1
	mulsd	%xmm0, %xmm1
	cvtsd2ss	%xmm1, %xmm1
	movss	%xmm1, (%r12,%rdi,4)
	leal	1(%rsi), %edi
	xorps	%xmm1, %xmm1
	cvtss2sd	(%r12,%rdi,4), %xmm1
	mulsd	%xmm0, %xmm1
	cvtsd2ss	%xmm1, %xmm1
	movss	%xmm1, (%r12,%rdi,4)
	addl	$2, %esi
	decq	%rdx
	jne	.LBB6_154
.LBB6_155:                              # %._crit_edge864
                                        #   in Loop: Header=BB6_152 Depth=1
	incq	%rcx
	addl	%r8d, %eax
	cmpq	%r15, %rcx
	jne	.LBB6_152
.LBB6_156:                              # %._crit_edge866
	movaps	%xmm4, %xmm0
	divsd	%xmm5, %xmm0
	divsd	%xmm6, %xmm4
	cmpl	$0, 76(%rsp)                    # 4-byte Folded Reload
	je	.LBB6_158
# %bb.157:
	movl	$.Lstr.1, %edi
	movsd	%xmm4, 8(%rsp)                  # 8-byte Spill
	movsd	%xmm0, 32(%rsp)                 # 8-byte Spill
	callq	puts@PLT
	movsd	32(%rsp), %xmm0                 # 8-byte Reload
                                        # xmm0 = mem[0],zero
	movsd	8(%rsp), %xmm4                  # 8-byte Reload
                                        # xmm4 = mem[0],zero
.LBB6_158:
	cvtsd2ss	%xmm0, %xmm11
	cvtsd2ss	%xmm4, %xmm12
	xorps	%xmm0, %xmm0
	xorps	%xmm1, %xmm1
	cmpl	$3, 56(%rsp)                    # 4-byte Folded Reload
	jl	.LBB6_165
# %bb.159:                              # %.lr.ph878
	movq	56(%rsp), %rax                  # 8-byte Reload
	leal	-1(%rax), %ecx
	movq	%rcx, 32(%rsp)                  # 8-byte Spill
	leal	-1(%rbx), %ecx
	movss	52(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	48(%rsp), %xmm0                 # 4-byte Folded Reload
	movaps	.LCPI6_10(%rip), %xmm1          # xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]
	xorps	%xmm0, %xmm1
	movl	%eax, %eax
	movq	%rax, 16(%rsp)                  # 8-byte Spill
	movl	%ebx, %eax
	leal	(%rbx,%rbx), %r11d
	movq	%rax, 24(%rsp)                  # 8-byte Spill
	leaq	-2(%rax,%rax), %r8
	xorps	%xmm2, %xmm2
	movl	$1, %r10d
	movl	$1, %r9d
	movss	.LCPI6_11(%rip), %xmm3          # xmm3 = mem[0],zero,zero,zero
	movq	%r11, 8(%rsp)                   # 8-byte Spill
	xorps	%xmm4, %xmm4
	movq	120(%rsp), %rdi                 # 8-byte Reload
.LBB6_160:                              # =>This Loop Header: Depth=1
                                        #     Child Loop BB6_162 Depth 2
	movq	%r10, %rbx
	incq	%r10
	cmpl	$3, 120(%rsp)                   # 4-byte Folded Reload
	jl	.LBB6_163
# %bb.161:                              # %.lr.ph871
                                        #   in Loop: Header=BB6_160 Depth=1
	leal	-1(%rbx), %r15d
	cmpq	$1, %rbx
	cmovel	56(%rsp), %r15d                 # 4-byte Folded Reload
	cmpq	16(%rsp), %rbx                  # 8-byte Folded Reload
	movl	%r10d, %r13d
	cmovel	%r9d, %r13d
	imulq	24(%rsp), %rbx                  # 8-byte Folded Reload
	movq	8(%rsp), %rax                   # 8-byte Reload
	imull	%eax, %r15d
	addl	$2, %r15d
	imull	%eax, %r13d
	addl	$2, %r13d
	movl	$1, %edx
	xorl	%r14d, %r14d
	xorl	%ebp, %ebp
.LBB6_162:                              #   Parent Loop BB6_160 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	cmpq	$1, %rdx
	leaq	1(%rdx), %rdx
	movl	%r14d, %esi
	cmovel	%edi, %esi
	leal	(%r13,%rbp), %eax
	movss	(%r12,%rax,4), %xmm6            # xmm6 = mem[0],zero,zero,zero
	leal	(%r15,%rbp), %eax
	cmpq	%rbp, %r8
	cltq
	movss	(%r12,%rax,4), %xmm5            # xmm5 = mem[0],zero,zero,zero
	leal	2(%r11,%rbp), %eax
	movss	(%r12,%rax,4), %xmm7            # xmm7 = mem[0],zero,zero,zero
	movl	%edx, %eax
	cmovel	%r9d, %eax
	addl	%ebx, %eax
	addl	%eax, %eax
	movss	(%r12,%rax,4), %xmm9            # xmm9 = mem[0],zero,zero,zero
	addl	%ebx, %esi
	addl	%esi, %esi
	movslq	%esi, %rax
	movss	(%r12,%rax,4), %xmm8            # xmm8 = mem[0],zero,zero,zero
	leal	(%r11,%rbp), %eax
	addl	$3, %eax
	movss	(%r12,%rax,4), %xmm10           # xmm10 = mem[0],zero,zero,zero
	mulss	%xmm3, %xmm6
	mulss	%xmm3, %xmm5
	addss	%xmm6, %xmm5
	mulss	%xmm3, %xmm9
	mulss	%xmm3, %xmm8
	addss	%xmm9, %xmm8
	subss	%xmm7, %xmm5
	mulss	%xmm11, %xmm5
	subss	%xmm7, %xmm8
	mulss	%xmm12, %xmm8
	addss	%xmm5, %xmm8
	mulss	%xmm0, %xmm7
	mulss	%xmm8, %xmm7
	addss	%xmm7, %xmm4
	mulss	%xmm1, %xmm10
	mulss	%xmm8, %xmm10
	addss	%xmm10, %xmm2
	addq	$2, %rbp
	incl	%r14d
	cmpq	%rcx, %rdx
	jne	.LBB6_162
.LBB6_163:                              # %.loopexit
                                        #   in Loop: Header=BB6_160 Depth=1
	addq	8(%rsp), %r11                   # 8-byte Folded Reload
	cmpq	32(%rsp), %r10                  # 8-byte Folded Reload
	jne	.LBB6_160
# %bb.164:                              # %._crit_edge879.loopexit
	xorps	%xmm0, %xmm0
	cvtss2sd	%xmm4, %xmm0
	xorps	%xmm1, %xmm1
	cvtss2sd	%xmm2, %xmm1
	movl	100(%rsp), %r14d                # 4-byte Reload
	movq	120(%rsp), %rbx                 # 8-byte Reload
.LBB6_165:                              # %._crit_edge879
	movl	$.L.str.91, %edi
	movsd	%xmm0, 16(%rsp)                 # 8-byte Spill
	movb	$2, %al
	movss	%xmm11, 8(%rsp)                 # 4-byte Spill
	movss	%xmm12, 32(%rsp)                # 4-byte Spill
	callq	printf
	movl	$.L.str.92, %edi
	movsd	16(%rsp), %xmm0                 # 8-byte Reload
                                        # xmm0 = mem[0],zero
	movb	$1, %al
	callq	printf
	movss	44(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	%xmm0, %xmm0
	movss	72(%rsp), %xmm1                 # 4-byte Reload
                                        # xmm1 = mem[0],zero,zero,zero
	mulss	%xmm1, %xmm1
	addss	%xmm0, %xmm1
	xorps	%xmm0, %xmm0
	cvtss2sd	%xmm1, %xmm0
	movl	$.L.str.93, %edi
	movb	$1, %al
	callq	printf
	xorps	%xmm0, %xmm0
	cvtss2sd	8(%rsp), %xmm0                  # 4-byte Folded Reload
	movsd	%xmm0, 16(%rsp)                 # 8-byte Spill
	movss	44(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	48(%rsp), %xmm0                 # 4-byte Folded Reload
	cvtss2sd	%xmm0, %xmm0
	callq	cos
	xorps	%xmm0, %xmm0
	cvtss2sd	32(%rsp), %xmm0                 # 4-byte Folded Reload
	movsd	%xmm0, 24(%rsp)                 # 8-byte Spill
	movss	72(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	52(%rsp), %xmm0                 # 4-byte Folded Reload
	cvtss2sd	%xmm0, %xmm0
	callq	cos
	movl	$.Lstr.2, %edi
	callq	puts@PLT
	movl	$.L.str.95, %edi
	movsd	16(%rsp), %xmm0                 # 8-byte Reload
                                        # xmm0 = mem[0],zero
	movsd	24(%rsp), %xmm1                 # 8-byte Reload
                                        # xmm1 = mem[0],zero
	movb	$2, %al
	callq	printf
	cmpl	$0, 76(%rsp)                    # 4-byte Folded Reload
	movq	248(%rsp), %r15                 # 8-byte Reload
	je	.LBB6_174
# %bb.166:                              # %.critedge
	movl	$.L.str.95, %edi
	movsd	16(%rsp), %xmm0                 # 8-byte Reload
                                        # xmm0 = mem[0],zero
	movsd	24(%rsp), %xmm1                 # 8-byte Reload
                                        # xmm1 = mem[0],zero
	movb	$2, %al
	callq	printf
	movl	$.L.str.96, %edi
	xorps	%xmm0, %xmm0
	xorps	%xmm1, %xmm1
	movb	$2, %al
	callq	printf
	xorps	%xmm0, %xmm0
	movq	56(%rsp), %rax                  # 8-byte Reload
	cmpl	$2, %eax
	jl	.LBB6_173
# %bb.167:                              # %.preheader788.lr.ph
	movss	52(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	48(%rsp), %xmm0                 # 4-byte Folded Reload
	movl	%eax, %eax
	movl	%ebx, %ecx
	leal	(%rbx,%rbx), %edx
	leal	2(,%rbx,2), %esi
	decq	%rcx
	xorps	%xmm1, %xmm1
	movl	$1, %edi
.LBB6_168:                              # %.preheader788
                                        # =>This Loop Header: Depth=1
                                        #     Child Loop BB6_170 Depth 2
	cmpl	$2, %ebx
	jl	.LBB6_171
# %bb.169:                              # %.lr.ph886
                                        #   in Loop: Header=BB6_168 Depth=1
	movq	%rcx, %r8
	movl	%esi, %r9d
.LBB6_170:                              #   Parent Loop BB6_168 Depth=1
                                        # =>  This Inner Loop Header: Depth=2
	movl	%r9d, %r10d
	movss	(%r12,%r10,4), %xmm2            # xmm2 = mem[0],zero,zero,zero
	leal	1(%r9), %r10d
	movss	(%r12,%r10,4), %xmm3            # xmm3 = mem[0],zero,zero,zero
	mulss	%xmm2, %xmm2
	mulss	%xmm3, %xmm3
	addss	%xmm2, %xmm3
	mulss	%xmm0, %xmm3
	addss	%xmm3, %xmm1
	addl	$2, %r9d
	decq	%r8
	jne	.LBB6_170
.LBB6_171:                              # %._crit_edge887
                                        #   in Loop: Header=BB6_168 Depth=1
	incq	%rdi
	addl	%edx, %esi
	cmpq	%rax, %rdi
	jne	.LBB6_168
# %bb.172:                              # %._crit_edge891.loopexit
	xorps	%xmm0, %xmm0
	cvtss2sd	%xmm1, %xmm0
.LBB6_173:                              # %._crit_edge891
	movl	$.L.str.97, %edi
	movb	$1, %al
	callq	printf
.LBB6_174:                              # %.critedge783
	movl	200(%rsp), %eax                 # 4-byte Reload
	testl	%eax, %eax
	jle	.LBB6_176
# %bb.175:                              # %.lr.ph894.preheader
	movl	%eax, %edx
	shlq	$2, %rdx
	movq	112(%rsp), %rdi                 # 8-byte Reload
	movq	%r12, %rsi
	callq	memcpy@PLT
.LBB6_176:                              # %.preheader
	testl	%r15d, %r15d
	jle	.LBB6_178
# %bb.177:                              # %.lr.ph896.preheader
	movl	%r15d, %edx
	shlq	$2, %rdx
	movq	152(%rsp), %rdi                 # 8-byte Reload
	movq	144(%rsp), %rsi                 # 8-byte Reload
	callq	memcpy@PLT
.LBB6_178:                              # %._crit_edge897
	testl	%r14d, %r14d
	je	.LBB6_180
# %bb.179:
	movl	$.Lstr.3, %edi
	callq	puts@PLT
	movl	$.Lstr.4, %edi
	callq	puts@PLT
.LBB6_180:                              # %.critedge785
	xorps	%xmm0, %xmm0
	cvtss2sd	80(%rsp), %xmm0                 # 4-byte Folded Reload
	movl	$.L.str.100, %edi
	movb	$1, %al
	callq	printf
	xorps	%xmm0, %xmm0
	cvtss2sd	84(%rsp), %xmm0                 # 4-byte Folded Reload
	movl	$.L.str.101, %edi
	movb	$1, %al
	callq	printf
	movl	$.L.str.102, %edi
	movl	92(%rsp), %esi                  # 4-byte Reload
	xorl	%eax, %eax
	callq	printf
	xorps	%xmm1, %xmm1
	movss	48(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	%xmm1, %xmm0
	cvtss2sd	%xmm0, %xmm0
	movsd	%xmm0, 24(%rsp)                 # 8-byte Spill
	callq	sin
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 16(%rsp)                 # 4-byte Spill
	movsd	24(%rsp), %xmm0                 # 8-byte Reload
                                        # xmm0 = mem[0],zero
	callq	cos
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 24(%rsp)                 # 4-byte Spill
	movss	52(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	mulss	.LCPI6_12(%rip), %xmm0
	cvtss2sd	%xmm0, %xmm0
	movsd	%xmm0, 128(%rsp)                # 8-byte Spill
	callq	sin
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 192(%rsp)                # 4-byte Spill
	movsd	128(%rsp), %xmm0                # 8-byte Reload
                                        # xmm0 = mem[0],zero
	callq	cos
	cvtsd2ss	%xmm0, %xmm0
	movss	%xmm0, 128(%rsp)                # 4-byte Spill
	movl	$.L.str.103, %edi
	movl	$.L.str.104, %esi
	callq	fopen
	movq	%rax, %r14
	leaq	292(%rsp), %rdi
	movl	$101, (%rdi)
	movl	$4, %esi
	movl	$1, %edx
	movq	%rax, %rcx
	callq	fwrite
	leaq	228(%rsp), %rbx
	movl	$4, %esi
	movl	$1, %edx
	movq	%rbx, %rdi
	movq	%r14, %rcx
	callq	fwrite
	leaq	224(%rsp), %r15
	movl	$4, %esi
	movl	$1, %edx
	movq	%r15, %rdi
	movq	%r14, %rcx
	callq	fwrite
	movl	(%rbx), %ebx
	movl	(%r15), %ebp
	movl	%ebx, %eax
	imull	%ebp, %eax
	addl	%eax, %eax
	movslq	%eax, %r15
	movl	$4, %esi
	movq	112(%rsp), %rdi                 # 8-byte Reload
	movq	%r15, %rdx
	movq	%r14, %rcx
	callq	fwrite
	xorl	%r13d, %r13d
.LBB6_181:                              # =>This Inner Loop Header: Depth=1
	movl	$.L.str.105, %edi
	movl	%r13d, %esi
	xorl	%eax, %eax
	callq	printf
	cmpl	$2, 92(%rsp)                    # 4-byte Folded Reload
	jne	.LBB6_183
# %bb.182:                              #   in Loop: Header=BB6_181 Depth=1
	movq	112(%rsp), %rdi                 # 8-byte Reload
	movss	80(%rsp), %xmm0                 # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	movss	84(%rsp), %xmm1                 # 4-byte Reload
                                        # xmm1 = mem[0],zero,zero,zero
	movq	152(%rsp), %rsi                 # 8-byte Reload
	movl	%ebx, %edx
	movl	%ebp, %ecx
	movss	8(%rsp), %xmm2                  # 4-byte Reload
                                        # xmm2 = mem[0],zero,zero,zero
	movss	32(%rsp), %xmm3                 # 4-byte Reload
                                        # xmm3 = mem[0],zero,zero,zero
	movl	$1, %r8d
	movl	$1, %r9d
	movss	16(%rsp), %xmm4                 # 4-byte Reload
                                        # xmm4 = mem[0],zero,zero,zero
	movss	24(%rsp), %xmm5                 # 4-byte Reload
                                        # xmm5 = mem[0],zero,zero,zero
	movss	192(%rsp), %xmm6                # 4-byte Reload
                                        # xmm6 = mem[0],zero,zero,zero
	movss	128(%rsp), %xmm7                # 4-byte Reload
                                        # xmm7 = mem[0],zero,zero,zero
	callq	_Z10evolve2dO2PfffS_iiffiiffff
.LBB6_183:                              # %_Z8evolve2dPfffS_iiiffiiffff.exit
                                        #   in Loop: Header=BB6_181 Depth=1
	movl	$4, %esi
	movq	112(%rsp), %rdi                 # 8-byte Reload
	movq	%r15, %rdx
	movq	%r14, %rcx
	callq	fwrite
	incl	%r13d
	cmpl	$100, %r13d
	jne	.LBB6_181
# %bb.184:
	movq	%r14, %rdi
	callq	fclose
	cmpl	$0, 100(%rsp)                   # 4-byte Folded Reload
	je	.LBB6_186
# %bb.185:
	movl	$.Lstr.5, %edi
	callq	puts@PLT
	movq	%r12, %rdi
	callq	free
	movq	112(%rsp), %rdi                 # 8-byte Reload
	callq	free
	movq	144(%rsp), %rdi                 # 8-byte Reload
	callq	free
	movq	152(%rsp), %rdi                 # 8-byte Reload
	callq	free
	movl	$.Lstr.6, %edi
	callq	puts@PLT
	jmp	.LBB6_187
.LBB6_186:                              # %.critedge787
	movq	%r12, %rdi
	callq	free
	movq	112(%rsp), %rdi                 # 8-byte Reload
	callq	free
	movq	144(%rsp), %rdi                 # 8-byte Reload
	callq	free
	movq	152(%rsp), %rdi                 # 8-byte Reload
	callq	free
.LBB6_187:
	xorl	%eax, %eax
	addq	$296, %rsp                      # imm = 0x128
	.cfi_def_cfa_offset 56
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%r12
	.cfi_def_cfa_offset 40
	popq	%r13
	.cfi_def_cfa_offset 32
	popq	%r14
	.cfi_def_cfa_offset 24
	popq	%r15
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	retq
.LBB6_188:
	.cfi_def_cfa_offset 352
	movl	$.Lstr.10, %edi
	jmp	.LBB6_192
.LBB6_189:
	movl	$.Lstr.9, %edi
	jmp	.LBB6_192
.LBB6_190:
	movl	$.Lstr.8, %edi
	jmp	.LBB6_192
.LBB6_191:
	movl	$.Lstr.7, %edi
.LBB6_192:
	callq	puts@PLT
	movl	$1, %edi
	callq	exit
.LBB6_193:
	movl	$.L.str.57, %edi
	movl	%r12d, %esi
	movq	%r15, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$.Lstr.11, %edi
	callq	puts@PLT
	movl	$.Lstr.12, %edi
	callq	puts@PLT
	movl	$.Lstr.13, %edi
	callq	puts@PLT
	movl	$.Lstr.14, %edi
	callq	puts@PLT
	movl	$.Lstr.15, %edi
	callq	puts@PLT
	movl	$.Lstr.16, %edi
	callq	puts@PLT
	movl	$.Lstr.17, %edi
	callq	puts@PLT
	movl	$.Lstr.18, %edi
	callq	puts@PLT
	movl	$.Lstr.19, %edi
	callq	puts@PLT
	movl	$.Lstr.20, %edi
	callq	puts@PLT
	movl	$.Lstr.21, %edi
	callq	puts@PLT
	movl	$.Lstr.22, %edi
	callq	puts@PLT
	movl	$.Lstr.23, %edi
	callq	puts@PLT
	movl	$.Lstr.24, %edi
	callq	puts@PLT
	movl	$.Lstr.25, %edi
	callq	puts@PLT
	movl	$.Lstr.26, %edi
	callq	puts@PLT
	movl	$.Lstr.27, %edi
	callq	puts@PLT
	movl	$.Lstr.28, %edi
	callq	puts@PLT
	movl	$.Lstr.29, %edi
	callq	puts@PLT
	movl	$.Lstr.30, %edi
	callq	puts@PLT
	movl	$.Lstr.31, %edi
	callq	puts@PLT
	movl	$.Lstr.32, %edi
	callq	puts@PLT
	movl	$.Lstr.33, %edi
	callq	puts@PLT
	movl	$.Lstr.34, %edi
	callq	puts@PLT
	movl	$.Lstr.35, %edi
	callq	puts@PLT
	movl	$.Lstr.36, %edi
	jmp	.LBB6_192
.Lfunc_end6:
	.size	main, .Lfunc_end6-main
	.cfi_endproc
                                        # -- End function
	.p2align	4, 0x90                         # -- Begin function __hip_module_ctor
	.type	__hip_module_ctor,@function
__hip_module_ctor:                      # @__hip_module_ctor
	.cfi_startproc
# %bb.0:
	pushq	%rbx
	.cfi_def_cfa_offset 16
	subq	$32, %rsp
	.cfi_def_cfa_offset 48
	.cfi_offset %rbx, -16
	movq	__hip_gpubin_handle(%rip), %rbx
	testq	%rbx, %rbx
	jne	.LBB7_2
# %bb.1:
	movl	$__hip_fatbin_wrapper, %edi
	callq	__hipRegisterFatBinary
	movq	%rax, %rbx
	movq	%rax, __hip_gpubin_handle(%rip)
.LBB7_2:
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z8H2d_stepPfS_ifS_iiiiffffff, %esi
	movl	$.L__unnamed_1, %edx
	movl	$.L__unnamed_1, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z5H2d_xPffiiiifff, %esi
	movl	$.L__unnamed_2, %edx
	movl	$.L__unnamed_2, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z5H2d_yPffiiiifff, %esi
	movl	$.L__unnamed_3, %edx
	movl	$.L__unnamed_3, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z7Hdiag2dPffS_iiff, %esi
	movl	$.L__unnamed_4, %edx
	movl	$.L__unnamed_4, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	movl	$__hip_module_dtor, %edi
	addq	$32, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	jmp	atexit                          # TAILCALL
.Lfunc_end7:
	.size	__hip_module_ctor, .Lfunc_end7-__hip_module_ctor
	.cfi_endproc
                                        # -- End function
	.p2align	4, 0x90                         # -- Begin function __hip_module_dtor
	.type	__hip_module_dtor,@function
__hip_module_dtor:                      # @__hip_module_dtor
	.cfi_startproc
# %bb.0:
	movq	__hip_gpubin_handle(%rip), %rdi
	testq	%rdi, %rdi
	je	.LBB8_2
# %bb.1:
	pushq	%rax
	.cfi_def_cfa_offset 16
	callq	__hipUnregisterFatBinary
	movq	$0, __hip_gpubin_handle(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
.LBB8_2:
	retq
.Lfunc_end8:
	.size	__hip_module_dtor, .Lfunc_end8-__hip_module_dtor
	.cfi_endproc
                                        # -- End function
	.type	_Z8H2d_stepPfS_ifS_iiiiffffff,@object # @_Z8H2d_stepPfS_ifS_iiiiffffff
	.section	.rodata,"a",@progbits
	.globl	_Z8H2d_stepPfS_ifS_iiiiffffff
	.p2align	3, 0x0
_Z8H2d_stepPfS_ifS_iiiiffffff:
	.quad	_Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff
	.size	_Z8H2d_stepPfS_ifS_iiiiffffff, 8

	.type	_Z5H2d_xPffiiiifff,@object      # @_Z5H2d_xPffiiiifff
	.globl	_Z5H2d_xPffiiiifff
	.p2align	3, 0x0
_Z5H2d_xPffiiiifff:
	.quad	_Z20__device_stub__H2d_xPffiiiifff
	.size	_Z5H2d_xPffiiiifff, 8

	.type	_Z5H2d_yPffiiiifff,@object      # @_Z5H2d_yPffiiiifff
	.globl	_Z5H2d_yPffiiiifff
	.p2align	3, 0x0
_Z5H2d_yPffiiiifff:
	.quad	_Z20__device_stub__H2d_yPffiiiifff
	.size	_Z5H2d_yPffiiiifff, 8

	.type	_Z7Hdiag2dPffS_iiff,@object     # @_Z7Hdiag2dPffS_iiff
	.globl	_Z7Hdiag2dPffS_iiff
	.p2align	3, 0x0
_Z7Hdiag2dPffS_iiff:
	.quad	_Z22__device_stub__Hdiag2dPffS_iiff
	.size	_Z7Hdiag2dPffS_iiff, 8

	.type	.L.str.3,@object                # @.str.3
	.section	.rodata.str1.1,"aMS",@progbits,1
.L.str.3:
	.asciz	"-pars"
	.size	.L.str.3, 6

	.type	.L.str.4,@object                # @.str.4
.L.str.4:
	.asciz	"-pars found at position %i, argument is %s\n"
	.size	.L.str.4, 44

	.type	.L.str.5,@object                # @.str.5
.L.str.5:
	.asciz	"-nx"
	.size	.L.str.5, 4

	.type	.L.str.6,@object                # @.str.6
.L.str.6:
	.asciz	"-nx found at position %i, argument is %s\n"
	.size	.L.str.6, 42

	.type	.L.str.7,@object                # @.str.7
.L.str.7:
	.asciz	"-ny"
	.size	.L.str.7, 4

	.type	.L.str.8,@object                # @.str.8
.L.str.8:
	.asciz	"-ny found at position %i, argument is %s\n"
	.size	.L.str.8, 42

	.type	.L.str.9,@object                # @.str.9
.L.str.9:
	.asciz	"-Lx"
	.size	.L.str.9, 4

	.type	.L.str.10,@object               # @.str.10
.L.str.10:
	.asciz	"-Lx found at position %i, argument is %s\n"
	.size	.L.str.10, 42

	.type	.L.str.11,@object               # @.str.11
.L.str.11:
	.asciz	"-Ly"
	.size	.L.str.11, 4

	.type	.L.str.12,@object               # @.str.12
.L.str.12:
	.asciz	"-Ly found at position %i, argument is %s\n"
	.size	.L.str.12, 42

	.type	.L.str.13,@object               # @.str.13
.L.str.13:
	.asciz	"-lambda"
	.size	.L.str.13, 8

	.type	.L.str.14,@object               # @.str.14
.L.str.14:
	.asciz	"-lambda found at position %i, argument is %s\n"
	.size	.L.str.14, 46

	.type	.L.str.15,@object               # @.str.15
.L.str.15:
	.asciz	"-R1"
	.size	.L.str.15, 4

	.type	.L.str.16,@object               # @.str.16
.L.str.16:
	.asciz	"-R1 found at position %i, argument is %s\n"
	.size	.L.str.16, 42

	.type	.L.str.17,@object               # @.str.17
.L.str.17:
	.asciz	"-R2"
	.size	.L.str.17, 4

	.type	.L.str.18,@object               # @.str.18
.L.str.18:
	.asciz	"-R2 found at position %i, argument is %s\n"
	.size	.L.str.18, 42

	.type	.L.str.19,@object               # @.str.19
.L.str.19:
	.asciz	"-target"
	.size	.L.str.19, 8

	.type	.L.str.20,@object               # @.str.20
.L.str.20:
	.asciz	"-target found at position %i, argument is %s\n"
	.size	.L.str.20, 46

	.type	.L.str.21,@object               # @.str.21
.L.str.21:
	.asciz	"-alpha"
	.size	.L.str.21, 7

	.type	.L.str.22,@object               # @.str.22
.L.str.22:
	.asciz	"-alpha found at position %i, argument is %s\n"
	.size	.L.str.22, 45

	.type	.L.str.23,@object               # @.str.23
.L.str.23:
	.asciz	"-beta"
	.size	.L.str.23, 6

	.type	.L.str.24,@object               # @.str.24
.L.str.24:
	.asciz	"-beta found at position %i, argument is %s\n"
	.size	.L.str.24, 44

	.type	.L.str.25,@object               # @.str.25
.L.str.25:
	.asciz	"-x0"
	.size	.L.str.25, 4

	.type	.L.str.26,@object               # @.str.26
.L.str.26:
	.asciz	"-x0 found at position %i, argument is %s\n"
	.size	.L.str.26, 42

	.type	.L.str.27,@object               # @.str.27
.L.str.27:
	.asciz	"-y0"
	.size	.L.str.27, 4

	.type	.L.str.28,@object               # @.str.28
.L.str.28:
	.asciz	"-y0 found at position %i, argument is %s\n"
	.size	.L.str.28, 42

	.type	.L.str.29,@object               # @.str.29
.L.str.29:
	.asciz	"-sx"
	.size	.L.str.29, 4

	.type	.L.str.30,@object               # @.str.30
.L.str.30:
	.asciz	"-sx found at position %i, argument is %s\n"
	.size	.L.str.30, 42

	.type	.L.str.31,@object               # @.str.31
.L.str.31:
	.asciz	"-sy"
	.size	.L.str.31, 4

	.type	.L.str.32,@object               # @.str.32
.L.str.32:
	.asciz	"-sy found at position %i, argument is %s\n"
	.size	.L.str.32, 42

	.type	.L.str.33,@object               # @.str.33
.L.str.33:
	.asciz	"-px0"
	.size	.L.str.33, 5

	.type	.L.str.34,@object               # @.str.34
.L.str.34:
	.asciz	"-px0 found at position %i, argument is %s\n"
	.size	.L.str.34, 43

	.type	.L.str.35,@object               # @.str.35
.L.str.35:
	.asciz	"-py0"
	.size	.L.str.35, 5

	.type	.L.str.36,@object               # @.str.36
.L.str.36:
	.asciz	"-py0 found at position %i, argument is %s\n"
	.size	.L.str.36, 43

	.type	.L.str.37,@object               # @.str.37
.L.str.37:
	.asciz	"-dt"
	.size	.L.str.37, 4

	.type	.L.str.38,@object               # @.str.38
.L.str.38:
	.asciz	"-dt found at position %i, argument is %s\n"
	.size	.L.str.38, 42

	.type	.L.str.39,@object               # @.str.39
.L.str.39:
	.asciz	"-order"
	.size	.L.str.39, 7

	.type	.L.str.40,@object               # @.str.40
.L.str.40:
	.asciz	"-order found at position %i, argument is %s\n"
	.size	.L.str.40, 45

	.type	.L.str.41,@object               # @.str.41
.L.str.41:
	.asciz	"-time"
	.size	.L.str.41, 6

	.type	.L.str.42,@object               # @.str.42
.L.str.42:
	.asciz	"-time found at position %i, argument is %s\n"
	.size	.L.str.42, 44

	.type	.L.str.43,@object               # @.str.43
.L.str.43:
	.asciz	"-file"
	.size	.L.str.43, 6

	.type	.L.str.44,@object               # @.str.44
.L.str.44:
	.asciz	"-file found at position %i, argument is %s\n"
	.size	.L.str.44, 44

	.type	.L.str.45,@object               # @.str.45
.L.str.45:
	.asciz	"-format"
	.size	.L.str.45, 8

	.type	.L.str.46,@object               # @.str.46
.L.str.46:
	.asciz	"-format found at position %i, argument is %s\n"
	.size	.L.str.46, 46

	.type	.L.str.47,@object               # @.str.47
.L.str.47:
	.asciz	"-dir"
	.size	.L.str.47, 5

	.type	.L.str.48,@object               # @.str.48
.L.str.48:
	.asciz	"-dir found at position %i, argument is %s\n"
	.size	.L.str.48, 43

	.type	.L.str.49,@object               # @.str.49
.L.str.49:
	.asciz	"-V"
	.size	.L.str.49, 3

	.type	.L.str.50,@object               # @.str.50
.L.str.50:
	.asciz	"-verbose found at position %i\n"
	.size	.L.str.50, 31

	.type	.L.str.51,@object               # @.str.51
.L.str.51:
	.asciz	"-pbcx"
	.size	.L.str.51, 6

	.type	.L.str.52,@object               # @.str.52
.L.str.52:
	.asciz	"-pbcx found at position %i\n"
	.size	.L.str.52, 28

	.type	.L.str.53,@object               # @.str.53
.L.str.53:
	.asciz	"-pbcy"
	.size	.L.str.53, 6

	.type	.L.str.54,@object               # @.str.54
.L.str.54:
	.asciz	"-pbcy found at position %i\n"
	.size	.L.str.54, 28

	.type	.L.str.55,@object               # @.str.55
.L.str.55:
	.asciz	"-debug"
	.size	.L.str.55, 7

	.type	.L.str.56,@object               # @.str.56
.L.str.56:
	.asciz	"-debug found at position %i; all subsequent arguments are listed\n"
	.size	.L.str.56, 66

	.type	.L.str.57,@object               # @.str.57
.L.str.57:
	.asciz	"ERROR: Wrong argument at position %i: $s\n"
	.size	.L.str.57, 42

	.type	.L.str.91,@object               # @.str.91
.L.str.91:
	.asciz	"mu = %f + %f*i; taking real part only\n"
	.size	.L.str.91, 39

	.type	.L.str.92,@object               # @.str.92
.L.str.92:
	.asciz	"Chemical potential: %f\n"
	.size	.L.str.92, 24

	.type	.L.str.93,@object               # @.str.93
.L.str.93:
	.asciz	"p^2: %f\n"
	.size	.L.str.93, 9

	.type	.L.str.95,@object               # @.str.95
.L.str.95:
	.asciz	"Hoppings: Vx=%f, Vy=%f\n"
	.size	.L.str.95, 24

	.type	.L.str.96,@object               # @.str.96
.L.str.96:
	.asciz	"Momenta:  kx=%f, ky=%f\n"
	.size	.L.str.96, 24

	.type	.L.str.97,@object               # @.str.97
.L.str.97:
	.asciz	"Initial state module: rtemp=%f\n"
	.size	.L.str.97, 32

	.type	.L.str.100,@object              # @.str.100
.L.str.100:
	.asciz	"tmax   %f\n"
	.size	.L.str.100, 11

	.type	.L.str.101,@object              # @.str.101
.L.str.101:
	.asciz	"dt     %f\n"
	.size	.L.str.101, 11

	.type	.L.str.102,@object              # @.str.102
.L.str.102:
	.asciz	"order  %d\n"
	.size	.L.str.102, 11

	.type	.L.str.103,@object              # @.str.103
.L.str.103:
	.asciz	"GPU_Suzuki.ket"
	.size	.L.str.103, 15

	.type	.L.str.104,@object              # @.str.104
.L.str.104:
	.asciz	"w+"
	.size	.L.str.104, 3

	.type	.L.str.105,@object              # @.str.105
.L.str.105:
	.asciz	"%d\n"
	.size	.L.str.105, 4

	.type	.L__unnamed_1,@object           # @0
.L__unnamed_1:
	.asciz	"_Z8H2d_stepPfS_ifS_iiiiffffff"
	.size	.L__unnamed_1, 30

	.type	.L__unnamed_2,@object           # @1
.L__unnamed_2:
	.asciz	"_Z5H2d_xPffiiiifff"
	.size	.L__unnamed_2, 19

	.type	.L__unnamed_3,@object           # @2
.L__unnamed_3:
	.asciz	"_Z5H2d_yPffiiiifff"
	.size	.L__unnamed_3, 19

	.type	.L__unnamed_4,@object           # @3
.L__unnamed_4:
	.asciz	"_Z7Hdiag2dPffS_iiff"
	.size	.L__unnamed_4, 20

	.type	__hip_fatbin_wrapper,@object    # @__hip_fatbin_wrapper
	.section	.hipFatBinSegment,"a",@progbits
	.p2align	3, 0x0
__hip_fatbin_wrapper:
	.long	1212764230                      # 0x48495046
	.long	1                               # 0x1
	.quad	__hip_fatbin
	.quad	0
	.size	__hip_fatbin_wrapper, 24

	.type	__hip_gpubin_handle,@object     # @__hip_gpubin_handle
	.local	__hip_gpubin_handle
	.comm	__hip_gpubin_handle,8,8
	.section	.init_array,"aw",@init_array
	.p2align	3, 0x0
	.quad	__hip_module_ctor
	.type	__hip_cuid_,@object             # @__hip_cuid_
	.bss
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               # 0x0
	.size	__hip_cuid_, 1

	.type	.Lstr,@object                   # @str
	.section	.rodata.str1.1,"aMS",@progbits,1
.Lstr:
	.asciz	"Allocating memory"
	.size	.Lstr, 18

	.type	.Lstr.1,@object                 # @str.1
.Lstr.1:
	.asciz	"Computing chemical potential"
	.size	.Lstr.1, 29

	.type	.Lstr.2,@object                 # @str.2
.Lstr.2:
	.asciz	"Lattice energy"
	.size	.Lstr.2, 15

	.type	.Lstr.3,@object                 # @str.3
.Lstr.3:
	.asciz	"Saving potential [not implemented yet]"
	.size	.Lstr.3, 39

	.type	.Lstr.4,@object                 # @str.4
.Lstr.4:
	.asciz	"Saving initial configuration [not implemented yet]"
	.size	.Lstr.4, 51

	.type	.Lstr.5,@object                 # @str.5
.Lstr.5:
	.asciz	"Freeing allocated memory"
	.size	.Lstr.5, 25

	.type	.Lstr.6,@object                 # @str.6
.Lstr.6:
	.asciz	"All done"
	.size	.Lstr.6, 9

	.type	.Lstr.7,@object                 # @str.7
.Lstr.7:
	.asciz	"ERROR: memory of variable Et could not be allocated."
	.size	.Lstr.7, 53

	.type	.Lstr.8,@object                 # @str.8
.Lstr.8:
	.asciz	"ERROR: memory of variable potential could not be allocated."
	.size	.Lstr.8, 60

	.type	.Lstr.9,@object                 # @str.9
.Lstr.9:
	.asciz	"ERROR: memory of variable phit could not be allocated."
	.size	.Lstr.9, 55

	.type	.Lstr.10,@object                # @str.10
.Lstr.10:
	.asciz	"ERROR: memory of variable phi0 could not be allocated."
	.size	.Lstr.10, 55

	.type	.Lstr.11,@object                # @str.11
.Lstr.11:
	.asciz	"Cloaking of matter waves in 2D. Wrong parameters."
	.size	.Lstr.11, 50

	.type	.Lstr.12,@object                # @str.12
.Lstr.12:
	.asciz	"Options: "
	.size	.Lstr.12, 10

	.type	.Lstr.13,@object                # @str.13
.Lstr.13:
	.asciz	"    System:"
	.size	.Lstr.13, 12

	.type	.Lstr.14,@object                # @str.14
.Lstr.14:
	.asciz	"        -nx -ny  Points in X and Y direction"
	.size	.Lstr.14, 45

	.type	.Lstr.15,@object                # @str.15
.Lstr.15:
	.asciz	"        -Lx -Ly  Size in X and Y direction (system is from -L to +L)"
	.size	.Lstr.15, 69

	.type	.Lstr.16,@object                # @str.16
.Lstr.16:
	.asciz	"        -lambda  Boson-boson interaction strength"
	.size	.Lstr.16, 50

	.type	.Lstr.17,@object                # @str.17
.Lstr.17:
	.asciz	"        -R1 -R2  Internal and external cloak radius"
	.size	.Lstr.17, 52

	.type	.Lstr.18,@object                # @str.18
.Lstr.18:
	.asciz	"        -target  target energy (factor from chemical potential)"
	.size	.Lstr.18, 64

	.type	.Lstr.19,@object                # @str.19
.Lstr.19:
	.asciz	"        -alpha   Intensity of perturbation at origin"
	.size	.Lstr.19, 53

	.type	.Lstr.20,@object                # @str.20
.Lstr.20:
	.asciz	"        -beta    1/Radius^2 of perturbation at origin"
	.size	.Lstr.20, 54

	.type	.Lstr.21,@object                # @str.21
.Lstr.21:
	.asciz	"        -pbcx -pbcy Periodic boundary conditions"
	.size	.Lstr.21, 49

	.type	.Lstr.22,@object                # @str.22
.Lstr.22:
	.asciz	"    Wave packet:"
	.size	.Lstr.22, 17

	.type	.Lstr.23,@object                # @str.23
.Lstr.23:
	.asciz	"        -x0 -y0  Initial position"
	.size	.Lstr.23, 34

	.type	.Lstr.24,@object                # @str.24
.Lstr.24:
	.asciz	"        -sx -sy  Position dispersion (sigmas)"
	.size	.Lstr.24, 46

	.type	.Lstr.25,@object                # @str.25
.Lstr.25:
	.asciz	"        -px0 -py0  Initial momentum"
	.size	.Lstr.25, 36

	.type	.Lstr.26,@object                # @str.26
.Lstr.26:
	.asciz	"    Simulation:"
	.size	.Lstr.26, 16

	.type	.Lstr.27,@object                # @str.27
.Lstr.27:
	.asciz	"        -time   Evolution time"
	.size	.Lstr.27, 31

	.type	.Lstr.28,@object                # @str.28
.Lstr.28:
	.asciz	"        -dt      Time step"
	.size	.Lstr.28, 27

	.type	.Lstr.29,@object                # @str.29
.Lstr.29:
	.asciz	"        -order   Algorithm order (default 2)"
	.size	.Lstr.29, 45

	.type	.Lstr.30,@object                # @str.30
.Lstr.30:
	.asciz	"    Input/Output:"
	.size	.Lstr.30, 18

	.type	.Lstr.31,@object                # @str.31
.Lstr.31:
	.asciz	"        -file    Output file base name"
	.size	.Lstr.31, 39

	.type	.Lstr.32,@object                # @str.32
.Lstr.32:
	.asciz	"        -format  Output file format (DT, TP)"
	.size	.Lstr.32, 45

	.type	.Lstr.33,@object                # @str.33
.Lstr.33:
	.asciz	"        -pars    Parameters file (all other input is ignored)"
	.size	.Lstr.33, 62

	.type	.Lstr.34,@object                # @str.34
.Lstr.34:
	.asciz	"        -dir     Input/Output directory"
	.size	.Lstr.34, 40

	.type	.Lstr.35,@object                # @str.35
.Lstr.35:
	.asciz	"        -V       Verbose"
	.size	.Lstr.35, 25

	.type	.Lstr.36,@object                # @str.36
.Lstr.36:
	.asciz	"        -debug   Debug"
	.size	.Lstr.36, 23

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym _Z23__device_stub__H2d_stepPfS_ifS_iiiiffffff
	.addrsig_sym _Z20__device_stub__H2d_xPffiiiifff
	.addrsig_sym _Z20__device_stub__H2d_yPffiiiifff
	.addrsig_sym _Z22__device_stub__Hdiag2dPffS_iiff
	.addrsig_sym __hip_module_ctor
	.addrsig_sym __hip_module_dtor
	.addrsig_sym _Z8H2d_stepPfS_ifS_iiiiffffff
	.addrsig_sym _Z5H2d_xPffiiiifff
	.addrsig_sym _Z5H2d_yPffiiiifff
	.addrsig_sym _Z7Hdiag2dPffS_iiff
	.addrsig_sym __hip_fatbin
	.addrsig_sym __hip_fatbin_wrapper
	.addrsig_sym __hip_cuid_

	.text
	.amdgcn_target "amdgcn-amd-amdhsa--gfx1100"
	.protected	_Z8H2d_stepPfS_ifS_iiiiffffff ; -- Begin function _Z8H2d_stepPfS_ifS_iiiiffffff
	.globl	_Z8H2d_stepPfS_ifS_iiiiffffff
	.p2align	8
	.type	_Z8H2d_stepPfS_ifS_iiiiffffff,@function
_Z8H2d_stepPfS_ifS_iiiiffffff:          ; @_Z8H2d_stepPfS_ifS_iiiiffffff
; %bb.0:
	s_load_b256 s[4:11], s[0:1], 0x28
	v_bfe_u32 v3, v0, 10, 10
	s_mul_i32 s16, s15, 24
	s_mul_i32 s14, s14, 24
	s_add_i32 s16, s16, -2
	s_load_b64 s[18:19], s[0:1], 0x10
	v_lshlrev_b32_e32 v5, 1, v3
	s_waitcnt lgkmcnt(0)
	v_cvt_f32_u32_e32 v1, s4
	v_cvt_f32_u32_e32 v2, s5
	s_sub_i32 s2, 0, s4
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_rcp_iflag_f32_e32 v1, v1
	v_rcp_iflag_f32_e32 v2, v2
	s_waitcnt_depctr 0xfff
	v_dual_mul_f32 v1, 0x4f7ffffe, v1 :: v_dual_mul_f32 v2, 0x4f7ffffe, v2
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cvt_u32_f32_e32 v1, v1
	v_cvt_u32_f32_e32 v7, v2
	s_delay_alu instid0(VALU_DEP_2)
	v_mul_lo_u32 v4, s2, v1
	s_sub_i32 s2, 0, s5
	s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
	v_mul_lo_u32 v8, s2, v7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_hi_u32 v4, v1, v4
	v_mul_hi_u32 v8, v7, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_add_nc_u32_e32 v4, v1, v4
	v_add_nc_u32_e32 v1, s16, v5
	v_add_nc_u32_e32 v7, v7, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_nc_u32_e32 v9, s5, v1
	v_add_nc_u32_e32 v8, 1, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_hi_u32 v10, v9, v7
	v_mul_hi_u32 v7, v8, v7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_lo_u32 v10, v10, s5
	v_mul_lo_u32 v7, v7, s5
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v9, v9, v10
	v_sub_nc_u32_e32 v7, v8, v7
	v_and_b32_e32 v2, 0x3ff, v0
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_subrev_nc_u32_e32 v8, s5, v9
	v_add3_u32 v0, s14, -2, v2
	s_load_b128 s[12:15], s[0:1], 0x0
	s_cmp_eq_u32 s18, 0
	s_cselect_b32 s3, -1, 0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_add_nc_u32_e32 v6, s4, v0
	s_and_b32 s2, s3, exec_lo
	v_mul_hi_u32 v4, v6, v4
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	v_mul_lo_u32 v4, v4, s4
	s_waitcnt lgkmcnt(0)
	s_cselect_b32 s17, s12, s14
	s_cselect_b32 s2, s13, s15
	v_sub_nc_u32_e32 v4, v6, v4
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_subrev_nc_u32_e32 v11, s4, v4
	v_cmp_le_u32_e32 vcc_lo, s4, v4
	v_cndmask_b32_e32 v4, v4, v11, vcc_lo
	v_cmp_le_u32_e32 vcc_lo, s5, v9
	v_subrev_nc_u32_e32 v11, s5, v7
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_subrev_nc_u32_e32 v10, s4, v4
	v_cndmask_b32_e32 v8, v9, v8, vcc_lo
	v_cmp_le_u32_e32 vcc_lo, s4, v4
	v_subrev_nc_u32_e32 v9, s5, v8
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_cndmask_b32_e32 v4, v4, v10, vcc_lo
	v_cmp_le_u32_e32 vcc_lo, s5, v7
	v_mul_lo_u32 v4, v4, s5
	v_cndmask_b32_e32 v7, v7, v11, vcc_lo
	v_cmp_le_u32_e32 vcc_lo, s5, v8
	v_mul_f32_e64 v11, s19, 0.5
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
	v_subrev_nc_u32_e32 v10, s5, v7
	v_cndmask_b32_e32 v8, v8, v9, vcc_lo
	v_cmp_le_u32_e32 vcc_lo, s5, v7
	v_cndmask_b32_e32 v9, v7, v10, vcc_lo
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_lshl_u32 v7, v4, v8, 1
	v_add_lshl_u32 v9, v9, v4, 1
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_ashrrev_i32_e32 v8, 31, v7
	v_lshlrev_b32_e32 v4, 2, v3
	v_ashrrev_i32_e32 v10, 31, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshlrev_b64 v[7:8], 2, v[7:8]
	v_lshlrev_b64 v[9:10], 2, v[9:10]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_add_co_u32 v7, vcc_lo, s17, v7
	v_add_co_ci_u32_e32 v8, vcc_lo, s2, v8, vcc_lo
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_add_co_u32 v9, vcc_lo, s17, v9
	v_add_co_ci_u32_e32 v10, vcc_lo, s2, v10, vcc_lo
	s_clause 0x1
	global_load_b64 v[12:13], v[7:8], off
	global_load_b64 v[14:15], v[9:10], off
	v_mul_f32_e32 v7, s6, v11
	v_mul_u32_u24_e32 v8, 56, v2
	s_mov_b32 s17, 0
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_readfirstlane_b32 s2, v7
	v_cmp_ngt_f32_e64 s6, 0x48000000, |v7|
	v_add_lshl_u32 v4, v4, v8, 2
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	s_bitset0_b32 s2, 31
	s_and_b32 vcc_lo, exec_lo, s6
	s_waitcnt vmcnt(0)
	ds_store_b128 v4, v[12:15]
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_cbranch_vccz .LBB0_2
; %bb.1:
	s_and_b32 s18, s2, 0x7fffff
	s_lshr_b32 s19, s2, 23
	s_bitset1_b32 s18, 23
	s_addk_i32 s19, 0xff88
	s_mul_hi_u32 s20, s18, 0xfe5163ab
	s_mul_i32 s21, s18, 0x3c439041
	s_mul_hi_u32 s22, s18, 0x3c439041
	s_add_u32 s20, s20, s21
	s_addc_u32 s21, 0, s22
	s_mul_i32 s22, s18, 0xdb629599
	s_mul_hi_u32 s23, s18, 0xdb629599
	s_add_u32 s21, s21, s22
	s_addc_u32 s22, 0, s23
	s_mul_i32 s23, s18, 0xf534ddc0
	s_mul_hi_u32 s24, s18, 0xf534ddc0
	s_add_u32 s22, s22, s23
	s_addc_u32 s23, 0, s24
	s_mul_i32 s24, s18, 0xfc2757d1
	s_mul_hi_u32 s25, s18, 0xfc2757d1
	s_add_u32 s23, s23, s24
	s_addc_u32 s24, 0, s25
	s_mul_i32 s25, s18, 0x4e441529
	s_mul_hi_u32 s26, s18, 0x4e441529
	s_add_u32 s24, s24, s25
	s_addc_u32 s25, 0, s26
	s_cmp_gt_u32 s19, 63
	s_mul_i32 s26, s18, 0xfe5163ab
	s_mul_hi_u32 s27, s18, 0xa2f9836e
	s_mul_i32 s18, s18, 0xa2f9836e
	s_cselect_b32 s28, s21, s23
	s_cselect_b32 s20, s20, s22
	s_cselect_b32 s21, s26, s21
	s_add_u32 s18, s25, s18
	s_addc_u32 s25, 0, s27
	s_cmp_gt_u32 s19, 63
	s_cselect_b32 s26, 0xffffffc0, 0
	s_cselect_b32 s22, s22, s24
	s_cselect_b32 s18, s23, s18
	s_cselect_b32 s23, s24, s25
	s_add_i32 s26, s26, s19
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s26, 31
	s_cselect_b32 s19, 0xffffffe0, 0
	s_cselect_b32 s24, s22, s18
	s_cselect_b32 s18, s18, s23
	s_cselect_b32 s22, s28, s22
	s_cselect_b32 s23, s20, s28
	s_cselect_b32 s20, s21, s20
	s_add_i32 s19, s19, s26
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s19, 31
	s_cselect_b32 s21, 0xffffffe0, 0
	s_cselect_b32 s18, s24, s18
	s_cselect_b32 s24, s22, s24
	s_cselect_b32 s22, s23, s22
	s_cselect_b32 s20, s20, s23
	s_add_i32 s21, s21, s19
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s19, 32, s21
	s_cmp_eq_u32 s21, 0
	v_mov_b32_e32 v8, s19
	s_cselect_b32 s21, -1, 0
	v_alignbit_b32 v9, s18, s24, v8
	v_alignbit_b32 v10, s24, s22, v8
	v_alignbit_b32 v8, s22, s20, v8
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_readfirstlane_b32 s19, v9
	v_cndmask_b32_e64 v9, v10, s24, s21
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_cndmask_b32_e64 v8, v8, s22, s21
	s_cselect_b32 s18, s18, s19
	s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v10, s18, v9, 30
	s_bfe_u32 s19, s18, 0x1001d
	s_delay_alu instid0(VALU_DEP_2)
	v_alignbit_b32 v9, v9, v8, 30
	s_sub_i32 s23, 0, s19
	v_alignbit_b32 v8, v8, s20, 30
	v_xor_b32_e32 v10, s23, v10
	s_lshr_b32 s20, s18, 29
	v_xor_b32_e32 v9, s23, v9
	s_lshl_b32 s20, s20, 31
	v_xor_b32_e32 v8, s23, v8
	v_clz_i32_u32_e32 v12, v10
	s_or_b32 s21, s20, 0.5
	s_lshr_b32 s18, s18, 30
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	s_add_i32 s18, s19, s18
	v_min_u32_e32 v12, 32, v12
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v13, 31, v12
	v_lshlrev_b32_e32 v14, 23, v12
	v_alignbit_b32 v10, v10, v9, v13
	v_alignbit_b32 v8, v9, v8, v13
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v14, s21, v14
	v_alignbit_b32 v9, v10, v8, 9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v13, v9
	v_min_u32_e32 v13, 32, v13
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v15, 31, v13
	v_add_nc_u32_e32 v12, v13, v12
	v_alignbit_b32 v8, v9, v8, v15
	v_lshrrev_b32_e32 v9, 9, v10
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_lshlrev_b32_e32 v10, 23, v12
	v_lshrrev_b32_e32 v8, 9, v8
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_or_b32_e32 v9, v9, v14
	v_sub_nc_u32_e32 v8, v8, v10
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_nc_u32_e32 v8, 0x33000000, v8
	v_or_b32_e32 v8, s20, v8
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mul_f32_e32 v10, 0x3fc90fda, v9
	v_fma_f32 v12, 0x3fc90fda, v9, -v10
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmamk_f32 v9, v9, 0x33a22168, v12
	v_fmac_f32_e32 v9, 0x3fc90fda, v8
	s_delay_alu instid0(VALU_DEP_1)
	v_add_f32_e32 v9, v10, v9
	s_branch .LBB0_3
.LBB0_2:
	s_mov_b32 s17, -1
                                        ; implicit-def: $sgpr18
                                        ; implicit-def: $vgpr9
.LBB0_3:                                ; %Flow688
	v_mov_b32_e32 v10, s18
	v_mul_f32_e64 v12, 0x3f22f983, |v7|
	s_and_not1_b32 vcc_lo, exec_lo, s17
	s_cbranch_vccnz .LBB0_5
; %bb.4:
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_rndne_f32_e32 v8, v12
	v_fma_f32 v9, 0xbfc90fda, v8, |v7|
	v_cvt_i32_f32_e32 v10, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmamk_f32 v9, v8, 0xb3a22168, v9
	v_fmamk_f32 v9, v8, 0xa7c234c4, v9
.LBB0_5:                                ; %_ZL3cosf.exit
	s_and_b32 vcc_lo, exec_lo, s6
	s_cbranch_vccz .LBB0_7
; %bb.6:
	s_and_b32 s6, s2, 0x7fffff
	s_lshr_b32 s17, s2, 23
	s_bitset1_b32 s6, 23
	s_addk_i32 s17, 0xff88
	s_mul_hi_u32 s18, s6, 0xfe5163ab
	s_mul_i32 s19, s6, 0x3c439041
	s_mul_hi_u32 s20, s6, 0x3c439041
	s_add_u32 s18, s18, s19
	s_addc_u32 s19, 0, s20
	s_mul_i32 s20, s6, 0xdb629599
	s_mul_hi_u32 s21, s6, 0xdb629599
	s_add_u32 s19, s19, s20
	s_addc_u32 s20, 0, s21
	s_mul_i32 s21, s6, 0xf534ddc0
	s_mul_hi_u32 s22, s6, 0xf534ddc0
	s_add_u32 s20, s20, s21
	s_addc_u32 s21, 0, s22
	s_mul_i32 s22, s6, 0xfc2757d1
	s_mul_hi_u32 s23, s6, 0xfc2757d1
	s_add_u32 s21, s21, s22
	s_addc_u32 s22, 0, s23
	s_mul_i32 s23, s6, 0x4e441529
	s_mul_hi_u32 s24, s6, 0x4e441529
	s_add_u32 s22, s22, s23
	s_addc_u32 s23, 0, s24
	s_cmp_gt_u32 s17, 63
	s_mul_i32 s24, s6, 0xfe5163ab
	s_mul_hi_u32 s25, s6, 0xa2f9836e
	s_mul_i32 s6, s6, 0xa2f9836e
	s_cselect_b32 s26, s19, s21
	s_cselect_b32 s18, s18, s20
	s_cselect_b32 s19, s24, s19
	s_add_u32 s6, s23, s6
	s_addc_u32 s23, 0, s25
	s_cmp_gt_u32 s17, 63
	s_cselect_b32 s24, 0xffffffc0, 0
	s_cselect_b32 s20, s20, s22
	s_cselect_b32 s6, s21, s6
	s_cselect_b32 s21, s22, s23
	s_add_i32 s24, s24, s17
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s24, 31
	s_cselect_b32 s17, 0xffffffe0, 0
	s_cselect_b32 s22, s20, s6
	s_cselect_b32 s6, s6, s21
	s_cselect_b32 s20, s26, s20
	s_cselect_b32 s21, s18, s26
	s_cselect_b32 s18, s19, s18
	s_add_i32 s17, s17, s24
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s17, 31
	s_cselect_b32 s19, 0xffffffe0, 0
	s_cselect_b32 s6, s22, s6
	s_cselect_b32 s22, s20, s22
	s_cselect_b32 s20, s21, s20
	s_cselect_b32 s18, s18, s21
	s_add_i32 s19, s19, s17
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s17, 32, s19
	s_cmp_eq_u32 s19, 0
	v_mov_b32_e32 v8, s17
	s_cselect_b32 s19, -1, 0
	v_alignbit_b32 v13, s6, s22, v8
	v_alignbit_b32 v14, s22, s20, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_readfirstlane_b32 s17, v13
	v_cndmask_b32_e64 v13, v14, s22, s19
	s_delay_alu instid0(VALU_DEP_2)
	s_cselect_b32 s6, s6, s17
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v14, s6, v13, 30
	s_bfe_u32 s17, s6, 0x1001d
	s_delay_alu instid0(SALU_CYCLE_1)
	s_sub_i32 s21, 0, s17
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_xor_b32_e32 v14, s21, v14
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v15, v14
	v_min_u32_e32 v15, 32, v15
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_lshlrev_b32_e32 v17, 23, v15
	v_alignbit_b32 v8, s20, s18, v8
	v_sub_nc_u32_e32 v16, 31, v15
	v_cndmask_b32_e64 v8, v8, s20, s19
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v13, v13, v8, 30
	v_alignbit_b32 v8, v8, s18, 30
	s_lshr_b32 s18, s6, 29
	s_lshl_b32 s18, s18, 31
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_xor_b32_e32 v13, s21, v13
	v_xor_b32_e32 v8, s21, v8
	s_or_b32 s19, s18, 0.5
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_sub_nc_u32_e32 v17, s19, v17
	v_alignbit_b32 v14, v14, v13, v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v8, v13, v8, v16
	v_alignbit_b32 v13, v14, v8, 9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v16, v13
	v_min_u32_e32 v16, 32, v16
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v18, 31, v16
	v_alignbit_b32 v8, v13, v8, v18
	v_lshrrev_b32_e32 v13, 9, v14
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshrrev_b32_e32 v8, 9, v8
	v_or_b32_e32 v13, v13, v17
	v_add_nc_u32_e32 v15, v16, v15
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b32_e32 v14, 23, v15
	v_sub_nc_u32_e32 v8, v8, v14
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v14, 0x3fc90fda, v13
	v_add_nc_u32_e32 v8, 0x33000000, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v15, 0x3fc90fda, v13, -v14
	v_or_b32_e32 v8, s18, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	v_fmamk_f32 v13, v13, 0x33a22168, v15
	s_lshr_b32 s18, s6, 30
	s_mov_b32 s6, 0
	s_add_i32 s17, s17, s18
	v_fmac_f32_e32 v13, 0x3fc90fda, v8
	s_delay_alu instid0(VALU_DEP_1)
	v_add_f32_e32 v13, v14, v13
	s_branch .LBB0_8
.LBB0_7:
	s_mov_b32 s6, -1
                                        ; implicit-def: $sgpr17
                                        ; implicit-def: $vgpr13
.LBB0_8:                                ; %Flow687
	v_mov_b32_e32 v8, s17
	s_and_not1_b32 vcc_lo, exec_lo, s6
	s_cbranch_vccnz .LBB0_10
; %bb.9:
	v_rndne_f32_e32 v8, v12
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fma_f32 v12, 0xbfc90fda, v8, |v7|
	v_fmamk_f32 v12, v8, 0xb3a22168, v12
	s_delay_alu instid0(VALU_DEP_1)
	v_fmamk_f32 v13, v8, 0xa7c234c4, v12
	v_cvt_i32_f32_e32 v8, v8
.LBB0_10:                               ; %_ZL3sinf.exit
	v_mul_f32_e32 v11, s7, v11
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_cmp_ngt_f32_e64 s7, 0x48000000, |v11|
	v_readfirstlane_b32 s6, v11
	s_and_b32 vcc_lo, exec_lo, s7
	s_delay_alu instid0(VALU_DEP_1)
	s_bitset0_b32 s6, 31
	s_cbranch_vccz .LBB0_12
; %bb.11:
	s_and_b32 s17, s6, 0x7fffff
	s_lshr_b32 s18, s6, 23
	s_bitset1_b32 s17, 23
	s_addk_i32 s18, 0xff88
	s_mul_hi_u32 s19, s17, 0xfe5163ab
	s_mul_i32 s20, s17, 0x3c439041
	s_mul_hi_u32 s21, s17, 0x3c439041
	s_add_u32 s19, s19, s20
	s_addc_u32 s20, 0, s21
	s_mul_i32 s21, s17, 0xdb629599
	s_mul_hi_u32 s22, s17, 0xdb629599
	s_add_u32 s20, s20, s21
	s_addc_u32 s21, 0, s22
	s_mul_i32 s22, s17, 0xf534ddc0
	s_mul_hi_u32 s23, s17, 0xf534ddc0
	s_add_u32 s21, s21, s22
	s_addc_u32 s22, 0, s23
	s_mul_i32 s23, s17, 0xfc2757d1
	s_mul_hi_u32 s24, s17, 0xfc2757d1
	s_add_u32 s22, s22, s23
	s_addc_u32 s23, 0, s24
	s_mul_i32 s24, s17, 0x4e441529
	s_mul_hi_u32 s25, s17, 0x4e441529
	s_add_u32 s23, s23, s24
	s_addc_u32 s24, 0, s25
	s_cmp_gt_u32 s18, 63
	s_mul_i32 s25, s17, 0xfe5163ab
	s_mul_hi_u32 s26, s17, 0xa2f9836e
	s_mul_i32 s17, s17, 0xa2f9836e
	s_cselect_b32 s27, s20, s22
	s_cselect_b32 s19, s19, s21
	s_cselect_b32 s20, s25, s20
	s_add_u32 s17, s24, s17
	s_addc_u32 s24, 0, s26
	s_cmp_gt_u32 s18, 63
	s_cselect_b32 s25, 0xffffffc0, 0
	s_cselect_b32 s21, s21, s23
	s_cselect_b32 s17, s22, s17
	s_cselect_b32 s22, s23, s24
	s_add_i32 s25, s25, s18
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s25, 31
	s_cselect_b32 s18, 0xffffffe0, 0
	s_cselect_b32 s23, s21, s17
	s_cselect_b32 s17, s17, s22
	s_cselect_b32 s21, s27, s21
	s_cselect_b32 s22, s19, s27
	s_cselect_b32 s19, s20, s19
	s_add_i32 s18, s18, s25
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s18, 31
	s_cselect_b32 s20, 0xffffffe0, 0
	s_cselect_b32 s17, s23, s17
	s_cselect_b32 s23, s21, s23
	s_cselect_b32 s21, s22, s21
	s_cselect_b32 s19, s19, s22
	s_add_i32 s20, s20, s18
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s18, 32, s20
	s_cmp_eq_u32 s20, 0
	v_mov_b32_e32 v12, s18
	s_cselect_b32 s20, -1, 0
	v_alignbit_b32 v14, s17, s23, v12
	v_alignbit_b32 v15, s23, s21, v12
	v_alignbit_b32 v12, s21, s19, v12
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_readfirstlane_b32 s18, v14
	v_cndmask_b32_e64 v14, v15, s23, s20
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_cndmask_b32_e64 v12, v12, s21, s20
	s_cselect_b32 s17, s17, s18
	s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v15, s17, v14, 30
	s_bfe_u32 s18, s17, 0x1001d
	s_delay_alu instid0(VALU_DEP_2)
	v_alignbit_b32 v14, v14, v12, 30
	s_sub_i32 s22, 0, s18
	v_alignbit_b32 v12, v12, s19, 30
	v_xor_b32_e32 v15, s22, v15
	s_lshr_b32 s19, s17, 29
	v_xor_b32_e32 v14, s22, v14
	s_lshl_b32 s19, s19, 31
	v_xor_b32_e32 v12, s22, v12
	v_clz_i32_u32_e32 v16, v15
	s_or_b32 s20, s19, 0.5
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v16, 32, v16
	v_sub_nc_u32_e32 v17, 31, v16
	v_lshlrev_b32_e32 v18, 23, v16
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_alignbit_b32 v15, v15, v14, v17
	v_alignbit_b32 v12, v14, v12, v17
	v_sub_nc_u32_e32 v18, s20, v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v14, v15, v12, 9
	v_clz_i32_u32_e32 v17, v14
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v17, 32, v17
	v_sub_nc_u32_e32 v19, 31, v17
	v_add_nc_u32_e32 v16, v17, v16
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_alignbit_b32 v12, v14, v12, v19
	v_lshrrev_b32_e32 v14, 9, v15
	v_lshlrev_b32_e32 v15, 23, v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_lshrrev_b32_e32 v12, 9, v12
	v_or_b32_e32 v14, v14, v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v12, v12, v15
	v_mul_f32_e32 v15, 0x3fc90fda, v14
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v12, 0x33000000, v12
	v_fma_f32 v16, 0x3fc90fda, v14, -v15
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_or_b32_e32 v12, s19, v12
	v_fmamk_f32 v14, v14, 0x33a22168, v16
	s_lshr_b32 s19, s17, 30
	s_mov_b32 s17, 0
	s_add_i32 s18, s18, s19
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmac_f32_e32 v14, 0x3fc90fda, v12
	v_add_f32_e32 v12, v15, v14
	s_branch .LBB0_13
.LBB0_12:
	s_mov_b32 s17, -1
                                        ; implicit-def: $sgpr18
                                        ; implicit-def: $vgpr12
.LBB0_13:                               ; %Flow686
	v_mov_b32_e32 v14, s18
	v_mul_f32_e64 v17, 0x3f22f983, |v11|
	s_and_not1_b32 vcc_lo, exec_lo, s17
	s_cbranch_vccnz .LBB0_15
; %bb.14:
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_rndne_f32_e32 v14, v17
	v_fma_f32 v12, 0xbfc90fda, v14, |v11|
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmamk_f32 v12, v14, 0xb3a22168, v12
	v_fmamk_f32 v12, v14, 0xa7c234c4, v12
	v_cvt_i32_f32_e32 v14, v14
.LBB0_15:                               ; %_ZL3cosf.exit584
	s_and_b32 vcc_lo, exec_lo, s7
	s_cbranch_vccz .LBB0_17
; %bb.16:
	s_and_b32 s7, s6, 0x7fffff
	s_lshr_b32 s17, s6, 23
	s_bitset1_b32 s7, 23
	s_addk_i32 s17, 0xff88
	s_mul_hi_u32 s18, s7, 0xfe5163ab
	s_mul_i32 s19, s7, 0x3c439041
	s_mul_hi_u32 s20, s7, 0x3c439041
	s_add_u32 s18, s18, s19
	s_addc_u32 s19, 0, s20
	s_mul_i32 s20, s7, 0xdb629599
	s_mul_hi_u32 s21, s7, 0xdb629599
	s_add_u32 s19, s19, s20
	s_addc_u32 s20, 0, s21
	s_mul_i32 s21, s7, 0xf534ddc0
	s_mul_hi_u32 s22, s7, 0xf534ddc0
	s_add_u32 s20, s20, s21
	s_addc_u32 s21, 0, s22
	s_mul_i32 s22, s7, 0xfc2757d1
	s_mul_hi_u32 s23, s7, 0xfc2757d1
	s_add_u32 s21, s21, s22
	s_addc_u32 s22, 0, s23
	s_mul_i32 s23, s7, 0x4e441529
	s_mul_hi_u32 s24, s7, 0x4e441529
	s_add_u32 s22, s22, s23
	s_addc_u32 s23, 0, s24
	s_cmp_gt_u32 s17, 63
	s_mul_i32 s24, s7, 0xfe5163ab
	s_mul_hi_u32 s25, s7, 0xa2f9836e
	s_mul_i32 s7, s7, 0xa2f9836e
	s_cselect_b32 s26, s19, s21
	s_cselect_b32 s18, s18, s20
	s_cselect_b32 s19, s24, s19
	s_add_u32 s7, s23, s7
	s_addc_u32 s23, 0, s25
	s_cmp_gt_u32 s17, 63
	s_cselect_b32 s24, 0xffffffc0, 0
	s_cselect_b32 s20, s20, s22
	s_cselect_b32 s7, s21, s7
	s_cselect_b32 s21, s22, s23
	s_add_i32 s24, s24, s17
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s24, 31
	s_cselect_b32 s17, 0xffffffe0, 0
	s_cselect_b32 s22, s20, s7
	s_cselect_b32 s7, s7, s21
	s_cselect_b32 s20, s26, s20
	s_cselect_b32 s21, s18, s26
	s_cselect_b32 s18, s19, s18
	s_add_i32 s17, s17, s24
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s17, 31
	s_cselect_b32 s19, 0xffffffe0, 0
	s_cselect_b32 s7, s22, s7
	s_cselect_b32 s22, s20, s22
	s_cselect_b32 s20, s21, s20
	s_cselect_b32 s18, s18, s21
	s_add_i32 s19, s19, s17
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s17, 32, s19
	s_cmp_eq_u32 s19, 0
	v_mov_b32_e32 v15, s17
	s_cselect_b32 s19, -1, 0
	v_alignbit_b32 v16, s7, s22, v15
	v_alignbit_b32 v18, s22, s20, v15
	v_alignbit_b32 v15, s20, s18, v15
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_readfirstlane_b32 s17, v16
	v_cndmask_b32_e64 v16, v18, s22, s19
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_cndmask_b32_e64 v15, v15, s20, s19
	s_cselect_b32 s7, s7, s17
	s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v18, s7, v16, 30
	s_bfe_u32 s17, s7, 0x1001d
	s_delay_alu instid0(VALU_DEP_2)
	v_alignbit_b32 v16, v16, v15, 30
	s_sub_i32 s21, 0, s17
	v_alignbit_b32 v15, v15, s18, 30
	v_xor_b32_e32 v18, s21, v18
	s_lshr_b32 s18, s7, 29
	v_xor_b32_e32 v16, s21, v16
	s_lshl_b32 s18, s18, 31
	v_xor_b32_e32 v15, s21, v15
	v_clz_i32_u32_e32 v19, v18
	s_or_b32 s19, s18, 0.5
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v19, 32, v19
	v_sub_nc_u32_e32 v20, 31, v19
	v_lshlrev_b32_e32 v21, 23, v19
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_alignbit_b32 v18, v18, v16, v20
	v_alignbit_b32 v15, v16, v15, v20
	v_sub_nc_u32_e32 v21, s19, v21
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v16, v18, v15, 9
	v_clz_i32_u32_e32 v20, v16
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v20, 32, v20
	v_sub_nc_u32_e32 v22, 31, v20
	v_add_nc_u32_e32 v19, v20, v19
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_alignbit_b32 v15, v16, v15, v22
	v_lshrrev_b32_e32 v16, 9, v18
	v_lshlrev_b32_e32 v18, 23, v19
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_lshrrev_b32_e32 v15, 9, v15
	v_or_b32_e32 v16, v16, v21
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v15, v15, v18
	v_mul_f32_e32 v18, 0x3fc90fda, v16
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v15, 0x33000000, v15
	v_fma_f32 v19, 0x3fc90fda, v16, -v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_or_b32_e32 v15, s18, v15
	v_fmamk_f32 v16, v16, 0x33a22168, v19
	s_lshr_b32 s18, s7, 30
	s_mov_b32 s7, 0
	s_add_i32 s17, s17, s18
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmac_f32_e32 v16, 0x3fc90fda, v15
	v_add_f32_e32 v15, v18, v16
	s_branch .LBB0_18
.LBB0_17:
	s_mov_b32 s7, -1
                                        ; implicit-def: $sgpr17
                                        ; implicit-def: $vgpr15
.LBB0_18:                               ; %Flow
	v_mov_b32_e32 v16, s17
	s_and_not1_b32 vcc_lo, exec_lo, s7
	s_cbranch_vccnz .LBB0_20
; %bb.19:
	v_rndne_f32_e32 v16, v17
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fma_f32 v15, 0xbfc90fda, v16, |v11|
	v_fmamk_f32 v15, v16, 0xb3a22168, v15
	s_delay_alu instid0(VALU_DEP_1)
	v_fmamk_f32 v15, v16, 0xa7c234c4, v15
	v_cvt_i32_f32_e32 v16, v16
.LBB0_20:                               ; %_ZL3sinf.exit592
	v_dual_mul_f32 v21, v9, v9 :: v_dual_lshlrev_b32 v20, 30, v8
	s_mov_b32 s7, 0xb94c1982
	s_mov_b32 s17, 0x37d75334
	v_dual_mul_f32 v17, v13, v13 :: v_dual_and_b32 v22, 1, v8
	s_delay_alu instid0(VALU_DEP_2)
	v_fmaak_f32 v8, s7, v21, 0x3c0881c4
	v_mad_u32_u24 v24, v3, 56, v2
	v_fmaak_f32 v23, s17, v21, 0xbab64f3b
	v_xor_b32_e32 v27, s2, v7
	v_cmp_eq_u32_e32 vcc_lo, 0, v22
	v_fmaak_f32 v25, v21, v8, 0xbe2aaa9d
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_dual_fmaak_f32 v23, v21, v23, 0x3d2aabf7 :: v_dual_lshlrev_b32 v8, 3, v24
	v_cmp_gt_u32_e64 s2, 13, v3
	v_mul_f32_e32 v24, v21, v25
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmaak_f32 v23, v21, v23, 0xbf000004
	v_fma_f32 v21, v21, v23, 1.0
	v_dual_fmaak_f32 v18, s7, v17, 0x3c0881c4 :: v_dual_and_b32 v23, 1, v10
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_dual_fmac_f32 v9, v9, v24 :: v_dual_lshlrev_b32 v10, 30, v10
	v_fmaak_f32 v18, v17, v18, 0xbe2aaa9d
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_fmaak_f32 v19, s17, v17, 0xbab64f3b :: v_dual_mul_f32 v18, v17, v18
	v_fmaak_f32 v19, v17, v19, 0x3d2aabf7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fmac_f32_e32 v13, v13, v18
	v_fmaak_f32 v19, v17, v19, 0xbf000004
	s_delay_alu instid0(VALU_DEP_1)
	v_fma_f32 v25, v17, v19, 1.0
	v_and_b32_e32 v26, 0x80000000, v20
	ds_load_2addr_b64 v[17:20], v8 offset1:28
	v_dual_cndmask_b32 v13, v25, v13 :: v_dual_and_b32 v10, 0x80000000, v10
	v_xor_b32_e32 v22, v27, v26
	v_cmp_eq_u32_e32 vcc_lo, 0, v23
	v_mul_f32_e32 v23, v15, v15
	v_cndmask_b32_e64 v9, -v9, v21, vcc_lo
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_xor_b32_e32 v21, v22, v13
	v_cmp_class_f32_e64 vcc_lo, v7, 0x1f8
	v_cndmask_b32_e32 v7, 0x7fc00000, v21, vcc_lo
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v24, s8, v17 :: v_dual_mul_f32 v21, s9, v20
	v_xor_b32_e32 v9, v10, v9
	v_mul_f32_e32 v22, s8, v20
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v24, v18, s9, -v24
	v_cndmask_b32_e32 v9, 0x7fc00000, v9, vcc_lo
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v22, v19, s9, -v22
	v_dual_mul_f32 v24, v7, v24 :: v_dual_fmac_f32 v21, s8, v19
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fmac_f32_e32 v24, v9, v19
	v_mul_f32_e32 v26, v7, v21
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_dual_fmaak_f32 v10, s7, v23, 0x3c0881c4 :: v_dual_mul_f32 v21, v7, v22
	v_fmac_f32_e32 v26, v9, v17
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_dual_mul_f32 v25, s9, v17 :: v_dual_fmaak_f32 v10, v23, v10, 0xbe2aaa9d
	v_and_b32_e32 v13, 0x7fffffff, v11
	v_fma_f32 v22, -v18, s8, -v25
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
	v_dual_mul_f32 v10, v23, v10 :: v_dual_mul_f32 v25, v9, v20
	v_fmaak_f32 v20, s17, v23, 0xbab64f3b
	v_fma_f32 v18, v9, v18, -v21
	v_fmac_f32_e32 v15, v15, v10
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_dual_fmac_f32 v25, v7, v22 :: v_dual_add_nc_u32 v10, 0xe0, v8
	v_fmaak_f32 v17, v23, v20, 0x3d2aabf7
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_mul_f32_e32 v19, v7, v18
	v_mul_f32_e32 v20, v7, v26
	v_mul_f32_e32 v21, v7, v25
	v_mul_f32_e32 v22, v7, v24
	v_fmaak_f32 v17, v23, v17, 0xbf000004
	v_fmac_f32_e32 v19, v9, v26
	v_fma_f32 v20, v9, v18, -v20
	v_fmac_f32_e32 v21, v9, v24
	v_fma_f32 v22, v9, v25, -v22
	v_fma_f32 v18, v23, v17, 1.0
	ds_store_2addr_b64 v8, v[19:20], v[21:22] offset1:28
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_and_saveexec_b32 s18, s2
	s_cbranch_execz .LBB0_22
; %bb.21:
	ds_load_b64 v[19:20], v8 offset:448
	ds_load_b64 v[21:22], v10
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v17, s8, v20 :: v_dual_mul_f32 v24, s8, v21
	v_mul_f32_e32 v25, s9, v21
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v17, v19, s9, -v17
	v_fma_f32 v24, v22, s9, -v24
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
	v_fma_f32 v25, -v22, s8, -v25
	v_mul_f32_e32 v23, s9, v20
	v_mul_f32_e32 v20, v9, v20
	v_mul_f32_e32 v24, v7, v24
	v_mul_f32_e32 v17, v7, v17
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_dual_fmac_f32 v20, v7, v25 :: v_dual_fmac_f32 v23, s8, v19
	v_fmac_f32_e32 v24, v9, v19
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v17, v9, v22, -v17
	v_mul_f32_e32 v19, v7, v20
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_mul_f32_e32 v23, v7, v23
	v_mul_f32_e32 v25, v7, v24
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fmac_f32_e32 v19, v9, v24
	v_fmac_f32_e32 v23, v9, v21
	v_mul_f32_e32 v21, v7, v17
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v20, v9, v20, -v25
	v_mul_f32_e32 v22, v7, v23
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fmac_f32_e32 v21, v9, v23
	v_fma_f32 v22, v9, v17, -v22
	ds_store_b64 v10, v[21:22]
	ds_store_b64 v8, v[19:20] offset:448
.LBB0_22:
	s_or_b32 exec_lo, exec_lo, s18
	v_mul_u32_u24_e32 v17, 28, v2
	v_dual_mul_f32 v23, v12, v12 :: v_dual_lshlrev_b32 v28, 30, v14
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	ds_load_b64 v[19:20], v4
	v_add_lshl_u32 v24, v17, v5, 3
	v_fmaak_f32 v25, s7, v23, 0x3c0881c4
	v_dual_fmaak_f32 v26, s17, v23, 0xbab64f3b :: v_dual_and_b32 v27, 1, v16
	v_lshlrev_b32_e32 v16, 30, v16
	ds_load_b64 v[21:22], v24 offset:8
	v_dual_fmaak_f32 v25, v23, v25, 0xbe2aaa9d :: v_dual_and_b32 v14, 1, v14
	v_xor_b32_e32 v11, s6, v11
	v_and_b32_e32 v16, 0x80000000, v16
	v_cmp_eq_u32_e32 vcc_lo, 0, v27
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_mul_f32_e32 v25, v23, v25
	v_fmaak_f32 v26, v23, v26, 0x3d2aabf7
	v_xor_b32_e32 v11, v11, v16
	v_cndmask_b32_e32 v15, v18, v15, vcc_lo
	v_cmp_eq_u32_e32 vcc_lo, 0, v14
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fmaak_f32 v26, v23, v26, 0xbf000004
	v_xor_b32_e32 v11, v11, v15
	s_waitcnt lgkmcnt(1)
	v_dual_mul_f32 v15, s10, v19 :: v_dual_fmac_f32 v12, v12, v25
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fma_f32 v16, v23, v26, 1.0
	v_cndmask_b32_e64 v12, -v12, v16, vcc_lo
	v_cmp_lg_f32_e32 vcc_lo, 0x7f800000, v13
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_1)
	v_fma_f32 v13, v20, s11, -v15
	v_cndmask_b32_e32 v11, 0x7fc00000, v11, vcc_lo
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v14, s11, v22 :: v_dual_mul_f32 v13, v11, v13
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmac_f32_e32 v14, s10, v21
	v_dual_mul_f32 v23, v11, v14 :: v_dual_and_b32 v18, 0x80000000, v28
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_xor_b32_e32 v12, v18, v12
	v_cndmask_b32_e32 v12, 0x7fc00000, v12, vcc_lo
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_mul_f32 v16, s10, v22 :: v_dual_fmac_f32 v13, v12, v21
	v_fma_f32 v15, v21, s11, -v16
	v_mul_f32_e32 v16, s11, v19
	v_fmac_f32_e32 v23, v12, v19
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v14, v11, v15
	v_fma_f32 v15, -v20, s10, -v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_mul_f32 v21, v11, v23 :: v_dual_mul_f32 v16, v12, v22
	v_fmac_f32_e32 v16, v11, v15
	v_mul_f32_e32 v15, v11, v13
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v18, v11, v16
	v_fma_f32 v19, v12, v16, -v15
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_dual_fmac_f32 v18, v12, v13 :: v_dual_add_nc_u32 v13, 8, v24
	v_fma_f32 v20, v12, v20, -v14
	v_mul_f32_e32 v14, v11, v20
	v_fma_f32 v15, v12, v20, -v21
	s_delay_alu instid0(VALU_DEP_2)
	v_fmac_f32_e32 v14, v12, v23
	ds_store_b64 v4, v[14:15]
	ds_store_b64 v24, v[18:19] offset:8
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_and_saveexec_b32 s6, s2
	s_cbranch_execz .LBB0_24
; %bb.23:
	ds_load_2addr_b64 v[18:21], v13 offset1:1
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v15, s11, v21 :: v_dual_mul_f32 v16, s10, v18
	v_mul_f32_e32 v14, s10, v21
	v_dual_mul_f32 v22, s11, v18 :: v_dual_mul_f32 v21, v12, v21
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_fmac_f32_e32 v15, s10, v20
	v_fma_f32 v16, v19, s11, -v16
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_fma_f32 v14, v20, s11, -v14
	v_fma_f32 v22, -v19, s10, -v22
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v16, v11, v16
	v_mul_f32_e32 v14, v11, v14
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_dual_mul_f32 v15, v11, v15 :: v_dual_fmac_f32 v16, v12, v20
	v_fmac_f32_e32 v21, v11, v22
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v19, v12, v19, -v14
	v_dual_fmac_f32 v15, v12, v18 :: v_dual_mul_f32 v22, v11, v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v14, v11, v21
	v_mul_f32_e32 v18, v11, v19
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v20, v11, v15
	v_fmac_f32_e32 v14, v12, v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fmac_f32_e32 v18, v12, v15
	v_fma_f32 v19, v12, v19, -v20
	v_fma_f32 v15, v12, v21, -v22
	ds_store_2addr_b64 v13, v[18:19], v[14:15] offset1:1
.LBB0_24:
	s_or_b32 exec_lo, exec_lo, s6
	s_ashr_i32 s6, s4, 31
	v_ashrrev_i32_e32 v16, 31, v6
	s_add_i32 s7, s4, s6
	s_load_b64 s[0:1], s[0:1], 0x18
	s_xor_b32 s7, s7, s6
	s_add_i32 s16, s16, s5
	v_cvt_f32_u32_e32 v14, s7
	s_sub_i32 s6, 0, s7
	v_add_nc_u32_e32 v6, v6, v16
	s_waitcnt lgkmcnt(0)
	s_barrier
	v_rcp_iflag_f32_e32 v14, v14
	buffer_gl0_inv
	v_xor_b32_e32 v6, v6, v16
	v_mul_f32_e32 v14, 0x4f7ffffe, v14
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_cvt_u32_f32_e32 v14, v14
	v_mul_lo_u32 v15, s6, v14
	s_ashr_i32 s6, s5, 31
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_add_i32 s17, s5, s6
	s_xor_b32 s6, s17, s6
	s_mov_b32 s17, 0
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mul_hi_u32 v15, v14, v15
	v_add_nc_u32_e32 v14, v14, v15
	v_cvt_f32_u32_e32 v15, s6
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mul_hi_u32 v14, v6, v14
	v_mul_lo_u32 v14, v14, s7
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_sub_nc_u32_e32 v6, v6, v14
	v_rcp_iflag_f32_e32 v14, v15
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_subrev_nc_u32_e32 v15, s7, v6
	v_cmp_le_u32_e32 vcc_lo, s7, v6
	v_cndmask_b32_e32 v6, v6, v15, vcc_lo
	s_waitcnt_depctr 0xfff
	v_mul_f32_e32 v14, 0x4f7ffffe, v14
	v_subrev_nc_u32_e32 v15, s7, v6
	v_cmp_le_u32_e32 vcc_lo, s7, v6
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_cvt_u32_f32_e32 v14, v14
	s_sub_i32 s7, 0, s6
	v_cndmask_b32_e32 v6, v6, v15, vcc_lo
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_mul_lo_u32 v15, s7, v14
	s_mov_b32 s7, -1
	v_xor_b32_e32 v6, v6, v16
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_hi_u32 v15, v14, v15
	v_sub_nc_u32_e32 v6, v6, v16
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_lo_u32 v6, v6, s5
	v_add_nc_u32_e32 v14, v14, v15
.LBB0_25:                               ; =>This Inner Loop Header: Depth=1
	v_or_b32_e32 v18, s17, v5
	v_cndmask_b32_e64 v20, 0, 1, s7
	s_mov_b32 s7, 0
	s_mov_b32 s17, 1
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v15, s16, v18
	v_add_lshl_u32 v22, v18, v17, 3
	v_ashrrev_i32_e32 v16, 31, v15
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_nc_u32_e32 v15, v15, v16
	v_xor_b32_e32 v15, v15, v16
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mul_hi_u32 v19, v15, v14
	v_mul_lo_u32 v19, v19, s6
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v15, v15, v19
	v_subrev_nc_u32_e32 v19, s6, v15
	v_cmp_le_u32_e32 vcc_lo, s6, v15
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_cndmask_b32_e32 v15, v15, v19, vcc_lo
	v_subrev_nc_u32_e32 v19, s6, v15
	v_cmp_le_u32_e32 vcc_lo, s6, v15
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
	v_cndmask_b32_e32 v15, v15, v19, vcc_lo
	ds_load_b64 v[18:19], v22
	v_xor_b32_e32 v15, v15, v16
	v_sub_nc_u32_e32 v15, v15, v16
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_lshl_u32 v15, v6, v15, 1
	v_ashrrev_i32_e32 v16, 31, v15
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b64 v[15:16], 2, v[15:16]
	v_add_co_u32 v15, vcc_lo, s0, v15
	s_delay_alu instid0(VALU_DEP_2)
	v_add_co_ci_u32_e32 v16, vcc_lo, s1, v16, vcc_lo
	v_cmp_ne_u32_e32 vcc_lo, 1, v20
	global_load_b64 v[15:16], v[15:16], off
	s_and_b32 vcc_lo, exec_lo, vcc_lo
	s_waitcnt vmcnt(0) lgkmcnt(0)
	v_mul_f32_e32 v23, v19, v16
	v_mul_f32_e32 v21, v18, v16
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v20, v18, v15, -v23
	v_fmac_f32_e32 v21, v19, v15
	ds_store_b64 v22, v[20:21]
	s_cbranch_vccz .LBB0_25
; %bb.26:
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_and_saveexec_b32 s0, s2
	s_cbranch_execz .LBB0_28
; %bb.27:
	ds_load_2addr_b64 v[14:17], v13 offset1:1
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v5, s10, v17 :: v_dual_mul_f32 v18, s10, v14
	v_dual_mul_f32 v6, s11, v17 :: v_dual_mul_f32 v19, s11, v14
	v_mul_f32_e32 v17, v12, v17
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_fma_f32 v5, v16, s11, -v5
	v_fma_f32 v18, v15, s11, -v18
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_fmac_f32_e32 v6, s10, v16
	v_fma_f32 v19, -v15, s10, -v19
	v_mul_f32_e32 v18, v11, v18
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v6, v11, v6
	v_mul_f32_e32 v5, v11, v5
	v_dual_fmac_f32 v17, v11, v19 :: v_dual_fmac_f32 v18, v12, v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fmac_f32_e32 v6, v12, v14
	v_fma_f32 v15, v12, v15, -v5
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v19, v11, v18
	v_mul_f32_e32 v16, v11, v6
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v14, v11, v15
	v_mul_f32_e32 v5, v11, v17
	v_fma_f32 v15, v12, v15, -v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fmac_f32_e32 v14, v12, v6
	v_fmac_f32_e32 v5, v12, v18
	v_fma_f32 v6, v12, v17, -v19
	ds_store_2addr_b64 v13, v[14:15], v[5:6] offset1:1
.LBB0_28:
	s_or_b32 exec_lo, exec_lo, s0
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	ds_load_b64 v[5:6], v13
	ds_load_b64 v[14:15], v4
	s_waitcnt lgkmcnt(1)
	v_mul_f32_e32 v17, s11, v6
	v_mul_f32_e32 v16, s10, v6
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
	v_dual_mul_f32 v6, v12, v6 :: v_dual_fmac_f32 v17, s10, v5
	s_waitcnt lgkmcnt(0)
	v_mul_f32_e32 v18, s10, v14
	v_fma_f32 v16, v5, s11, -v16
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v17, v11, v17
	v_fma_f32 v18, v15, s11, -v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_dual_mul_f32 v16, v11, v16 :: v_dual_fmac_f32 v17, v12, v14
	v_mul_f32_e32 v18, v11, v18
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_mul_f32 v19, s11, v14 :: v_dual_fmac_f32 v18, v12, v5
	v_fma_f32 v19, -v15, s10, -v19
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_fma_f32 v15, v12, v15, -v16
	v_mul_f32_e32 v16, v11, v17
	v_fmac_f32_e32 v6, v11, v19
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v14, v11, v15
	v_fma_f32 v15, v12, v15, -v16
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_dual_mul_f32 v5, v11, v6 :: v_dual_fmac_f32 v14, v12, v17
	v_mul_f32_e32 v11, v11, v18
	v_fmac_f32_e32 v5, v12, v18
	s_delay_alu instid0(VALU_DEP_2)
	v_fma_f32 v6, v12, v6, -v11
	ds_store_b64 v4, v[14:15]
	ds_store_b64 v13, v[5:6]
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_and_saveexec_b32 s0, s2
	s_cbranch_execz .LBB0_30
; %bb.29:
	ds_load_b64 v[5:6], v8 offset:448
	ds_load_b64 v[11:12], v10
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v13, s8, v6 :: v_dual_mul_f32 v16, s9, v11
	v_dual_mul_f32 v14, s9, v6 :: v_dual_mul_f32 v15, s8, v11
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_fma_f32 v13, v5, s9, -v13
	v_mul_f32_e32 v6, v9, v6
	v_fma_f32 v16, -v12, s8, -v16
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
	v_fma_f32 v15, v12, s9, -v15
	v_fmac_f32_e32 v14, s8, v5
	v_mul_f32_e32 v13, v7, v13
	v_mul_f32_e32 v15, v7, v15
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v14, v7, v14
	v_fma_f32 v12, v9, v12, -v13
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_dual_fmac_f32 v15, v9, v5 :: v_dual_fmac_f32 v6, v7, v16
	v_dual_fmac_f32 v14, v9, v11 :: v_dual_mul_f32 v11, v7, v12
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v5, v7, v6
	v_mul_f32_e32 v13, v7, v14
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_dual_mul_f32 v16, v7, v15 :: v_dual_fmac_f32 v11, v9, v14
	v_fmac_f32_e32 v5, v9, v15
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v12, v9, v12, -v13
	v_fma_f32 v6, v9, v6, -v16
	ds_store_b64 v10, v[11:12]
	ds_store_b64 v8, v[5:6] offset:448
.LBB0_30:
	s_or_b32 exec_lo, exec_lo, s0
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	ds_load_b64 v[5:6], v10
	ds_load_b64 v[11:12], v8
	v_add_nc_u32_e32 v2, -2, v2
	v_add_nc_u32_e32 v3, -1, v3
	v_cmp_gt_u32_e32 vcc_lo, s4, v0
	s_add_i32 s0, s5, -1
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
	v_cmp_gt_u32_e64 s0, s0, v1
	s_waitcnt lgkmcnt(0)
	v_dual_mul_f32 v14, s9, v6 :: v_dual_mul_f32 v15, s8, v11
	v_dual_mul_f32 v13, s8, v6 :: v_dual_mul_f32 v16, s9, v11
	v_dual_mul_f32 v17, v9, v6 :: v_dual_fmac_f32 v14, s8, v5
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v15, v12, s9, -v15
	v_fma_f32 v13, v5, s9, -v13
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_4) | instid1(VALU_DEP_3)
	v_fma_f32 v6, -v12, s8, -v16
	v_cmp_gt_u32_e64 s1, 24, v2
	v_cmp_gt_u32_e64 s2, 12, v3
	v_mul_f32_e32 v15, v7, v15
	v_mul_f32_e32 v14, v7, v14
	s_and_b32 s1, s1, s2
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fmac_f32_e32 v15, v9, v5
	v_dual_mul_f32 v13, v7, v13 :: v_dual_fmac_f32 v14, v9, v11
	v_fmac_f32_e32 v17, v7, v6
	s_and_b32 s1, s1, vcc_lo
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v6, v9, v12, -v13
	v_mul_f32_e32 v3, v7, v14
	s_and_b32 s0, s1, s0
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_4)
	v_mul_f32_e32 v5, v7, v6
	v_mul_f32_e32 v2, v7, v17
	v_mul_f32_e32 v7, v7, v15
	v_fma_f32 v6, v9, v6, -v3
	v_fmac_f32_e32 v5, v9, v14
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_fmac_f32_e32 v2, v9, v15
	v_fma_f32 v3, v9, v17, -v7
	ds_store_b64 v8, v[5:6]
	ds_store_b64 v10, v[2:3]
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_and_saveexec_b32 s1, s0
	s_cbranch_execz .LBB0_32
; %bb.31:                               ; %.sink.split
	v_mul_lo_u32 v0, v0, s5
	s_and_b32 s0, s3, exec_lo
	s_cselect_b32 s1, s14, s12
	s_cselect_b32 s0, s15, s13
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
	v_add_lshl_u32 v5, v0, v1, 1
	ds_load_b128 v[0:3], v4
	v_ashrrev_i32_e32 v6, 31, v5
	v_lshlrev_b64 v[4:5], 2, v[5:6]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_co_u32 v4, vcc_lo, s1, v4
	v_add_co_ci_u32_e32 v5, vcc_lo, s0, v5, vcc_lo
	s_waitcnt lgkmcnt(0)
	global_store_b128 v[4:5], v[0:3], off
.LBB0_32:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z8H2d_stepPfS_ifS_iiiiffffff
		.amdhsa_group_segment_fixed_size 6272
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 72
		.amdhsa_user_sgpr_count 14
		.amdhsa_user_sgpr_dispatch_ptr 0
		.amdhsa_user_sgpr_queue_ptr 0
		.amdhsa_user_sgpr_kernarg_segment_ptr 1
		.amdhsa_user_sgpr_dispatch_id 0
		.amdhsa_user_sgpr_private_segment_size 0
		.amdhsa_wavefront_size32 1
		.amdhsa_uses_dynamic_stack 0
		.amdhsa_enable_private_segment 0
		.amdhsa_system_sgpr_workgroup_id_x 1
		.amdhsa_system_sgpr_workgroup_id_y 1
		.amdhsa_system_sgpr_workgroup_id_z 0
		.amdhsa_system_sgpr_workgroup_info 0
		.amdhsa_system_vgpr_workitem_id 1
		.amdhsa_next_free_vgpr 29
		.amdhsa_next_free_sgpr 29
		.amdhsa_float_round_mode_32 0
		.amdhsa_float_round_mode_16_64 0
		.amdhsa_float_denorm_mode_32 3
		.amdhsa_float_denorm_mode_16_64 3
		.amdhsa_dx10_clamp 1
		.amdhsa_ieee_mode 1
		.amdhsa_fp16_overflow 0
		.amdhsa_workgroup_processor_mode 1
		.amdhsa_memory_ordered 1
		.amdhsa_forward_progress 0
		.amdhsa_shared_vgpr_count 0
		.amdhsa_exception_fp_ieee_invalid_op 0
		.amdhsa_exception_fp_denorm_src 0
		.amdhsa_exception_fp_ieee_div_zero 0
		.amdhsa_exception_fp_ieee_overflow 0
		.amdhsa_exception_fp_ieee_underflow 0
		.amdhsa_exception_fp_ieee_inexact 0
		.amdhsa_exception_int_div_zero 0
	.end_amdhsa_kernel
	.text
.Lfunc_end0:
	.size	_Z8H2d_stepPfS_ifS_iiiiffffff, .Lfunc_end0-_Z8H2d_stepPfS_ifS_iiiiffffff
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 6320
; NumSgprs: 31
; NumVgprs: 29
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 6272 bytes/workgroup (compile time only)
; SGPRBlocks: 3
; VGPRBlocks: 3
; NumSGPRsForWavesPerEU: 31
; NumVGPRsForWavesPerEU: 29
; Occupancy: 16
; WaveLimiterHint : 0
; COMPUTE_PGM_RSRC2:SCRATCH_EN: 0
; COMPUTE_PGM_RSRC2:USER_SGPR: 14
; COMPUTE_PGM_RSRC2:TRAP_HANDLER: 0
; COMPUTE_PGM_RSRC2:TGID_X_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Y_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Z_EN: 0
; COMPUTE_PGM_RSRC2:TIDIG_COMP_CNT: 1
	.text
	.protected	_Z5H2d_xPffiiiifff      ; -- Begin function _Z5H2d_xPffiiiifff
	.globl	_Z5H2d_xPffiiiifff
	.p2align	8
	.type	_Z5H2d_xPffiiiifff,@function
_Z5H2d_xPffiiiifff:                     ; @_Z5H2d_xPffiiiifff
; %bb.0:
	s_load_b256 s[4:11], s[0:1], 0x8
	s_waitcnt lgkmcnt(0)
	v_mul_f32_e64 v1, s4, s9
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_cmp_ngt_f32_e64 s2, 0x48000000, |v1|
	v_readfirstlane_b32 s3, v1
	s_and_b32 vcc_lo, exec_lo, s2
	s_delay_alu instid0(VALU_DEP_1)
	s_and_b32 s4, s3, 0x7fffffff
	s_cbranch_vccz .LBB1_2
; %bb.1:
	s_and_b32 s3, s4, 0x7fffff
	s_lshr_b32 s9, s4, 23
	s_bitset1_b32 s3, 23
	s_addk_i32 s9, 0xff88
	s_mul_hi_u32 s12, s3, 0xfe5163ab
	s_mul_i32 s13, s3, 0x3c439041
	s_mul_hi_u32 s14, s3, 0x3c439041
	s_add_u32 s12, s12, s13
	s_addc_u32 s13, 0, s14
	s_mul_i32 s14, s3, 0xdb629599
	s_mul_hi_u32 s16, s3, 0xdb629599
	s_add_u32 s13, s13, s14
	s_addc_u32 s14, 0, s16
	s_mul_i32 s16, s3, 0xf534ddc0
	s_mul_hi_u32 s17, s3, 0xf534ddc0
	s_add_u32 s14, s14, s16
	s_addc_u32 s16, 0, s17
	s_mul_i32 s17, s3, 0xfc2757d1
	s_mul_hi_u32 s18, s3, 0xfc2757d1
	s_add_u32 s16, s16, s17
	s_addc_u32 s17, 0, s18
	s_mul_i32 s18, s3, 0x4e441529
	s_mul_hi_u32 s19, s3, 0x4e441529
	s_add_u32 s17, s17, s18
	s_addc_u32 s18, 0, s19
	s_cmp_gt_u32 s9, 63
	s_mul_i32 s19, s3, 0xfe5163ab
	s_mul_hi_u32 s20, s3, 0xa2f9836e
	s_mul_i32 s3, s3, 0xa2f9836e
	s_cselect_b32 s21, s13, s16
	s_cselect_b32 s12, s12, s14
	s_cselect_b32 s13, s19, s13
	s_add_u32 s3, s18, s3
	s_addc_u32 s18, 0, s20
	s_cmp_gt_u32 s9, 63
	s_cselect_b32 s19, 0xffffffc0, 0
	s_cselect_b32 s14, s14, s17
	s_cselect_b32 s3, s16, s3
	s_cselect_b32 s16, s17, s18
	s_add_i32 s19, s19, s9
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s19, 31
	s_cselect_b32 s9, 0xffffffe0, 0
	s_cselect_b32 s17, s14, s3
	s_cselect_b32 s3, s3, s16
	s_cselect_b32 s14, s21, s14
	s_cselect_b32 s16, s12, s21
	s_cselect_b32 s12, s13, s12
	s_add_i32 s9, s9, s19
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s9, 31
	s_cselect_b32 s13, 0xffffffe0, 0
	s_cselect_b32 s3, s17, s3
	s_cselect_b32 s17, s14, s17
	s_cselect_b32 s14, s16, s14
	s_cselect_b32 s12, s12, s16
	s_add_i32 s13, s13, s9
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s9, 32, s13
	s_cmp_eq_u32 s13, 0
	v_mov_b32_e32 v2, s9
	s_cselect_b32 s13, -1, 0
	v_alignbit_b32 v3, s3, s17, v2
	v_alignbit_b32 v4, s17, s14, v2
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_readfirstlane_b32 s9, v3
	v_cndmask_b32_e64 v3, v4, s17, s13
	s_delay_alu instid0(VALU_DEP_2)
	s_cselect_b32 s3, s3, s9
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v4, s3, v3, 30
	s_bfe_u32 s9, s3, 0x1001d
	s_delay_alu instid0(SALU_CYCLE_1)
	s_sub_i32 s16, 0, s9
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_xor_b32_e32 v4, s16, v4
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v5, v4
	v_min_u32_e32 v5, 32, v5
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_lshlrev_b32_e32 v7, 23, v5
	v_alignbit_b32 v2, s14, s12, v2
	v_sub_nc_u32_e32 v6, 31, v5
	v_cndmask_b32_e64 v2, v2, s14, s13
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v3, v3, v2, 30
	v_alignbit_b32 v2, v2, s12, 30
	s_lshr_b32 s12, s3, 29
	s_lshl_b32 s12, s12, 31
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_xor_b32_e32 v3, s16, v3
	v_xor_b32_e32 v2, s16, v2
	s_or_b32 s13, s12, 0.5
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_sub_nc_u32_e32 v7, s13, v7
	v_alignbit_b32 v4, v4, v3, v6
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v2, v3, v2, v6
	v_alignbit_b32 v3, v4, v2, 9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v6, v3
	v_min_u32_e32 v6, 32, v6
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v8, 31, v6
	v_alignbit_b32 v2, v3, v2, v8
	v_lshrrev_b32_e32 v3, 9, v4
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshrrev_b32_e32 v2, 9, v2
	v_or_b32_e32 v3, v3, v7
	v_add_nc_u32_e32 v5, v6, v5
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b32_e32 v4, 23, v5
	v_sub_nc_u32_e32 v2, v2, v4
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v4, 0x3fc90fda, v3
	v_add_nc_u32_e32 v2, 0x33000000, v2
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v5, 0x3fc90fda, v3, -v4
	v_or_b32_e32 v2, s12, v2
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	v_fmamk_f32 v3, v3, 0x33a22168, v5
	s_lshr_b32 s12, s3, 30
	s_mov_b32 s3, 0
	s_add_i32 s9, s9, s12
	v_fmac_f32_e32 v3, 0x3fc90fda, v2
	s_delay_alu instid0(VALU_DEP_1)
	v_add_f32_e32 v2, v4, v3
	s_branch .LBB1_3
.LBB1_2:
	s_mov_b32 s3, -1
                                        ; implicit-def: $sgpr9
                                        ; implicit-def: $vgpr2
.LBB1_3:                                ; %Flow195
	v_mov_b32_e32 v3, s9
	v_mul_f32_e64 v4, 0x3f22f983, |v1|
	s_and_not1_b32 vcc_lo, exec_lo, s3
	s_cbranch_vccnz .LBB1_5
; %bb.4:
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_rndne_f32_e32 v3, v4
	v_fma_f32 v2, 0xbfc90fda, v3, |v1|
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmamk_f32 v2, v3, 0xb3a22168, v2
	v_fmamk_f32 v2, v3, 0xa7c234c4, v2
	v_cvt_i32_f32_e32 v3, v3
.LBB1_5:                                ; %_ZL3cosf.exit
	s_and_b32 vcc_lo, exec_lo, s2
	s_cbranch_vccz .LBB1_7
; %bb.6:
	s_and_b32 s2, s4, 0x7fffff
	s_lshr_b32 s3, s4, 23
	s_bitset1_b32 s2, 23
	s_addk_i32 s3, 0xff88
	s_mul_hi_u32 s9, s2, 0xfe5163ab
	s_mul_i32 s12, s2, 0x3c439041
	s_mul_hi_u32 s13, s2, 0x3c439041
	s_add_u32 s9, s9, s12
	s_addc_u32 s12, 0, s13
	s_mul_i32 s13, s2, 0xdb629599
	s_mul_hi_u32 s14, s2, 0xdb629599
	s_add_u32 s12, s12, s13
	s_addc_u32 s13, 0, s14
	s_mul_i32 s14, s2, 0xf534ddc0
	s_mul_hi_u32 s16, s2, 0xf534ddc0
	s_add_u32 s13, s13, s14
	s_addc_u32 s14, 0, s16
	s_mul_i32 s16, s2, 0xfc2757d1
	s_mul_hi_u32 s17, s2, 0xfc2757d1
	s_add_u32 s14, s14, s16
	s_addc_u32 s16, 0, s17
	s_mul_i32 s17, s2, 0x4e441529
	s_mul_hi_u32 s18, s2, 0x4e441529
	s_add_u32 s16, s16, s17
	s_addc_u32 s17, 0, s18
	s_cmp_gt_u32 s3, 63
	s_mul_i32 s18, s2, 0xfe5163ab
	s_mul_hi_u32 s19, s2, 0xa2f9836e
	s_mul_i32 s2, s2, 0xa2f9836e
	s_cselect_b32 s20, s12, s14
	s_cselect_b32 s9, s9, s13
	s_cselect_b32 s12, s18, s12
	s_add_u32 s2, s17, s2
	s_addc_u32 s17, 0, s19
	s_cmp_gt_u32 s3, 63
	s_cselect_b32 s18, 0xffffffc0, 0
	s_cselect_b32 s13, s13, s16
	s_cselect_b32 s2, s14, s2
	s_cselect_b32 s14, s16, s17
	s_add_i32 s18, s18, s3
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s18, 31
	s_cselect_b32 s3, 0xffffffe0, 0
	s_cselect_b32 s16, s13, s2
	s_cselect_b32 s2, s2, s14
	s_cselect_b32 s13, s20, s13
	s_cselect_b32 s14, s9, s20
	s_cselect_b32 s9, s12, s9
	s_add_i32 s3, s3, s18
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s3, 31
	s_cselect_b32 s12, 0xffffffe0, 0
	s_cselect_b32 s2, s16, s2
	s_cselect_b32 s16, s13, s16
	s_cselect_b32 s13, s14, s13
	s_cselect_b32 s9, s9, s14
	s_add_i32 s12, s12, s3
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s3, 32, s12
	s_cmp_eq_u32 s12, 0
	v_mov_b32_e32 v5, s3
	s_cselect_b32 s12, -1, 0
	v_alignbit_b32 v6, s2, s16, v5
	v_alignbit_b32 v7, s16, s13, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_readfirstlane_b32 s3, v6
	v_cndmask_b32_e64 v6, v7, s16, s12
	s_delay_alu instid0(VALU_DEP_2)
	s_cselect_b32 s2, s2, s3
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v7, s2, v6, 30
	s_bfe_u32 s3, s2, 0x1001d
	s_delay_alu instid0(SALU_CYCLE_1)
	s_sub_i32 s14, 0, s3
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_xor_b32_e32 v7, s14, v7
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v8, v7
	v_min_u32_e32 v8, 32, v8
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_lshlrev_b32_e32 v10, 23, v8
	v_alignbit_b32 v5, s13, s9, v5
	v_sub_nc_u32_e32 v9, 31, v8
	v_cndmask_b32_e64 v5, v5, s13, s12
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v6, v6, v5, 30
	v_alignbit_b32 v5, v5, s9, 30
	s_lshr_b32 s9, s2, 29
	s_lshl_b32 s9, s9, 31
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_xor_b32_e32 v6, s14, v6
	v_xor_b32_e32 v5, s14, v5
	s_or_b32 s12, s9, 0.5
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_sub_nc_u32_e32 v10, s12, v10
	v_alignbit_b32 v7, v7, v6, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v5, v6, v5, v9
	v_alignbit_b32 v6, v7, v5, 9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v9, v6
	v_min_u32_e32 v9, 32, v9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v11, 31, v9
	v_alignbit_b32 v5, v6, v5, v11
	v_lshrrev_b32_e32 v6, 9, v7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshrrev_b32_e32 v5, 9, v5
	v_or_b32_e32 v6, v6, v10
	v_add_nc_u32_e32 v8, v9, v8
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b32_e32 v7, 23, v8
	v_sub_nc_u32_e32 v5, v5, v7
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v7, 0x3fc90fda, v6
	v_add_nc_u32_e32 v5, 0x33000000, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v8, 0x3fc90fda, v6, -v7
	v_or_b32_e32 v5, s9, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	v_fmamk_f32 v6, v6, 0x33a22168, v8
	s_lshr_b32 s9, s2, 30
	s_mov_b32 s2, 0
	s_add_i32 s3, s3, s9
	v_fmac_f32_e32 v6, 0x3fc90fda, v5
	s_delay_alu instid0(VALU_DEP_1)
	v_add_f32_e32 v5, v7, v6
	s_branch .LBB1_8
.LBB1_7:
	s_mov_b32 s2, -1
                                        ; implicit-def: $sgpr3
                                        ; implicit-def: $vgpr5
.LBB1_8:                                ; %Flow194
	s_load_b32 s9, s[0:1], 0x34
	v_mov_b32_e32 v6, s3
	s_and_not1_b32 vcc_lo, exec_lo, s2
	s_cbranch_vccnz .LBB1_10
; %bb.9:
	v_rndne_f32_e32 v4, v4
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_fma_f32 v5, 0xbfc90fda, v4, |v1|
	v_cvt_i32_f32_e32 v6, v4
	v_fmamk_f32 v5, v4, 0xb3a22168, v5
	s_delay_alu instid0(VALU_DEP_1)
	v_fmamk_f32 v5, v4, 0xa7c234c4, v5
.LBB1_10:                               ; %_ZL3sinf.exit
	v_dual_mul_f32 v4, v2, v2 :: v_dual_and_b32 v7, 1, v3
	s_mov_b32 s12, 0xb94c1982
	s_mov_b32 s13, 0x37d75334
	s_load_b64 s[2:3], s[0:1], 0x0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
	v_dual_fmaak_f32 v8, s12, v4, 0x3c0881c4 :: v_dual_lshlrev_b32 v3, 30, v3
	v_dual_fmaak_f32 v9, s13, v4, 0xbab64f3b :: v_dual_mul_f32 v10, v5, v5
	s_waitcnt lgkmcnt(0)
	s_and_b32 s0, 0xffff, s9
	v_dual_fmaak_f32 v8, v4, v8, 0xbe2aaa9d :: v_dual_lshlrev_b32 v13, 30, v6
	s_mul_i32 s15, s15, s0
	v_cmp_eq_u32_e32 vcc_lo, 0, v7
	s_delay_alu instid0(VALU_DEP_2)
	v_dual_mul_f32 v8, v4, v8 :: v_dual_and_b32 v3, 0x80000000, v3
	v_fmaak_f32 v11, s12, v10, 0x3c0881c4
	v_fmaak_f32 v9, v4, v9, 0x3d2aabf7
	s_add_i32 s1, s7, -1
	s_add_i32 s7, s7, -2
	v_fmac_f32_e32 v2, v2, v8
	v_fmaak_f32 v8, v10, v11, 0xbe2aaa9d
	v_fmaak_f32 v9, v4, v9, 0xbf000004
	s_cmp_eq_u32 s5, 2
	v_cmp_class_f32_e64 s0, v1, 0x1f8
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fma_f32 v4, v4, v9, 1.0
	v_cndmask_b32_e64 v2, -v2, v4, vcc_lo
	v_mul_f32_e32 v4, v10, v8
	v_fmaak_f32 v12, s13, v10, 0xbab64f3b
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_xor_b32_e32 v2, v3, v2
	v_fmac_f32_e32 v5, v5, v4
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_dual_fmaak_f32 v9, v10, v12, 0x3d2aabf7 :: v_dual_and_b32 v4, 1, v6
	v_and_b32_e32 v6, 0x80000000, v13
	v_fmaak_f32 v7, v10, v9, 0xbf000004
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cmp_eq_u32_e32 vcc_lo, 0, v4
	v_fma_f32 v3, v10, v7, 1.0
	v_xor_b32_e32 v7, s4, v1
	s_cselect_b32 s4, -1, 0
	v_cndmask_b32_e64 v1, 0x7fc00000, v2, s0
	v_cndmask_b32_e64 v8, 0, 1, s4
	v_cndmask_b32_e32 v4, v3, v5, vcc_lo
	v_xor_b32_e32 v5, v7, v6
	v_add_nc_u32_e32 v3, s15, v0
	s_and_b32 s5, s4, exec_lo
	v_readfirstlane_b32 s9, v8
	s_cselect_b32 s5, s7, s1
	v_xor_b32_e32 v2, v5, v4
	v_cmp_gt_i32_e32 vcc_lo, s8, v3
	v_readfirstlane_b32 s7, v8
	s_cmp_gt_i32 s5, s9
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cndmask_b32_e64 v2, 0x7fc00000, v2, s0
	s_cselect_b32 s0, -1, 0
	s_and_b32 s0, vcc_lo, s0
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_saveexec_b32 s9, s0
	s_cbranch_execz .LBB1_13
; %bb.11:                               ; %.lr.ph.preheader
	v_lshlrev_b32_e32 v0, 1, v0
	s_add_i32 s0, s7, 1
	s_lshl_b32 s13, s8, 2
	s_mul_i32 s0, s8, s0
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
	s_lshl_b32 s12, s0, 1
	v_lshl_add_u32 v0, s15, 1, v0
	s_mul_i32 s0, s8, s7
	s_lshl_b32 s14, s0, 1
.LBB1_12:                               ; %.lr.ph
                                        ; =>This Inner Loop Header: Depth=1
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)
	v_add_nc_u32_e32 v4, s12, v0
	v_add_nc_u32_e32 v6, s14, v0
	v_add_nc_u32_e32 v0, s13, v0
	s_add_i32 s7, s7, 2
	s_cmp_lt_i32 s7, s5
	v_ashrrev_i32_e32 v5, 31, v4
	v_ashrrev_i32_e32 v7, 31, v6
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshlrev_b64 v[4:5], 2, v[4:5]
	v_lshlrev_b64 v[6:7], 2, v[6:7]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_co_u32 v4, s0, s2, v4
	v_add_co_ci_u32_e64 v5, s0, s3, v5, s0
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_co_u32 v6, s0, s2, v6
	v_add_co_ci_u32_e64 v7, s0, s3, v7, s0
	s_clause 0x1
	global_load_b64 v[8:9], v[4:5], off
	global_load_b64 v[10:11], v[6:7], off
	s_waitcnt vmcnt(1)
	v_mul_f32_e32 v13, s11, v9
	s_waitcnt vmcnt(0)
	v_mul_f32_e32 v15, s11, v10
	v_mul_f32_e32 v14, s10, v10
	v_mul_f32_e32 v12, s10, v9
	v_mul_f32_e32 v9, v1, v9
	v_fmac_f32_e32 v13, s10, v8
	v_fma_f32 v15, -v11, s10, -v15
	v_fma_f32 v14, v11, s11, -v14
	v_fma_f32 v12, v8, s11, -v12
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mul_f32_e32 v14, v2, v14
	v_dual_mul_f32 v13, v2, v13 :: v_dual_fmac_f32 v14, v1, v8
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_dual_mul_f32 v12, v2, v12 :: v_dual_fmac_f32 v13, v1, v10
	v_fmac_f32_e32 v9, v2, v15
	v_fma_f32 v11, v1, v11, -v12
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v12, v2, v13
	v_mul_f32_e32 v8, v2, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_mul_f32_e32 v10, v2, v11
	v_mul_f32_e32 v15, v2, v14
	v_fma_f32 v11, v1, v11, -v12
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_fmac_f32_e32 v8, v1, v14
	v_fmac_f32_e32 v10, v1, v13
	s_delay_alu instid0(VALU_DEP_4)
	v_fma_f32 v9, v1, v9, -v15
	s_clause 0x1
	global_store_b64 v[6:7], v[10:11], off
	global_store_b64 v[4:5], v[8:9], off
	s_cbranch_scc1 .LBB1_12
.LBB1_13:                               ; %Flow193
	s_or_b32 exec_lo, exec_lo, s9
	s_cmp_lg_u32 s6, 0
	s_cselect_b32 s0, -1, 0
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_and_b32 s0, s4, s0
	s_and_b32 s0, s0, vcc_lo
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_saveexec_b32 s4, s0
	s_cbranch_execz .LBB1_15
; %bb.14:
	v_lshlrev_b32_e32 v4, 1, v3
	s_mul_i32 s1, s1, s8
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_lshl_u32 v6, v3, s1, 1
	v_ashrrev_i32_e32 v5, 31, v4
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_ashrrev_i32_e32 v7, 31, v6
	v_lshlrev_b64 v[3:4], 2, v[4:5]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshlrev_b64 v[5:6], 2, v[6:7]
	v_add_co_u32 v3, vcc_lo, s2, v3
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_add_co_ci_u32_e32 v4, vcc_lo, s3, v4, vcc_lo
	v_add_co_u32 v5, vcc_lo, s2, v5
	s_delay_alu instid0(VALU_DEP_4)
	v_add_co_ci_u32_e32 v6, vcc_lo, s3, v6, vcc_lo
	s_clause 0x1
	global_load_b64 v[7:8], v[3:4], off
	global_load_b64 v[9:10], v[5:6], off
	s_waitcnt vmcnt(1)
	v_mul_f32_e32 v11, s11, v8
	s_waitcnt vmcnt(0)
	v_dual_mul_f32 v0, s10, v8 :: v_dual_mul_f32 v13, s11, v9
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_dual_mul_f32 v12, s10, v9 :: v_dual_fmac_f32 v11, s10, v7
	v_fma_f32 v0, v7, s11, -v0
	v_mul_f32_e32 v14, v1, v8
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2)
	v_fma_f32 v12, v10, s11, -v12
	v_fma_f32 v8, -v10, s10, -v13
	v_mul_f32_e32 v11, v2, v11
	v_mul_f32_e32 v0, v2, v0
	v_dual_fmac_f32 v14, v2, v8 :: v_dual_fmac_f32 v11, v1, v9
	v_mul_f32_e32 v12, v2, v12
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_fma_f32 v8, v1, v10, -v0
	v_mul_f32_e32 v0, v2, v14
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_fmac_f32 v12, v1, v7 :: v_dual_mul_f32 v7, v2, v8
	v_dual_mul_f32 v9, v2, v11 :: v_dual_fmac_f32 v0, v1, v12
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_dual_mul_f32 v2, v2, v12 :: v_dual_fmac_f32 v7, v1, v11
	v_fma_f32 v8, v1, v8, -v9
	s_delay_alu instid0(VALU_DEP_2)
	v_fma_f32 v1, v1, v14, -v2
	s_clause 0x1
	global_store_b64 v[5:6], v[7:8], off
	global_store_b64 v[3:4], v[0:1], off
.LBB1_15:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z5H2d_xPffiiiifff
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 296
		.amdhsa_user_sgpr_count 15
		.amdhsa_user_sgpr_dispatch_ptr 0
		.amdhsa_user_sgpr_queue_ptr 0
		.amdhsa_user_sgpr_kernarg_segment_ptr 1
		.amdhsa_user_sgpr_dispatch_id 0
		.amdhsa_user_sgpr_private_segment_size 0
		.amdhsa_wavefront_size32 1
		.amdhsa_uses_dynamic_stack 0
		.amdhsa_enable_private_segment 0
		.amdhsa_system_sgpr_workgroup_id_x 1
		.amdhsa_system_sgpr_workgroup_id_y 0
		.amdhsa_system_sgpr_workgroup_id_z 0
		.amdhsa_system_sgpr_workgroup_info 0
		.amdhsa_system_vgpr_workitem_id 0
		.amdhsa_next_free_vgpr 16
		.amdhsa_next_free_sgpr 22
		.amdhsa_float_round_mode_32 0
		.amdhsa_float_round_mode_16_64 0
		.amdhsa_float_denorm_mode_32 3
		.amdhsa_float_denorm_mode_16_64 3
		.amdhsa_dx10_clamp 1
		.amdhsa_ieee_mode 1
		.amdhsa_fp16_overflow 0
		.amdhsa_workgroup_processor_mode 1
		.amdhsa_memory_ordered 1
		.amdhsa_forward_progress 0
		.amdhsa_shared_vgpr_count 0
		.amdhsa_exception_fp_ieee_invalid_op 0
		.amdhsa_exception_fp_denorm_src 0
		.amdhsa_exception_fp_ieee_div_zero 0
		.amdhsa_exception_fp_ieee_overflow 0
		.amdhsa_exception_fp_ieee_underflow 0
		.amdhsa_exception_fp_ieee_inexact 0
		.amdhsa_exception_int_div_zero 0
	.end_amdhsa_kernel
	.text
.Lfunc_end1:
	.size	_Z5H2d_xPffiiiifff, .Lfunc_end1-_Z5H2d_xPffiiiifff
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 2544
; NumSgprs: 24
; NumVgprs: 16
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 1
; NumSGPRsForWavesPerEU: 24
; NumVGPRsForWavesPerEU: 16
; Occupancy: 16
; WaveLimiterHint : 0
; COMPUTE_PGM_RSRC2:SCRATCH_EN: 0
; COMPUTE_PGM_RSRC2:USER_SGPR: 15
; COMPUTE_PGM_RSRC2:TRAP_HANDLER: 0
; COMPUTE_PGM_RSRC2:TGID_X_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Y_EN: 0
; COMPUTE_PGM_RSRC2:TGID_Z_EN: 0
; COMPUTE_PGM_RSRC2:TIDIG_COMP_CNT: 0
	.text
	.protected	_Z5H2d_yPffiiiifff      ; -- Begin function _Z5H2d_yPffiiiifff
	.globl	_Z5H2d_yPffiiiifff
	.p2align	8
	.type	_Z5H2d_yPffiiiifff,@function
_Z5H2d_yPffiiiifff:                     ; @_Z5H2d_yPffiiiifff
; %bb.0:
	s_load_b256 s[4:11], s[0:1], 0x8
	s_waitcnt lgkmcnt(0)
	v_mul_f32_e64 v3, s4, s9
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_cmp_ngt_f32_e64 s2, 0x48000000, |v3|
	v_readfirstlane_b32 s3, v3
	s_and_b32 vcc_lo, exec_lo, s2
	s_delay_alu instid0(VALU_DEP_1)
	s_and_b32 s4, s3, 0x7fffffff
	s_cbranch_vccz .LBB2_2
; %bb.1:
	s_and_b32 s3, s4, 0x7fffff
	s_lshr_b32 s9, s4, 23
	s_bitset1_b32 s3, 23
	s_addk_i32 s9, 0xff88
	s_mul_hi_u32 s12, s3, 0xfe5163ab
	s_mul_i32 s13, s3, 0x3c439041
	s_mul_hi_u32 s14, s3, 0x3c439041
	s_add_u32 s12, s12, s13
	s_addc_u32 s13, 0, s14
	s_mul_i32 s14, s3, 0xdb629599
	s_mul_hi_u32 s16, s3, 0xdb629599
	s_add_u32 s13, s13, s14
	s_addc_u32 s14, 0, s16
	s_mul_i32 s16, s3, 0xf534ddc0
	s_mul_hi_u32 s17, s3, 0xf534ddc0
	s_add_u32 s14, s14, s16
	s_addc_u32 s16, 0, s17
	s_mul_i32 s17, s3, 0xfc2757d1
	s_mul_hi_u32 s18, s3, 0xfc2757d1
	s_add_u32 s16, s16, s17
	s_addc_u32 s17, 0, s18
	s_mul_i32 s18, s3, 0x4e441529
	s_mul_hi_u32 s19, s3, 0x4e441529
	s_add_u32 s17, s17, s18
	s_addc_u32 s18, 0, s19
	s_cmp_gt_u32 s9, 63
	s_mul_i32 s19, s3, 0xfe5163ab
	s_mul_hi_u32 s20, s3, 0xa2f9836e
	s_mul_i32 s3, s3, 0xa2f9836e
	s_cselect_b32 s21, s13, s16
	s_cselect_b32 s12, s12, s14
	s_cselect_b32 s13, s19, s13
	s_add_u32 s3, s18, s3
	s_addc_u32 s18, 0, s20
	s_cmp_gt_u32 s9, 63
	s_cselect_b32 s19, 0xffffffc0, 0
	s_cselect_b32 s14, s14, s17
	s_cselect_b32 s3, s16, s3
	s_cselect_b32 s16, s17, s18
	s_add_i32 s19, s19, s9
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s19, 31
	s_cselect_b32 s9, 0xffffffe0, 0
	s_cselect_b32 s17, s14, s3
	s_cselect_b32 s3, s3, s16
	s_cselect_b32 s14, s21, s14
	s_cselect_b32 s16, s12, s21
	s_cselect_b32 s12, s13, s12
	s_add_i32 s9, s9, s19
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s9, 31
	s_cselect_b32 s13, 0xffffffe0, 0
	s_cselect_b32 s3, s17, s3
	s_cselect_b32 s17, s14, s17
	s_cselect_b32 s14, s16, s14
	s_cselect_b32 s12, s12, s16
	s_add_i32 s13, s13, s9
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s9, 32, s13
	s_cmp_eq_u32 s13, 0
	v_mov_b32_e32 v1, s9
	s_cselect_b32 s13, -1, 0
	v_alignbit_b32 v2, s3, s17, v1
	v_alignbit_b32 v4, s17, s14, v1
	v_alignbit_b32 v1, s14, s12, v1
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_readfirstlane_b32 s9, v2
	v_cndmask_b32_e64 v2, v4, s17, s13
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_cndmask_b32_e64 v1, v1, s14, s13
	s_cselect_b32 s3, s3, s9
	s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v4, s3, v2, 30
	s_bfe_u32 s9, s3, 0x1001d
	s_delay_alu instid0(VALU_DEP_2)
	v_alignbit_b32 v2, v2, v1, 30
	s_sub_i32 s16, 0, s9
	v_alignbit_b32 v1, v1, s12, 30
	v_xor_b32_e32 v4, s16, v4
	s_lshr_b32 s12, s3, 29
	v_xor_b32_e32 v2, s16, v2
	s_lshl_b32 s12, s12, 31
	v_xor_b32_e32 v1, s16, v1
	v_clz_i32_u32_e32 v5, v4
	s_or_b32 s13, s12, 0.5
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v5, 32, v5
	v_sub_nc_u32_e32 v6, 31, v5
	v_lshlrev_b32_e32 v7, 23, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_alignbit_b32 v4, v4, v2, v6
	v_alignbit_b32 v1, v2, v1, v6
	v_sub_nc_u32_e32 v7, s13, v7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v2, v4, v1, 9
	v_clz_i32_u32_e32 v6, v2
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v6, 32, v6
	v_sub_nc_u32_e32 v8, 31, v6
	v_add_nc_u32_e32 v5, v6, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_alignbit_b32 v1, v2, v1, v8
	v_lshrrev_b32_e32 v2, 9, v4
	v_lshlrev_b32_e32 v4, 23, v5
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_lshrrev_b32_e32 v1, 9, v1
	v_or_b32_e32 v2, v2, v7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v1, v1, v4
	v_mul_f32_e32 v4, 0x3fc90fda, v2
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v1, 0x33000000, v1
	v_fma_f32 v5, 0x3fc90fda, v2, -v4
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_or_b32_e32 v1, s12, v1
	v_fmamk_f32 v2, v2, 0x33a22168, v5
	s_lshr_b32 s12, s3, 30
	s_mov_b32 s3, 0
	s_add_i32 s9, s9, s12
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmac_f32_e32 v2, 0x3fc90fda, v1
	v_add_f32_e32 v1, v4, v2
	s_branch .LBB2_3
.LBB2_2:
	s_mov_b32 s3, -1
                                        ; implicit-def: $sgpr9
                                        ; implicit-def: $vgpr1
.LBB2_3:                                ; %Flow194
	v_mov_b32_e32 v2, s9
	v_mul_f32_e64 v4, 0x3f22f983, |v3|
	s_and_not1_b32 vcc_lo, exec_lo, s3
	s_cbranch_vccnz .LBB2_5
; %bb.4:
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_rndne_f32_e32 v2, v4
	v_fma_f32 v1, 0xbfc90fda, v2, |v3|
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmamk_f32 v1, v2, 0xb3a22168, v1
	v_fmamk_f32 v1, v2, 0xa7c234c4, v1
	v_cvt_i32_f32_e32 v2, v2
.LBB2_5:                                ; %_ZL3cosf.exit
	s_and_b32 vcc_lo, exec_lo, s2
	s_cbranch_vccz .LBB2_7
; %bb.6:
	s_and_b32 s2, s4, 0x7fffff
	s_lshr_b32 s3, s4, 23
	s_bitset1_b32 s2, 23
	s_addk_i32 s3, 0xff88
	s_mul_hi_u32 s9, s2, 0xfe5163ab
	s_mul_i32 s12, s2, 0x3c439041
	s_mul_hi_u32 s13, s2, 0x3c439041
	s_add_u32 s9, s9, s12
	s_addc_u32 s12, 0, s13
	s_mul_i32 s13, s2, 0xdb629599
	s_mul_hi_u32 s14, s2, 0xdb629599
	s_add_u32 s12, s12, s13
	s_addc_u32 s13, 0, s14
	s_mul_i32 s14, s2, 0xf534ddc0
	s_mul_hi_u32 s16, s2, 0xf534ddc0
	s_add_u32 s13, s13, s14
	s_addc_u32 s14, 0, s16
	s_mul_i32 s16, s2, 0xfc2757d1
	s_mul_hi_u32 s17, s2, 0xfc2757d1
	s_add_u32 s14, s14, s16
	s_addc_u32 s16, 0, s17
	s_mul_i32 s17, s2, 0x4e441529
	s_mul_hi_u32 s18, s2, 0x4e441529
	s_add_u32 s16, s16, s17
	s_addc_u32 s17, 0, s18
	s_cmp_gt_u32 s3, 63
	s_mul_i32 s18, s2, 0xfe5163ab
	s_mul_hi_u32 s19, s2, 0xa2f9836e
	s_mul_i32 s2, s2, 0xa2f9836e
	s_cselect_b32 s20, s12, s14
	s_cselect_b32 s9, s9, s13
	s_cselect_b32 s12, s18, s12
	s_add_u32 s2, s17, s2
	s_addc_u32 s17, 0, s19
	s_cmp_gt_u32 s3, 63
	s_cselect_b32 s18, 0xffffffc0, 0
	s_cselect_b32 s13, s13, s16
	s_cselect_b32 s2, s14, s2
	s_cselect_b32 s14, s16, s17
	s_add_i32 s18, s18, s3
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s18, 31
	s_cselect_b32 s3, 0xffffffe0, 0
	s_cselect_b32 s16, s13, s2
	s_cselect_b32 s2, s2, s14
	s_cselect_b32 s13, s20, s13
	s_cselect_b32 s14, s9, s20
	s_cselect_b32 s9, s12, s9
	s_add_i32 s3, s3, s18
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_gt_u32 s3, 31
	s_cselect_b32 s12, 0xffffffe0, 0
	s_cselect_b32 s2, s16, s2
	s_cselect_b32 s16, s13, s16
	s_cselect_b32 s13, s14, s13
	s_cselect_b32 s9, s9, s14
	s_add_i32 s12, s12, s3
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	s_sub_i32 s3, 32, s12
	s_cmp_eq_u32 s12, 0
	v_mov_b32_e32 v5, s3
	s_cselect_b32 s12, -1, 0
	v_alignbit_b32 v6, s2, s16, v5
	v_alignbit_b32 v7, s16, s13, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_readfirstlane_b32 s3, v6
	v_cndmask_b32_e64 v6, v7, s16, s12
	s_delay_alu instid0(VALU_DEP_2)
	s_cselect_b32 s2, s2, s3
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v7, s2, v6, 30
	s_bfe_u32 s3, s2, 0x1001d
	s_delay_alu instid0(SALU_CYCLE_1)
	s_sub_i32 s14, 0, s3
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_xor_b32_e32 v7, s14, v7
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v8, v7
	v_min_u32_e32 v8, 32, v8
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_lshlrev_b32_e32 v10, 23, v8
	v_alignbit_b32 v5, s13, s9, v5
	v_sub_nc_u32_e32 v9, 31, v8
	v_cndmask_b32_e64 v5, v5, s13, s12
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
	v_alignbit_b32 v6, v6, v5, 30
	v_alignbit_b32 v5, v5, s9, 30
	s_lshr_b32 s9, s2, 29
	s_lshl_b32 s9, s9, 31
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_xor_b32_e32 v6, s14, v6
	v_xor_b32_e32 v5, s14, v5
	s_or_b32 s12, s9, 0.5
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_sub_nc_u32_e32 v10, s12, v10
	v_alignbit_b32 v7, v7, v6, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_alignbit_b32 v5, v6, v5, v9
	v_alignbit_b32 v6, v7, v5, 9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v9, v6
	v_min_u32_e32 v9, 32, v9
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v11, 31, v9
	v_alignbit_b32 v5, v6, v5, v11
	v_lshrrev_b32_e32 v6, 9, v7
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshrrev_b32_e32 v5, 9, v5
	v_or_b32_e32 v6, v6, v10
	v_add_nc_u32_e32 v8, v9, v8
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b32_e32 v7, 23, v8
	v_sub_nc_u32_e32 v5, v5, v7
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v7, 0x3fc90fda, v6
	v_add_nc_u32_e32 v5, 0x33000000, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v8, 0x3fc90fda, v6, -v7
	v_or_b32_e32 v5, s9, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	v_fmamk_f32 v6, v6, 0x33a22168, v8
	s_lshr_b32 s9, s2, 30
	s_mov_b32 s2, 0
	s_add_i32 s3, s3, s9
	v_fmac_f32_e32 v6, 0x3fc90fda, v5
	s_delay_alu instid0(VALU_DEP_1)
	v_add_f32_e32 v5, v7, v6
	s_branch .LBB2_8
.LBB2_7:
	s_mov_b32 s2, -1
                                        ; implicit-def: $sgpr3
                                        ; implicit-def: $vgpr5
.LBB2_8:                                ; %Flow193
	s_load_b32 s9, s[0:1], 0x34
	v_mov_b32_e32 v6, s3
	s_and_not1_b32 vcc_lo, exec_lo, s2
	s_cbranch_vccnz .LBB2_10
; %bb.9:
	v_rndne_f32_e32 v4, v4
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_fma_f32 v5, 0xbfc90fda, v4, |v3|
	v_cvt_i32_f32_e32 v6, v4
	v_fmamk_f32 v5, v4, 0xb3a22168, v5
	s_delay_alu instid0(VALU_DEP_1)
	v_fmamk_f32 v5, v4, 0xa7c234c4, v5
.LBB2_10:                               ; %_ZL3sinf.exit
	v_dual_mul_f32 v4, v1, v1 :: v_dual_and_b32 v7, 1, v2
	s_mov_b32 s12, 0xb94c1982
	s_mov_b32 s13, 0x37d75334
	s_load_b64 s[2:3], s[0:1], 0x0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
	v_dual_fmaak_f32 v9, s13, v4, 0xbab64f3b :: v_dual_lshlrev_b32 v2, 30, v2
	v_mul_f32_e32 v10, v5, v5
	v_fmaak_f32 v8, s12, v4, 0x3c0881c4
	v_cmp_eq_u32_e32 vcc_lo, 0, v7
	v_fmaak_f32 v9, v4, v9, 0x3d2aabf7
	v_lshlrev_b32_e32 v13, 30, v6
	v_fmaak_f32 v11, s12, v10, 0x3c0881c4
	v_fmaak_f32 v8, v4, v8, 0xbe2aaa9d
	s_waitcnt lgkmcnt(0)
	s_and_b32 s0, 0xffff, s9
	v_fmaak_f32 v9, v4, v9, 0xbf000004
	s_add_i32 s9, s8, -1
	s_add_i32 s14, s8, -2
	v_mul_f32_e32 v8, v4, v8
	s_cmp_eq_u32 s5, 2
	v_fma_f32 v4, v4, v9, 1.0
	s_cselect_b32 s1, -1, 0
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
	v_dual_fmac_f32 v1, v1, v8 :: v_dual_fmaak_f32 v8, v10, v11, 0xbe2aaa9d
	v_and_b32_e32 v11, 0x80000000, v2
	v_fmaak_f32 v12, s13, v10, 0xbab64f3b
	v_cndmask_b32_e64 v4, -v1, v4, vcc_lo
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_mul_f32_e32 v7, v10, v8
	v_mad_u64_u32 v[1:2], null, s15, s0, v[0:1]
	v_fmaak_f32 v9, v10, v12, 0x3d2aabf7
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_xor_b32_e32 v0, v11, v4
	v_dual_fmac_f32 v5, v5, v7 :: v_dual_and_b32 v4, 1, v6
	v_and_b32_e32 v6, 0x80000000, v13
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_fmaak_f32 v8, v10, v9, 0xbf000004
	v_xor_b32_e32 v7, s4, v3
	v_cmp_eq_u32_e32 vcc_lo, 0, v4
	v_cmp_class_f32_e64 s0, v3, 0x1f8
	s_and_b32 s4, s1, exec_lo
	v_fma_f32 v2, v10, v8, 1.0
	v_cndmask_b32_e64 v8, 0, 1, s1
	v_xor_b32_e32 v4, v7, v6
	s_cselect_b32 s4, s14, s9
	v_cndmask_b32_e64 v0, 0x7fc00000, v0, s0
	v_cndmask_b32_e32 v2, v2, v5, vcc_lo
	v_readfirstlane_b32 s12, v8
	v_cmp_gt_i32_e32 vcc_lo, s7, v1
	v_readfirstlane_b32 s5, v8
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_xor_b32_e32 v2, v4, v2
	s_cmp_gt_i32 s4, s12
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cndmask_b32_e64 v2, 0x7fc00000, v2, s0
	s_cselect_b32 s0, -1, 0
	s_and_b32 s0, vcc_lo, s0
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_saveexec_b32 s7, s0
	s_cbranch_execz .LBB2_13
; %bb.11:                               ; %.lr.ph
	v_mul_lo_u32 v3, s8, v1
	s_lshl_b32 s9, s5, 1
	s_delay_alu instid0(VALU_DEP_1)
	v_lshlrev_b32_e32 v3, 1, v3
.LBB2_12:                               ; =>This Inner Loop Header: Depth=1
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v4, s9, v3
	s_add_i32 s5, s5, 2
	v_add_nc_u32_e32 v3, 4, v3
	s_cmp_lt_i32 s5, s4
	v_add_nc_u32_e32 v6, 2, v4
	v_ashrrev_i32_e32 v5, 31, v4
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_ashrrev_i32_e32 v7, 31, v6
	v_lshlrev_b64 v[4:5], 2, v[4:5]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshlrev_b64 v[6:7], 2, v[6:7]
	v_add_co_u32 v4, s0, s2, v4
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_add_co_ci_u32_e64 v5, s0, s3, v5, s0
	v_add_co_u32 v6, s0, s2, v6
	s_delay_alu instid0(VALU_DEP_1)
	v_add_co_ci_u32_e64 v7, s0, s3, v7, s0
	s_clause 0x1
	global_load_b64 v[8:9], v[4:5], off
	global_load_b64 v[10:11], v[6:7], off
	s_waitcnt vmcnt(1)
	v_mul_f32_e32 v13, s11, v8
	s_waitcnt vmcnt(0)
	v_dual_mul_f32 v15, s11, v11 :: v_dual_mul_f32 v12, s10, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v13, -v9, s10, -v13
	v_dual_fmac_f32 v15, s10, v10 :: v_dual_mul_f32 v14, s10, v11
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fma_f32 v12, v9, s11, -v12
	v_dual_mul_f32 v11, v0, v11 :: v_dual_mul_f32 v12, v2, v12
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_fmac_f32_e32 v11, v2, v13
	v_fma_f32 v14, v10, s11, -v14
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_mul_f32 v15, v2, v15 :: v_dual_fmac_f32 v12, v0, v10
	v_dual_mul_f32 v14, v2, v14 :: v_dual_fmac_f32 v15, v0, v8
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v8, v2, v11
	v_fma_f32 v13, v0, v9, -v14
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v14, v2, v15
	v_fmac_f32_e32 v8, v0, v12
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mul_f32_e32 v10, v2, v13
	v_dual_mul_f32 v9, v2, v12 :: v_dual_fmac_f32 v10, v0, v15
	s_delay_alu instid0(VALU_DEP_1)
	v_fma_f32 v9, v0, v11, -v9
	v_fma_f32 v11, v0, v13, -v14
	s_clause 0x1
	global_store_b64 v[4:5], v[10:11], off
	global_store_b64 v[6:7], v[8:9], off
	s_cbranch_scc1 .LBB2_12
.LBB2_13:                               ; %Flow192
	s_or_b32 exec_lo, exec_lo, s7
	s_cmp_lg_u32 s6, 0
	s_cselect_b32 s0, -1, 0
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_and_b32 s0, s1, s0
	s_and_b32 s0, s0, vcc_lo
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_saveexec_b32 s1, s0
	s_cbranch_execz .LBB2_15
; %bb.14:
	v_mul_lo_u32 v1, v1, s8
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v4, s8, v1
	v_lshlrev_b32_e32 v3, 1, v1
	v_lshl_add_u32 v5, v4, 1, -2
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_ashrrev_i32_e32 v4, 31, v3
	v_ashrrev_i32_e32 v6, 31, v5
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshlrev_b64 v[3:4], 2, v[3:4]
	v_lshlrev_b64 v[5:6], 2, v[5:6]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_add_co_u32 v3, vcc_lo, s2, v3
	v_add_co_ci_u32_e32 v4, vcc_lo, s3, v4, vcc_lo
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_add_co_u32 v5, vcc_lo, s2, v5
	v_add_co_ci_u32_e32 v6, vcc_lo, s3, v6, vcc_lo
	s_clause 0x1
	global_load_b64 v[7:8], v[3:4], off
	global_load_b64 v[9:10], v[5:6], off
	s_waitcnt vmcnt(1)
	v_mul_f32_e32 v14, v0, v8
	s_waitcnt vmcnt(0)
	v_dual_mul_f32 v11, s11, v8 :: v_dual_mul_f32 v12, s10, v9
	v_mul_f32_e32 v1, s10, v8
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_fma_f32 v12, v10, s11, -v12
	v_mul_f32_e32 v13, s11, v9
	v_fma_f32 v1, v7, s11, -v1
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v12, v2, v12
	v_fma_f32 v8, -v10, s10, -v13
	v_fmac_f32_e32 v11, s10, v7
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_dual_mul_f32 v1, v2, v1 :: v_dual_fmac_f32 v12, v0, v7
	v_fmac_f32_e32 v14, v2, v8
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v11, v2, v11
	v_fma_f32 v8, v0, v10, -v1
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v1, v2, v14
	v_fmac_f32_e32 v11, v0, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v7, v2, v8
	v_fmac_f32_e32 v1, v0, v12
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v9, v2, v11
	v_dual_mul_f32 v2, v2, v12 :: v_dual_fmac_f32 v7, v0, v11
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_fma_f32 v8, v0, v8, -v9
	v_fma_f32 v2, v0, v14, -v2
	s_clause 0x1
	global_store_b64 v[5:6], v[7:8], off
	global_store_b64 v[3:4], v[1:2], off
.LBB2_15:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z5H2d_yPffiiiifff
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 296
		.amdhsa_user_sgpr_count 15
		.amdhsa_user_sgpr_dispatch_ptr 0
		.amdhsa_user_sgpr_queue_ptr 0
		.amdhsa_user_sgpr_kernarg_segment_ptr 1
		.amdhsa_user_sgpr_dispatch_id 0
		.amdhsa_user_sgpr_private_segment_size 0
		.amdhsa_wavefront_size32 1
		.amdhsa_uses_dynamic_stack 0
		.amdhsa_enable_private_segment 0
		.amdhsa_system_sgpr_workgroup_id_x 1
		.amdhsa_system_sgpr_workgroup_id_y 0
		.amdhsa_system_sgpr_workgroup_id_z 0
		.amdhsa_system_sgpr_workgroup_info 0
		.amdhsa_system_vgpr_workitem_id 0
		.amdhsa_next_free_vgpr 16
		.amdhsa_next_free_sgpr 22
		.amdhsa_float_round_mode_32 0
		.amdhsa_float_round_mode_16_64 0
		.amdhsa_float_denorm_mode_32 3
		.amdhsa_float_denorm_mode_16_64 3
		.amdhsa_dx10_clamp 1
		.amdhsa_ieee_mode 1
		.amdhsa_fp16_overflow 0
		.amdhsa_workgroup_processor_mode 1
		.amdhsa_memory_ordered 1
		.amdhsa_forward_progress 0
		.amdhsa_shared_vgpr_count 0
		.amdhsa_exception_fp_ieee_invalid_op 0
		.amdhsa_exception_fp_denorm_src 0
		.amdhsa_exception_fp_ieee_div_zero 0
		.amdhsa_exception_fp_ieee_overflow 0
		.amdhsa_exception_fp_ieee_underflow 0
		.amdhsa_exception_fp_ieee_inexact 0
		.amdhsa_exception_int_div_zero 0
	.end_amdhsa_kernel
	.text
.Lfunc_end2:
	.size	_Z5H2d_yPffiiiifff, .Lfunc_end2-_Z5H2d_yPffiiiifff
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 2532
; NumSgprs: 24
; NumVgprs: 16
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 1
; NumSGPRsForWavesPerEU: 24
; NumVGPRsForWavesPerEU: 16
; Occupancy: 16
; WaveLimiterHint : 0
; COMPUTE_PGM_RSRC2:SCRATCH_EN: 0
; COMPUTE_PGM_RSRC2:USER_SGPR: 15
; COMPUTE_PGM_RSRC2:TRAP_HANDLER: 0
; COMPUTE_PGM_RSRC2:TGID_X_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Y_EN: 0
; COMPUTE_PGM_RSRC2:TGID_Z_EN: 0
; COMPUTE_PGM_RSRC2:TIDIG_COMP_CNT: 0
	.text
	.protected	_Z7Hdiag2dPffS_iiff     ; -- Begin function _Z7Hdiag2dPffS_iiff
	.globl	_Z7Hdiag2dPffS_iiff
	.p2align	8
	.type	_Z7Hdiag2dPffS_iiff,@function
_Z7Hdiag2dPffS_iiff:                    ; @_Z7Hdiag2dPffS_iiff
; %bb.0:
	s_clause 0x1
	s_load_b32 s2, s[0:1], 0x34
	s_load_b128 s[4:7], s[0:1], 0x18
	s_waitcnt lgkmcnt(0)
	s_and_b32 s2, s2, 0xffff
	s_cmp_gt_i32 s5, 0
	v_mad_u64_u32 v[6:7], null, s15, s2, v[0:1]
	s_cselect_b32 s2, -1, 0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cmp_gt_i32_e32 vcc_lo, s4, v6
	s_and_b32 s2, vcc_lo, s2
	s_and_saveexec_b32 s3, s2
	s_cbranch_execz .LBB3_11
; %bb.1:                                ; %.lr.ph
	v_cvt_f64_f32_e32 v[2:3], s6
	v_cvt_f64_f32_e32 v[4:5], s7
	s_clause 0x1
	s_load_b32 s2, s[0:1], 0x8
	s_load_b64 s[6:7], s[0:1], 0x10
	v_mul_lo_u32 v8, v6, s5
	v_mov_b32_e32 v10, 0
	s_mov_b32 s4, 0x7fffff
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_ashrrev_i32_e32 v9, 31, v8
	v_lshlrev_b64 v[6:7], 2, v[8:9]
	v_lshlrev_b32_e32 v8, 1, v8
	s_waitcnt lgkmcnt(0)
	v_cvt_f64_f32_e64 v[0:1], -s2
	s_load_b64 s[2:3], s[0:1], 0x0
	s_delay_alu instid0(VALU_DEP_3)
	v_add_co_u32 v6, vcc_lo, s6, v6
	v_add_co_ci_u32_e32 v7, vcc_lo, s7, v7, vcc_lo
	s_mov_b32 s6, 0xb94c1982
	s_mov_b32 s7, 0x37d75334
	v_add_f64 v[2:3], v[2:3], v[2:3]
	v_add_f64 v[4:5], v[4:5], v[4:5]
.LBB3_2:                                ; =>This Inner Loop Header: Depth=1
	global_load_b32 v15, v[6:7], off
	v_ashrrev_i32_e32 v9, 31, v8
                                        ; implicit-def: $vgpr18
                                        ; implicit-def: $vgpr17
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_lshlrev_b64 v[11:12], 2, v[8:9]
	s_waitcnt lgkmcnt(0)
	v_add_co_u32 v11, vcc_lo, s2, v11
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1)
	v_add_co_ci_u32_e32 v12, vcc_lo, s3, v12, vcc_lo
	global_load_b64 v[13:14], v[11:12], off
	s_waitcnt vmcnt(1)
	v_cvt_f64_f32_e32 v[15:16], v15
	v_add_f64 v[15:16], v[15:16], -v[2:3]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_add_f64 v[15:16], v[15:16], -v[4:5]
	v_mul_f64 v[15:16], v[15:16], v[0:1]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_cvt_f32_f64_e32 v15, v[15:16]
	v_and_b32_e32 v16, 0x7fffffff, v15
	v_cmp_ngt_f32_e64 s8, 0x48000000, |v15|
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_lshrrev_b32_e32 v9, 23, v16
	v_and_or_b32 v19, v16, s4, 0x800000
	v_add_nc_u32_e32 v20, 0xffffff88, v9
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_and_saveexec_b32 s0, s8
	s_xor_b32 s9, exec_lo, s0
	s_cbranch_execz .LBB3_4
; %bb.3:                                ;   in Loop: Header=BB3_2 Depth=1
	v_mad_u64_u32 v[17:18], null, 0xfe5163ab, v19, 0
	v_cmp_lt_u32_e32 vcc_lo, 63, v20
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_mov_b32_e32 v9, v18
	v_cndmask_b32_e64 v18, 0, 0xffffffc0, vcc_lo
	v_add_nc_u32_e32 v18, v18, v20
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_cmp_lt_u32_e64 s0, 31, v18
	v_cndmask_b32_e64 v27, 0, 0xffffffe0, s0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v18, v27, v18
	v_mad_u64_u32 v[21:22], null, 0x3c439041, v19, v[9:10]
	v_cmp_lt_u32_e64 s1, 31, v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mov_b32_e32 v9, v22
	v_mad_u64_u32 v[22:23], null, 0xdb629599, v19, v[9:10]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_mov_b32_e32 v9, v23
	v_cndmask_b32_e32 v17, v22, v17, vcc_lo
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mad_u64_u32 v[23:24], null, 0xf534ddc0, v19, v[9:10]
	v_mov_b32_e32 v9, v24
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mad_u64_u32 v[24:25], null, 0xfc2757d1, v19, v[9:10]
	v_mov_b32_e32 v9, v25
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mad_u64_u32 v[25:26], null, 0x4e441529, v19, v[9:10]
	v_dual_mov_b32 v9, v26 :: v_dual_cndmask_b32 v28, v25, v23
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_mad_u64_u32 v[26:27], null, 0xa2f9836e, v19, v[9:10]
	v_cndmask_b32_e64 v9, 0, 0xffffffe0, s1
	v_dual_cndmask_b32 v26, v26, v24 :: v_dual_add_nc_u32 v9, v9, v18
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_dual_cndmask_b32 v25, v27, v25 :: v_dual_cndmask_b32 v24, v24, v22
	v_cndmask_b32_e32 v18, v23, v21, vcc_lo
	v_cmp_eq_u32_e32 vcc_lo, 0, v9
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_cndmask_b32_e64 v21, v26, v28, s0
	v_cndmask_b32_e64 v23, v25, v26, s0
	v_cndmask_b32_e64 v25, v28, v24, s0
	v_sub_nc_u32_e32 v26, 32, v9
	v_cndmask_b32_e64 v24, v24, v18, s0
	v_cndmask_b32_e64 v17, v18, v17, s0
	v_cndmask_b32_e64 v23, v23, v21, s1
	v_cndmask_b32_e64 v21, v21, v25, s1
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_cndmask_b32_e64 v25, v25, v24, s1
	v_cndmask_b32_e64 v17, v24, v17, s1
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_alignbit_b32 v27, v23, v21, v26
	v_alignbit_b32 v22, v21, v25, v26
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_alignbit_b32 v24, v25, v17, v26
	v_dual_cndmask_b32 v9, v27, v23 :: v_dual_cndmask_b32 v18, v22, v21
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cndmask_b32_e32 v24, v24, v25, vcc_lo
	v_bfe_u32 v21, v9, 29, 1
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_alignbit_b32 v22, v9, v18, 30
	v_alignbit_b32 v18, v18, v24, 30
	v_alignbit_b32 v17, v24, v17, 30
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v23, 0, v21
	v_xor_b32_e32 v22, v22, v23
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_xor_b32_e32 v18, v18, v23
	v_xor_b32_e32 v17, v17, v23
	v_lshrrev_b32_e32 v23, 29, v9
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_clz_i32_u32_e32 v25, v22
	v_lshlrev_b32_e32 v23, 31, v23
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_min_u32_e32 v25, 32, v25
	v_or_b32_e32 v26, 0.5, v23
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v24, 31, v25
	v_lshlrev_b32_e32 v27, 23, v25
	v_alignbit_b32 v22, v22, v18, v24
	v_alignbit_b32 v17, v18, v17, v24
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v26, v26, v27
	v_alignbit_b32 v18, v22, v17, 9
	v_lshrrev_b32_e32 v22, 9, v22
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_clz_i32_u32_e32 v24, v18
	v_min_u32_e32 v24, 32, v24
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_sub_nc_u32_e32 v28, 31, v24
	v_alignbit_b32 v17, v18, v17, v28
	v_or_b32_e32 v18, v22, v26
	v_add_lshl_u32 v22, v24, v25, 23
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_lshrrev_b32_e32 v17, 9, v17
	v_mul_f32_e32 v24, 0x3fc90fda, v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v17, v17, v22
	v_fma_f32 v22, 0x3fc90fda, v18, -v24
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v17, 0x33000000, v17
	v_fmac_f32_e32 v22, 0x33a22168, v18
	v_lshrrev_b32_e32 v9, 30, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_or_b32_e32 v17, v17, v23
	v_add_nc_u32_e32 v18, v21, v9
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmac_f32_e32 v22, 0x3fc90fda, v17
	v_add_f32_e32 v17, v24, v22
.LBB3_4:                                ; %Flow69
                                        ;   in Loop: Header=BB3_2 Depth=1
	s_or_saveexec_b32 s0, s9
	v_mul_f32_e64 v9, 0x3f22f983, |v15|
	s_delay_alu instid0(VALU_DEP_1)
	v_rndne_f32_e32 v22, v9
	s_xor_b32 exec_lo, exec_lo, s0
; %bb.5:                                ;   in Loop: Header=BB3_2 Depth=1
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_fma_f32 v17, 0xbfc90fda, v22, |v15|
	v_cvt_i32_f32_e32 v18, v22
	v_fmac_f32_e32 v17, 0xb3a22168, v22
	s_delay_alu instid0(VALU_DEP_1)
	v_fmac_f32_e32 v17, 0xa7c234c4, v22
; %bb.6:                                ; %_ZL3cosf.exit
                                        ;   in Loop: Header=BB3_2 Depth=1
	s_or_b32 exec_lo, exec_lo, s0
                                        ; implicit-def: $vgpr21
                                        ; implicit-def: $vgpr9
	s_and_saveexec_b32 s0, s8
	s_delay_alu instid0(SALU_CYCLE_1)
	s_xor_b32 s8, exec_lo, s0
	s_cbranch_execz .LBB3_8
; %bb.7:                                ;   in Loop: Header=BB3_2 Depth=1
	v_mad_u64_u32 v[21:22], null, 0xfe5163ab, v19, 0
	v_cmp_lt_u32_e32 vcc_lo, 63, v20
	v_cndmask_b32_e64 v27, 0, 0xffffffc0, vcc_lo
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_mov_b32 v9, v22 :: v_dual_add_nc_u32 v20, v27, v20
	v_mad_u64_u32 v[22:23], null, 0x3c439041, v19, v[9:10]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_cmp_lt_u32_e64 s0, 31, v20
	v_cndmask_b32_e64 v28, 0, 0xffffffe0, s0
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_dual_mov_b32 v9, v23 :: v_dual_add_nc_u32 v20, v28, v20
	v_mad_u64_u32 v[23:24], null, 0xdb629599, v19, v[9:10]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cmp_lt_u32_e64 s1, 31, v20
	v_mov_b32_e32 v9, v24
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cndmask_b32_e32 v21, v23, v21, vcc_lo
	v_mad_u64_u32 v[24:25], null, 0xf534ddc0, v19, v[9:10]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mov_b32_e32 v9, v25
	v_mad_u64_u32 v[25:26], null, 0xfc2757d1, v19, v[9:10]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mov_b32_e32 v9, v26
	v_mad_u64_u32 v[26:27], null, 0x4e441529, v19, v[9:10]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mov_b32_e32 v9, v27
	v_mad_u64_u32 v[27:28], null, 0xa2f9836e, v19, v[9:10]
	v_cndmask_b32_e64 v9, 0, 0xffffffe0, s1
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cndmask_b32_e32 v19, v26, v24, vcc_lo
	v_dual_cndmask_b32 v20, v24, v22 :: v_dual_add_nc_u32 v9, v9, v20
	s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_dual_cndmask_b32 v27, v27, v25 :: v_dual_cndmask_b32 v26, v28, v26
	v_cndmask_b32_e32 v25, v25, v23, vcc_lo
	v_cmp_eq_u32_e32 vcc_lo, 0, v9
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_cndmask_b32_e64 v22, v27, v19, s0
	v_cndmask_b32_e64 v24, v26, v27, s0
	s_delay_alu instid0(VALU_DEP_4)
	v_cndmask_b32_e64 v19, v19, v25, s0
	v_sub_nc_u32_e32 v26, 32, v9
	v_cndmask_b32_e64 v25, v25, v20, s0
	v_cndmask_b32_e64 v20, v20, v21, s0
	v_cndmask_b32_e64 v24, v24, v22, s1
	v_cndmask_b32_e64 v22, v22, v19, s1
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_cndmask_b32_e64 v19, v19, v25, s1
	v_cndmask_b32_e64 v20, v25, v20, s1
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_alignbit_b32 v27, v24, v22, v26
	v_alignbit_b32 v23, v22, v19, v26
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_alignbit_b32 v25, v19, v20, v26
	v_cndmask_b32_e32 v9, v27, v24, vcc_lo
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_cndmask_b32_e32 v21, v23, v22, vcc_lo
	v_cndmask_b32_e32 v19, v25, v19, vcc_lo
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_bfe_u32 v22, v9, 29, 1
	v_alignbit_b32 v23, v9, v21, 30
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
	v_alignbit_b32 v21, v21, v19, 30
	v_alignbit_b32 v19, v19, v20, 30
	v_sub_nc_u32_e32 v24, 0, v22
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_4)
	v_xor_b32_e32 v23, v23, v24
	v_xor_b32_e32 v20, v21, v24
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_xor_b32_e32 v19, v19, v24
	v_clz_i32_u32_e32 v25, v23
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_min_u32_e32 v25, 32, v25
	v_sub_nc_u32_e32 v21, 31, v25
	v_lshlrev_b32_e32 v27, 23, v25
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_alignbit_b32 v23, v23, v20, v21
	v_alignbit_b32 v19, v20, v19, v21
	v_lshrrev_b32_e32 v21, 29, v9
	v_alignbit_b32 v20, v23, v19, 9
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
	v_lshlrev_b32_e32 v21, 31, v21
	v_lshrrev_b32_e32 v23, 9, v23
	v_clz_i32_u32_e32 v24, v20
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_or_b32_e32 v26, 0.5, v21
	v_min_u32_e32 v24, 32, v24
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v26, v26, v27
	v_sub_nc_u32_e32 v28, 31, v24
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_alignbit_b32 v19, v20, v19, v28
	v_or_b32_e32 v20, v23, v26
	v_add_lshl_u32 v23, v24, v25, 23
	s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
	v_lshrrev_b32_e32 v19, 9, v19
	v_mul_f32_e32 v24, 0x3fc90fda, v20
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_sub_nc_u32_e32 v19, v19, v23
	v_fma_f32 v23, 0x3fc90fda, v20, -v24
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_nc_u32_e32 v19, 0x33000000, v19
	v_fmac_f32_e32 v23, 0x33a22168, v20
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_or_b32_e32 v19, v19, v21
	v_fmac_f32_e32 v23, 0x3fc90fda, v19
	v_lshrrev_b32_e32 v19, 30, v9
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_f32_e32 v9, v24, v23
	v_add_nc_u32_e32 v21, v22, v19
                                        ; implicit-def: $vgpr22
.LBB3_8:                                ; %Flow
                                        ;   in Loop: Header=BB3_2 Depth=1
	s_and_not1_saveexec_b32 s0, s8
; %bb.9:                                ;   in Loop: Header=BB3_2 Depth=1
	v_fma_f32 v9, 0xbfc90fda, v22, |v15|
	v_cvt_i32_f32_e32 v21, v22
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_fmac_f32_e32 v9, 0xb3a22168, v22
	v_fmac_f32_e32 v9, 0xa7c234c4, v22
; %bb.10:                               ; %_ZL3sinf.exit
                                        ;   in Loop: Header=BB3_2 Depth=1
	s_or_b32 exec_lo, exec_lo, s0
	v_dual_mul_f32 v19, v17, v17 :: v_dual_and_b32 v20, 1, v18
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
	v_mul_f32_e32 v22, v9, v9
	v_xor_b32_e32 v16, v16, v15
	s_add_i32 s5, s5, -1
	v_fmaak_f32 v23, s6, v19, 0x3c0881c4
	v_dual_fmaak_f32 v24, s7, v19, 0xbab64f3b :: v_dual_and_b32 v25, 1, v21
	v_lshlrev_b32_e32 v18, 30, v18
	v_dual_fmaak_f32 v26, s6, v22, 0x3c0881c4 :: v_dual_lshlrev_b32 v21, 30, v21
	v_fmaak_f32 v27, s7, v22, 0xbab64f3b
	v_fmaak_f32 v23, v19, v23, 0xbe2aaa9d
	v_fmaak_f32 v24, v19, v24, 0x3d2aabf7
	s_delay_alu instid0(VALU_DEP_4)
	v_fmaak_f32 v26, v22, v26, 0xbe2aaa9d
	v_cmp_eq_u32_e32 vcc_lo, 0, v20
	v_fmaak_f32 v27, v22, v27, 0x3d2aabf7
	v_mul_f32_e32 v23, v19, v23
	v_fmaak_f32 v24, v19, v24, 0xbf000004
	v_and_b32_e32 v18, 0x80000000, v18
	v_dual_mul_f32 v26, v22, v26 :: v_dual_and_b32 v21, 0x80000000, v21
	v_fmaak_f32 v27, v22, v27, 0xbf000004
	v_fmac_f32_e32 v17, v17, v23
	v_fma_f32 v19, v19, v24, 1.0
	s_delay_alu instid0(VALU_DEP_4)
	v_fmac_f32_e32 v9, v9, v26
	s_cmp_lg_u32 s5, 0
	v_fma_f32 v22, v22, v27, 1.0
	v_add_nc_u32_e32 v8, 2, v8
	v_cndmask_b32_e64 v17, -v17, v19, vcc_lo
	v_cmp_eq_u32_e32 vcc_lo, 0, v25
	s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
	v_xor_b32_e32 v17, v18, v17
	v_cndmask_b32_e32 v9, v22, v9, vcc_lo
	v_cmp_class_f32_e64 vcc_lo, v15, 0x1f8
	v_xor3_b32 v9, v16, v21, v9
	s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cndmask_b32_e32 v17, 0x7fc00000, v17, vcc_lo
	v_cndmask_b32_e32 v9, 0x7fc00000, v9, vcc_lo
	v_add_co_u32 v6, vcc_lo, v6, 4
	v_add_co_ci_u32_e32 v7, vcc_lo, 0, v7, vcc_lo
	s_waitcnt vmcnt(0)
	s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
	v_mul_f32_e32 v15, v14, v9
	v_mul_f32_e32 v16, v13, v9
	v_fma_f32 v15, v13, v17, -v15
	s_delay_alu instid0(VALU_DEP_2)
	v_fmac_f32_e32 v16, v14, v17
	global_store_b64 v[11:12], v[15:16], off
	s_cbranch_scc1 .LBB3_2
.LBB3_11:                               ; %.loopexit
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z7Hdiag2dPffS_iiff
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 296
		.amdhsa_user_sgpr_count 15
		.amdhsa_user_sgpr_dispatch_ptr 0
		.amdhsa_user_sgpr_queue_ptr 0
		.amdhsa_user_sgpr_kernarg_segment_ptr 1
		.amdhsa_user_sgpr_dispatch_id 0
		.amdhsa_user_sgpr_private_segment_size 0
		.amdhsa_wavefront_size32 1
		.amdhsa_uses_dynamic_stack 0
		.amdhsa_enable_private_segment 0
		.amdhsa_system_sgpr_workgroup_id_x 1
		.amdhsa_system_sgpr_workgroup_id_y 0
		.amdhsa_system_sgpr_workgroup_id_z 0
		.amdhsa_system_sgpr_workgroup_info 0
		.amdhsa_system_vgpr_workitem_id 0
		.amdhsa_next_free_vgpr 29
		.amdhsa_next_free_sgpr 16
		.amdhsa_float_round_mode_32 0
		.amdhsa_float_round_mode_16_64 0
		.amdhsa_float_denorm_mode_32 3
		.amdhsa_float_denorm_mode_16_64 3
		.amdhsa_dx10_clamp 1
		.amdhsa_ieee_mode 1
		.amdhsa_fp16_overflow 0
		.amdhsa_workgroup_processor_mode 1
		.amdhsa_memory_ordered 1
		.amdhsa_forward_progress 0
		.amdhsa_shared_vgpr_count 0
		.amdhsa_exception_fp_ieee_invalid_op 0
		.amdhsa_exception_fp_denorm_src 0
		.amdhsa_exception_fp_ieee_div_zero 0
		.amdhsa_exception_fp_ieee_overflow 0
		.amdhsa_exception_fp_ieee_underflow 0
		.amdhsa_exception_fp_ieee_inexact 0
		.amdhsa_exception_int_div_zero 0
	.end_amdhsa_kernel
	.text
.Lfunc_end3:
	.size	_Z7Hdiag2dPffS_iiff, .Lfunc_end3-_Z7Hdiag2dPffS_iiff
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 2100
; NumSgprs: 18
; NumVgprs: 29
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 3
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 29
; Occupancy: 16
; WaveLimiterHint : 0
; COMPUTE_PGM_RSRC2:SCRATCH_EN: 0
; COMPUTE_PGM_RSRC2:USER_SGPR: 15
; COMPUTE_PGM_RSRC2:TRAP_HANDLER: 0
; COMPUTE_PGM_RSRC2:TGID_X_EN: 1
; COMPUTE_PGM_RSRC2:TGID_Y_EN: 0
; COMPUTE_PGM_RSRC2:TGID_Z_EN: 0
; COMPUTE_PGM_RSRC2:TIDIG_COMP_CNT: 0
	.text
	.p2alignl 7, 3214868480
	.fill 96, 4, 3214868480
	.type	__hip_cuid_,@object             ; @__hip_cuid_
	.section	.bss,"aw",@nobits
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               ; 0x0
	.size	__hip_cuid_, 1

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym __hip_cuid_
	.amdgpu_metadata
---
amdhsa.kernels:
  - .args:
      - .address_space:  global
        .offset:         0
        .size:           8
        .value_kind:     global_buffer
      - .address_space:  global
        .offset:         8
        .size:           8
        .value_kind:     global_buffer
      - .offset:         16
        .size:           4
        .value_kind:     by_value
      - .offset:         20
        .size:           4
        .value_kind:     by_value
      - .address_space:  global
        .offset:         24
        .size:           8
        .value_kind:     global_buffer
      - .offset:         32
        .size:           4
        .value_kind:     by_value
      - .offset:         36
        .size:           4
        .value_kind:     by_value
      - .offset:         40
        .size:           4
        .value_kind:     by_value
      - .offset:         44
        .size:           4
        .value_kind:     by_value
      - .offset:         48
        .size:           4
        .value_kind:     by_value
      - .offset:         52
        .size:           4
        .value_kind:     by_value
      - .offset:         56
        .size:           4
        .value_kind:     by_value
      - .offset:         60
        .size:           4
        .value_kind:     by_value
      - .offset:         64
        .size:           4
        .value_kind:     by_value
      - .offset:         68
        .size:           4
        .value_kind:     by_value
    .group_segment_fixed_size: 6272
    .kernarg_segment_align: 8
    .kernarg_segment_size: 72
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z8H2d_stepPfS_ifS_iiiiffffff
    .private_segment_fixed_size: 0
    .sgpr_count:     31
    .sgpr_spill_count: 0
    .symbol:         _Z8H2d_stepPfS_ifS_iiiiffffff.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     29
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .args:
      - .address_space:  global
        .offset:         0
        .size:           8
        .value_kind:     global_buffer
      - .offset:         8
        .size:           4
        .value_kind:     by_value
      - .offset:         12
        .size:           4
        .value_kind:     by_value
      - .offset:         16
        .size:           4
        .value_kind:     by_value
      - .offset:         20
        .size:           4
        .value_kind:     by_value
      - .offset:         24
        .size:           4
        .value_kind:     by_value
      - .offset:         28
        .size:           4
        .value_kind:     by_value
      - .offset:         32
        .size:           4
        .value_kind:     by_value
      - .offset:         36
        .size:           4
        .value_kind:     by_value
      - .offset:         40
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         44
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         48
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         52
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         54
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         56
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         58
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         60
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         62
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         88
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         96
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         104
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 296
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z5H2d_xPffiiiifff
    .private_segment_fixed_size: 0
    .sgpr_count:     24
    .sgpr_spill_count: 0
    .symbol:         _Z5H2d_xPffiiiifff.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     16
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .args:
      - .address_space:  global
        .offset:         0
        .size:           8
        .value_kind:     global_buffer
      - .offset:         8
        .size:           4
        .value_kind:     by_value
      - .offset:         12
        .size:           4
        .value_kind:     by_value
      - .offset:         16
        .size:           4
        .value_kind:     by_value
      - .offset:         20
        .size:           4
        .value_kind:     by_value
      - .offset:         24
        .size:           4
        .value_kind:     by_value
      - .offset:         28
        .size:           4
        .value_kind:     by_value
      - .offset:         32
        .size:           4
        .value_kind:     by_value
      - .offset:         36
        .size:           4
        .value_kind:     by_value
      - .offset:         40
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         44
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         48
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         52
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         54
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         56
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         58
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         60
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         62
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         88
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         96
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         104
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 296
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z5H2d_yPffiiiifff
    .private_segment_fixed_size: 0
    .sgpr_count:     24
    .sgpr_spill_count: 0
    .symbol:         _Z5H2d_yPffiiiifff.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     16
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .args:
      - .address_space:  global
        .offset:         0
        .size:           8
        .value_kind:     global_buffer
      - .offset:         8
        .size:           4
        .value_kind:     by_value
      - .address_space:  global
        .offset:         16
        .size:           8
        .value_kind:     global_buffer
      - .offset:         24
        .size:           4
        .value_kind:     by_value
      - .offset:         28
        .size:           4
        .value_kind:     by_value
      - .offset:         32
        .size:           4
        .value_kind:     by_value
      - .offset:         36
        .size:           4
        .value_kind:     by_value
      - .offset:         40
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         44
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         48
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         52
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         54
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         56
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         58
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         60
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         62
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         88
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         96
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         104
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 296
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z7Hdiag2dPffS_iiff
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z7Hdiag2dPffS_iiff.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     29
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
amdhsa.target:   amdgcn-amd-amdhsa--gfx1100
amdhsa.version:
  - 1
  - 2
...

	.end_amdgpu_metadata
