/*--------------------------------------------------------------------*/
/* CUDA Library for GPU Tutorial */
/* written by Viktor K. Decyk, UCLA */

#include <stdlib.h>
#include <stdio.h>
#include "cuda.h"

int nblock_size = 64;
int ngrid_size = 1;
int maxgsx = 65535;
int mmcc = 0;
static int devid;

static cudaError_t crc;

__global__ void emptyKernel() {}

/*--------------------------------------------------------------------*/
extern "C" void setgbsize(int nblock) {
/* set blocksize */
   nblock_size = nblock;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" int getmmcc() {
/* get major and minor computer capability */
   return mmcc;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fallocate(float **g_f, int nsize, int *irc) {
/* allocate global float memory on GPU, return pointer to C */
   void *gptr;
   crc = cudaMalloc(&gptr,sizeof(float)*nsize);
   if (crc) {
      printf("cudaMalloc float Error=%d:%s,l=%d\n",crc,
              cudaGetErrorString(crc),nsize);
      *irc = 1;
   }
   *g_f = (float *)gptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_iallocate(int **g_i, int nsize, int *irc) {
/* allocate global integer memory on GPU, return pointer to C */
   void *gptr;
   crc = cudaMalloc(&gptr,sizeof(int)*nsize);
   if (crc) {
      printf("cudaMalloc int Error=%d:%s,l=%d\n",crc,
              cudaGetErrorString(crc),nsize);
      *irc = 1;
   }
   *g_i = (int *)gptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_deallocate(void *g_d, int *irc) {
/* deallocate global memory on GPU */
   crc = cudaFree(g_d);
   if (crc) {
      printf("cudaFree Error=%d:%s\n",crc,cudaGetErrorString(crc));
      *irc = 1;
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyin(float *f, float *g_f, int nsize) {
/* copy float array from host memory to global GPU memory */
   crc = cudaMemcpy((void *)g_f,f,sizeof(float)*nsize,
                    cudaMemcpyHostToDevice);
   if (crc) {
      printf("cudaMemcpyHostToDevice float Error=%d:%s\n",crc,
              cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyout(float *f, float *g_f, int nsize) {
/* copy float array from global GPU memory to host memory */
   crc = cudaMemcpy(f,(void *)g_f,sizeof(float)*nsize,
                    cudaMemcpyDeviceToHost);
   if (crc) {
      printf("cudaMemcpyDeviceToHost float Error=%d:%s\n",crc,
              cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void emptykernel() {
   int ngx, ngy;
   ngx  = nblock_size < 32768 ? nblock_size : 32768;
   ngy = (ngrid_size - 1)/ngx + 1;
   dim3 dimBlock(nblock_size,1);
   dim3 dimGrid(ngx,ngy);
   crc = cudaGetLastError();
   emptyKernel<<<dimGrid,dimBlock>>>();
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("emptyKernel error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void init_cu(int dev, int *irc) {
/* initialize CUDA with device dev or selects best GPU available       */
/* searches throughs devices, selects the device with the most compute */
/* units, and saves the device id devid                                */
/* if dev is a valid device, it is used, otherwise the GPU with the    */
/* most multi-processors is selected                                   */
/* error code is modified only if there is an error */
   int maxcpus = 0, jm = -1;
   int j, ndevs, maxunits;
   unsigned long msize;
   double z;
   struct cudaDeviceProp prop;
/* returns number of device */
   crc = cudaGetDeviceCount(&ndevs);
   if (crc) {
      printf("cudaGetDeviceCount Error=%i:%s\n",crc,
             cudaGetErrorString(crc));
      *irc = 1;
      return;
   }
/* get information about devices */
   for (j = 0; j < ndevs; j++) {
      crc = cudaGetDeviceProperties(&prop,j);
      if (crc) {
         printf("cudaGetDeviceProperties Error=%i:%s\n",crc,
                cudaGetErrorString(crc));
         prop.name[0] = 0;
      }
      maxunits = prop.multiProcessorCount;
      if (dev <= 0) {
         printf("j=%i:CUDA_DEVICE_NAME=%s,CUDA_MULTIPROCESSOR_COUNT=%i\n",
                j,prop.name,maxunits);
         msize = prop.totalGlobalMem;
         z = ((double) msize)/1073741824.0;
         mmcc = 10*prop.major + prop.minor;
         printf("    CUDA_GLOBAL_MEM_SIZE=%lu(%f GB),Capability=%d\n",
                msize,(float) z,mmcc);
         printf("    Capability=%d\n",mmcc);
         if (maxunits > maxcpus) {
            maxcpus = maxunits;
            jm = j;
         }
      }
   }
   devid = jm;
   if (dev >= 0)
      devid = dev % ndevs;
   printf("using device j=%i\n",devid);
/* get properties for this device */
   crc = cudaGetDeviceProperties(&prop,devid);
   maxgsx = prop.maxGridSize[0];
   mmcc = 10*prop.major + prop.minor;
/* set device */
   crc = cudaSetDevice(devid);
   if (crc) {
      printf("cudaSetDevice Error=%i:%s\n",crc,
             cudaGetErrorString(crc));
      *irc = 1;
      return;
   }
/* run empty kernel */
   emptykernel();
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void end_cu() {
/* terminate CUDA */
   crc = cudaThreadExit();
   if (crc) {
      printf("cudaThreadExit Error=%d:%s\n",crc,cudaGetErrorString(crc));
   }
   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy1(float a[], float b[], int nx) {
/* 1d copy a = b                            */
/* one block of mx threads copies mx values */
/* ((nx-1)/mx+1) independent blocks         */
/* nx = size of arrays in x                 */
/* local data */
   int j, js, id, mx;
   mx = blockDim.x;
   j = threadIdx.x;
   id = blockIdx.x;

   js = j + mx*id;
   if (js < nx) a[js] = b[js];

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy2a(float a[], float b[], int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies mx values */
/* nbx*ny independent blocks                */
/* local data */
   int j, k, js, id, mx;
   mx = blockDim.x;
   j = threadIdx.x;
   id = blockIdx.x;
   k = blockIdx.y;

   js = j + mx*id;
   if ((js < nx) && (k < ny)) {
      a[js+nx*k] = b[js+nx*k];
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy2b(float a[], float b[], int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   int j, k, mx;
   mx = blockDim.x;
   k = blockIdx.x;

   j = threadIdx.x;
   while (j < nx) {
      if (k < ny)
         a[j+nx*k] = b[j+nx*k];
      j += mx;
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gsaxpy2(float a[], float b[], float s, int nx, int ny) {
/* 2d vector multiplye a = s*b + a          */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   int j, k, mx;
   mx = blockDim.x;
   k = blockIdx.x;

   j = threadIdx.x;
   while (j < nx) {
      if (k < ny)
         a[j+nx*k] = s*b[j+nx*k] + a[j+nx*k];
      j += mx;
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy3(float a[], float b[], int nx, int ny) {
/* 2d copy a = b                                  */
/* one block of mx*my threads copies mx*my values */
/* ((nx-1)/mx+1)*((ny-1)/my+1) independent blocks */
/* local data */
   int j, k, js, ks, idx, idy, mx, my;
   mx = blockDim.x; my = blockDim.y;
   j = threadIdx.x; k = threadIdx.y;
   idx = blockIdx.x; idy = blockIdx.y;

   ks = k + my*idy;
   js = j + mx*idx;
   if ((js < nx) && (ks < ny))
       a[js+nx*ks] = b[js+nx*ks];

   return;
}

/*--------------------------------------------------------------------*/
__global__ void  gtranspose2(float a[], float b[], int nx, int ny) {
/* a = transpose(b)                                   */
/* one block of mx*mx threads transposes mx*mx values */
/* ((nx-1)/mx+1)*((ny-1)/mx+1) independent blocks     */
/* local data */
   int j, k, js, ks, idx, idy, joff, koff, mx, mxv;
   extern __shared__ float s[];
   mx = blockDim.x; mxv = mx + 1;
   j = threadIdx.x; k = threadIdx.y;
   idx = blockIdx.x; idy = blockIdx.y;
   koff = mx*idy;
   joff = mx*idx;

   ks = k + koff;
   js = j + joff;
   if ((js < nx) && (ks < ny))
      s[j+mxv*k] = b[js+nx*ks];
/* synchronize threads */
   __syncthreads();
   js = k + joff;
   ks = j + koff;
   if ((js < nx) && (ks < ny))
      a[ks+ny*js] = s[k+mxv*j];

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gsum1(float a[], float *sa, int nx) {
/* 1d serial sum reductions, each of length mx */
/* sa = sum(a)                                 */
/* local data */
   int j, js, jb, mx, joff, mxm;
   float t;
   extern __shared__ float s[];
   mx = blockDim.x;
   js = threadIdx.x;
   jb = blockIdx.x;
   joff = mx*jb;

   j = js + joff;
/* copy global data to shared memory */
   if (j < nx) s[js] = a[j];
/* synchronize to make sure each thread in block has the data */
   __syncthreads();
   if (js==0) {
      mxm = nx - joff;
      if (mxm > mx) mxm = mx;
/* perform serial local sum reduction: result in t */
      t = 0.0f;
      for (j = 0; j < mxm; j++) {
         t += s[j];
      }
/* accumulate results to global memory for each block */
/* for devices with compute capability 2.x            */
      atomicAdd(&sa[0],t);
   }

   return;
}

/*--------------------------------------------------------------------*/
__device__ void lsum2(float *sdata, int n) {
/* finds local sum of nths data items shared by threads */
/* using binary tree method. input is modified. */
/* local data */
   int l, k;
   float s;
   l = threadIdx.x;
   k = blockDim.x >> 1;
   s = 0.0f;

   if (l < n) s = sdata[l];
   while (k > 0) {
      if (l < k) {
         if ((l+k) < n) {
            s += sdata[l+k];
            sdata[l] = s;
         }
      }
      __syncthreads();
      k >>= 1;
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gsum2(float a[], float d[], int nx) {
/* segmented 1d sum reductions, each of length mx             */
/* forall (j = 1:nbx); d(j) = sum(a(1+mx*(j-1):min(nx,mx*j))) */
/* parallel summation                                         */
/* local data */
   int j, js, jb, mx, joff, mxm;
   extern __shared__ float s[];
   mx = blockDim.x;
   js = threadIdx.x;
   jb = blockIdx.x;
   joff = mx*jb;

   j = js + joff;
/* copy global data to shared memory */
   if (j < nx) s[js] = a[j];
/* synchronize to make sure each thread in block has the data */
   __syncthreads();
   mxm = nx - joff;
   if (mxm > mx) mxm = mx;
/* perform parallel local sum reduction: result in s[0] */
   lsum2(s,mxm);
/* write out result to global memory for each block */
   if (js==0) d[jb] = s[0];

   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy1(float *a, float *b, int mx, int nx) {
/* 2d copy of length nx, with block size mx */
/* one block of mx threads copies mx values */
/* ((nx-1)/mx+1) independent blocks         */
/* local data */
   int nbx;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
   crc = cudaGetLastError();
 
   gcopy1<<<dimGrid,dimBlock>>>(a,b,nx);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gcopy1 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2a(float *a, float *b, int mx, int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies mx values */
/* nbx*ny independent blocks                */
/* local data */
   int nbx;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx,ny);
   crc = cudaGetLastError();

   gcopy2a<<<dimGrid,dimBlock>>>(a,b,nx,ny);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gcopy2a error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2b(float *a, float *b, int mx, int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   dim3 dimBlock(mx);
   dim3 dimGrid(ny);
   crc = cudaGetLastError();

   gcopy2b<<<dimGrid,dimBlock>>>(a,b,nx,ny);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gcopy2b error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_saxpy2(float *a, float *b, float s, int mx, int nx,
                           int ny) {
/* 2d vector multiply a = s*b + a           */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   dim3 dimBlock(mx);
   dim3 dimGrid(ny);
   crc = cudaGetLastError();

   gsaxpy2<<<dimGrid,dimBlock>>>(a,b,s,nx,ny);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gsaxpy2 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy3(float *a, float *b, int mx, int my, int nx,
                          int ny) {
/* 2d copy a = b                                  */
/* one block of mx*my threads copies mx*my values */
/* ((nx-1)/mx+1)*((ny-1)/my+1) independent blocks */
/* local data */
   int nbx, nby;
   nbx = (nx - 1)/mx + 1; nby = (ny - 1)/my + 1;
   dim3 dimBlock(mx,my);
   dim3 dimGrid(nbx,nby);
   crc = cudaGetLastError();

   gcopy3<<<dimGrid,dimBlock>>>(a,b,nx,ny);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gcopy3 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void  gpu_transpose2(float *a, float *b, int mx, int nx,
                                int ny) {
/* 2d transpose of length nx, ny, with block size mx, mx */
/* one block of mx*mx threads transposes mx*mx values    */
/* ((nx-1)/mx+1)*((ny-1)/mx+1) independent blocks        */
/* local data */
   int nbx, nby, ns;
   nbx = (nx - 1)/mx + 1; nby = (ny - 1)/mx + 1;
   dim3 dimBlock(mx,mx);
   dim3 dimGrid(nbx,nby);
/* calculate size of shared memory */
   ns = (mx + 1)*mx*sizeof(float);
   crc = cudaGetLastError();

   gtranspose2<<<dimGrid,dimBlock,ns>>>(a,b,nx,ny);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gtranspose2 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum1(float *a, float *sa, int mx, int nx) {
/* 1d serial sum reductions, each of length mx */
/* one block of mx threads sums mx values      */
/* ((nx-1)/mx+1) independent blocks            */
/* local data */
   int nbx, ns;
   float t;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
   t = 0.0f;
   gpu_fcopyin(&t,sa,1);
/* calculate size of shared memory */
   ns = mx*sizeof(float);
   crc = cudaGetLastError();
 
   gsum1<<<dimGrid,dimBlock,ns>>>(a,sa,nx);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gsum1 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum2(float *a, float *d, int mx, int nx) {
/* segmented 1d parallel sum reductions, each of length mx */
/* one block of mx threads sums mx values                  */
/* ((nx-1)/mx+1) independent blocks                        */
/* local data */
   int nbx, ns;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
/* calculate size of shared memory */
   ns = mx*sizeof(float);
   crc = cudaGetLastError();
 
   gsum2<<<dimGrid,dimBlock,ns>>>(a,d,nx);
 
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gsum2 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum3(float *a, float *d, float *sa, int mx,
                         int nx) {
/* segmented 1d parallel sum reductions   */
/* one block of mx threads sums mx values */
/* ((nx-1)/mx+1) independent blocks       */
/* local data */
   int nxs, nbx, n, ns;
   nxs = nx;
   nbx = (nxs - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
/* calculate size of shared memory */
   ns = mx*sizeof(float);
   crc = cudaGetLastError();
   gsum2<<<dimGrid,dimBlock,ns>>>(a,d,nxs);
/* cudaThreadSynchronize(); */
   crc = cudaGetLastError();
   if (crc) {
      printf("gsum2:0 error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
/* write out result */
   if (nbx==1) {
      dimGrid.x = 1;
      crc = cudaGetLastError();
      gcopy1<<<dimGrid,dimBlock>>>(sa,d,1);
      cudaThreadSynchronize();
      crc = cudaGetLastError();
      if (crc) {
         printf("gcopy1:0 error=%d:%s\n",crc,cudaGetErrorString(crc));
         exit(1);
      }
      return;
   }
/* reduce further if necessary */
   if (nbx > 1) {
      nxs = nbx;
      nbx = (nxs - 1)/mx + 1;
      dimGrid.x = nbx;
      crc = cudaGetLastError();
      gsum2<<<dimGrid,dimBlock,ns>>>(d,sa,nxs);
      if (nbx==1)
         cudaThreadSynchronize();
      crc = cudaGetLastError();
      if (crc) {
         printf("gsum2:1 error=%d:%s\n",crc,cudaGetErrorString(crc));
         exit(1);
      }
      n = 0;
   }
   if (nbx==1)
      return;
/* iterate if necessary */
   while (nbx > 1) {
      n += nbx;
      nxs = nbx;
      nbx = (nxs - 1)/mx + 1;
      dimGrid.x = nbx;
      crc = cudaGetLastError();
      gsum2<<<dimGrid,dimBlock,ns>>>(&sa[n-nxs],&sa[n],nxs);
/*    cudaThreadSynchronize(); */
      crc = cudaGetLastError();
      if (crc) {
         printf("gsum2:n error=%d:%s\n",crc,cudaGetErrorString(crc));
         exit(1);
      }
   }
/* write out result */
   dimGrid.x = 1;
   crc = cudaGetLastError();
   gcopy1<<<dimGrid,dimBlock>>>(sa,&sa[n],1);
   cudaThreadSynchronize();
   crc = cudaGetLastError();
   if (crc) {
      printf("gcopy1:n error=%d:%s\n",crc,cudaGetErrorString(crc));
      exit(1);
   }
   return;
}


/* Interfaces to Fortran */

/*--------------------------------------------------------------------*/
extern "C" void setgbsize_(int *nblock) {
   setgbsize(*nblock);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" int getmmcc_() {
/* get major and minor computer capability */
   return getmmcc();
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fallocate_(unsigned long *gp_f, int *nsize,
                               int *irc) {
/* allocate global float memory on GPU, return pointer to Fortran */
   float *fptr;
   gpu_fallocate(&fptr,*nsize,irc);
   *gp_f = (long )fptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_iallocate_(unsigned long *gp_i, int *nsize,
                               int *irc) {
/* allocate global integer memory on GPU, return pointer to Fortran */
   int *iptr;
   gpu_iallocate(&iptr,*nsize,irc);
   *gp_i = (long )iptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_deallocate_(unsigned long *gp_d, int *irc) {
/* deallocate global memory on GPU, return pointer to Fortran */
   void *d;
   d = (void *)*gp_d;
   gpu_deallocate(d,irc);
   *gp_d = 0;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyin_(float *f, unsigned long *gp_f,
                                int *nsize) {
/* copy float array from main memory to global GPU memory */
   float *g_f;
   g_f = (float *)*gp_f;
   gpu_fcopyin(f,g_f,*nsize);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyout_(float *f, unsigned long *gp_f,
                              int *nsize) {
/* copy float array from global GPU memory to main memory */
   float *g_f;
   g_f = (float *)*gp_f;
   gpu_fcopyout(f,g_f,*nsize);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void emptykernel_() {
   emptykernel();
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void init_cu_(int *dev, int *irc) {
   init_cu(*dev,irc);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void end_cu_() {
   end_cu();
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy1_(unsigned long *gp_a, unsigned long *gp_b,
                           int *mx, int *nx) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy1(a,b,*mx,*nx);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2a_(unsigned long *gp_a, unsigned long *gp_b,
                            int *mx, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy2a(a,b,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2b_(unsigned long *gp_a, unsigned long *gp_b,
                            int *mx, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy2b(a,b,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_saxpy2_(unsigned long *gp_a, unsigned long *gp_b,
                            float *s, int *mx, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_saxpy2(a,b,*s,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy3_(unsigned long *gp_a, unsigned long *gp_b,
                           int *mx, int *my, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy3(a,b,*mx,*my,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void  gpu_transpose2_(unsigned long *gp_a,
                                 unsigned long *gp_b, int *mx, int *nx,
                                 int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_transpose2(a,b,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum1_(unsigned long *gp_a, unsigned long *gp_sa,
                          int *mx, int *nx) {
   float *a, *sa;
   a = (float *)*gp_a;
   sa = (float *)*gp_sa;
   gpu_sum1(a,sa,*mx,*nx);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum2_(unsigned long *gp_a, unsigned long *gp_d,
                          int *mx, int *nx) {
   float *a, *d;
   a = (float *)*gp_a;
   d = (float *)*gp_d;
   gpu_sum2(a,d,*mx,*nx);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum3_(unsigned long *gp_a, unsigned long *gp_d,
                          unsigned long *gp_sa,int *mx, int *nx) {
   float *a, *d, *sa;
   a = (float *)*gp_a;
   d = (float *)*gp_d;
   sa = (float *)*gp_sa;
   gpu_sum3(a,d,sa,*mx,*nx);
   return;
}

	.file	"tmpxft_00289be8_00000000-6_gpulib2.cudafe1.cpp"
	.text
#APP

#NO_APP
	.type	_ZL26__cudaUnregisterBinaryUtilv, @function
_ZL26__cudaUnregisterBinaryUtilv:
.LFB2068:
	.cfi_startproc
	endbr64
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	jmp	__cudaUnregisterFatBinary@PLT
	.cfi_endproc
.LFE2068:
	.size	_ZL26__cudaUnregisterBinaryUtilv, .-_ZL26__cudaUnregisterBinaryUtilv
	.globl	setgbsize
	.type	setgbsize, @function
setgbsize:
.LFB2027:
	.cfi_startproc
	endbr64
	movl	%edi, nblock_size(%rip)
	ret
	.cfi_endproc
.LFE2027:
	.size	setgbsize, .-setgbsize
	.globl	getmmcc
	.type	getmmcc, @function
getmmcc:
.LFB2028:
	.cfi_startproc
	endbr64
	movl	mmcc(%rip), %eax
	ret
	.cfi_endproc
.LFE2028:
	.size	getmmcc, .-getmmcc
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"cudaMalloc float Error=%d:%s,l=%d\n"
	.text
	.globl	gpu_fallocate
	.type	gpu_fallocate, @function
gpu_fallocate:
.LFB2029:
	.cfi_startproc
	endbr64
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movslq	%esi, %rsi
	movq	%rdx, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	movq	%rsi, %rbx
	salq	$2, %rsi
	subq	$16, %rsp
	.cfi_def_cfa_offset 48
	movq	%fs:40, %rax
	movq	%rax, 8(%rsp)
	xorl	%eax, %eax
	movq	%rsp, %rdi
	call	cudaMalloc@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L5
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	%ebx, %r8d
	leaq	.LC0(%rip), %rsi
	movq	%rax, %rcx
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, (%r12)
.L5:
	movq	(%rsp), %rax
	movq	%rax, 0(%rbp)
	movq	8(%rsp), %rax
	subq	%fs:40, %rax
	je	.L6
	call	__stack_chk_fail@PLT
.L6:
	addq	$16, %rsp
	.cfi_def_cfa_offset 32
	popq	%rbx
	.cfi_def_cfa_offset 24
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2029:
	.size	gpu_fallocate, .-gpu_fallocate
	.section	.rodata.str1.1
.LC1:
	.string	"cudaMalloc int Error=%d:%s,l=%d\n"
	.text
	.globl	gpu_iallocate
	.type	gpu_iallocate, @function
gpu_iallocate:
.LFB2030:
	.cfi_startproc
	endbr64
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movslq	%esi, %rsi
	movq	%rdx, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	movq	%rsi, %rbx
	salq	$2, %rsi
	subq	$16, %rsp
	.cfi_def_cfa_offset 48
	movq	%fs:40, %rax
	movq	%rax, 8(%rsp)
	xorl	%eax, %eax
	movq	%rsp, %rdi
	call	cudaMalloc@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L13
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	%ebx, %r8d
	leaq	.LC1(%rip), %rsi
	movq	%rax, %rcx
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, (%r12)
.L13:
	movq	(%rsp), %rax
	movq	%rax, 0(%rbp)
	movq	8(%rsp), %rax
	subq	%fs:40, %rax
	je	.L14
	call	__stack_chk_fail@PLT
.L14:
	addq	$16, %rsp
	.cfi_def_cfa_offset 32
	popq	%rbx
	.cfi_def_cfa_offset 24
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2030:
	.size	gpu_iallocate, .-gpu_iallocate
	.section	.rodata.str1.1
.LC2:
	.string	"cudaFree Error=%d:%s\n"
	.text
	.globl	gpu_deallocate
	.type	gpu_deallocate, @function
gpu_deallocate:
.LFB2031:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rsi, %rbx
	call	cudaFree@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L19
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC2(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, (%rbx)
.L19:
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2031:
	.size	gpu_deallocate, .-gpu_deallocate
	.section	.rodata.str1.1
.LC3:
	.string	"cudaMemcpyHostToDevice float Error=%d:%s\n"
	.text
	.globl	gpu_fcopyin
	.type	gpu_fcopyin, @function
gpu_fcopyin:
.LFB2032:
	.cfi_startproc
	endbr64
	pushq	%rcx
	.cfi_def_cfa_offset 16
	movq	%rdi, %rax
	movslq	%edx, %rdx
	movq	%rsi, %rdi
	salq	$2, %rdx
	movl	$1, %ecx
	movq	%rax, %rsi
	call	cudaMemcpy@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L25
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC3(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L25:
	popq	%rax
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2032:
	.size	gpu_fcopyin, .-gpu_fcopyin
	.section	.rodata.str1.1
.LC4:
	.string	"cudaMemcpyDeviceToHost float Error=%d:%s\n"
	.text
	.globl	gpu_fcopyout
	.type	gpu_fcopyout, @function
gpu_fcopyout:
.LFB2033:
	.cfi_startproc
	endbr64
	pushq	%rcx
	.cfi_def_cfa_offset 16
	movslq	%edx, %rdx
	movl	$2, %ecx
	salq	$2, %rdx
	call	cudaMemcpy@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L28
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC4(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L28:
	popq	%rax
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2033:
	.size	gpu_fcopyout, .-gpu_fcopyout
	.section	.rodata.str1.1
.LC5:
	.string	"cudaThreadExit Error=%d:%s\n"
	.text
	.globl	end_cu
	.type	end_cu, @function
end_cu:
.LFB2036:
	.cfi_startproc
	endbr64
	pushq	%r9
	.cfi_def_cfa_offset 16
	call	cudaThreadExit@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L31
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	popq	%r8
	.cfi_remember_state
	.cfi_def_cfa_offset 8
	movq	%rax, %rcx
	leaq	.LC5(%rip), %rsi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
.L31:
	.cfi_restore_state
	popq	%rax
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2036:
	.size	end_cu, .-end_cu
	.globl	_Z5lsum2Pfi
	.type	_Z5lsum2Pfi, @function
_Z5lsum2Pfi:
.LFB2037:
	.cfi_startproc
	endbr64
	pushq	%rax
	.cfi_def_cfa_offset 16
	popq	%rax
	.cfi_def_cfa_offset 8
	subq	$24, %rsp
	.cfi_def_cfa_offset 32
	movl	$1, 12(%rsp)
	movl	12(%rsp), %edi
	call	exit@PLT
	.cfi_endproc
.LFE2037:
	.size	_Z5lsum2Pfi, .-_Z5lsum2Pfi
	.globl	setgbsize_
	.type	setgbsize_, @function
setgbsize_:
.LFB2047:
	.cfi_startproc
	endbr64
	movl	(%rdi), %eax
	movl	%eax, nblock_size(%rip)
	ret
	.cfi_endproc
.LFE2047:
	.size	setgbsize_, .-setgbsize_
	.globl	getmmcc_
	.type	getmmcc_, @function
getmmcc_:
.LFB2226:
	.cfi_startproc
	endbr64
	movl	mmcc(%rip), %eax
	ret
	.cfi_endproc
.LFE2226:
	.size	getmmcc_, .-getmmcc_
	.globl	gpu_fallocate_
	.type	gpu_fallocate_, @function
gpu_fallocate_:
.LFB2049:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movl	(%rsi), %esi
	movq	%fs:40, %rax
	movq	%rax, 8(%rsp)
	xorl	%eax, %eax
	movq	%rsp, %rdi
	call	gpu_fallocate
	movq	(%rsp), %rax
	movq	%rax, (%rbx)
	movq	8(%rsp), %rax
	subq	%fs:40, %rax
	je	.L39
	call	__stack_chk_fail@PLT
.L39:
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2049:
	.size	gpu_fallocate_, .-gpu_fallocate_
	.globl	gpu_iallocate_
	.type	gpu_iallocate_, @function
gpu_iallocate_:
.LFB2050:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movl	(%rsi), %esi
	movq	%fs:40, %rax
	movq	%rax, 8(%rsp)
	xorl	%eax, %eax
	movq	%rsp, %rdi
	call	gpu_iallocate
	movq	(%rsp), %rax
	movq	%rax, (%rbx)
	movq	8(%rsp), %rax
	subq	%fs:40, %rax
	je	.L42
	call	__stack_chk_fail@PLT
.L42:
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2050:
	.size	gpu_iallocate_, .-gpu_iallocate_
	.globl	gpu_deallocate_
	.type	gpu_deallocate_, @function
gpu_deallocate_:
.LFB2051:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	movq	(%rdi), %rdi
	call	gpu_deallocate
	xorl	%eax, %eax
	movq	%rax, (%rbx)
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2051:
	.size	gpu_deallocate_, .-gpu_deallocate_
	.globl	gpu_fcopyin_
	.type	gpu_fcopyin_, @function
gpu_fcopyin_:
.LFB2052:
	.cfi_startproc
	endbr64
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	jmp	gpu_fcopyin
	.cfi_endproc
.LFE2052:
	.size	gpu_fcopyin_, .-gpu_fcopyin_
	.globl	gpu_fcopyout_
	.type	gpu_fcopyout_, @function
gpu_fcopyout_:
.LFB2053:
	.cfi_startproc
	endbr64
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	jmp	gpu_fcopyout
	.cfi_endproc
.LFE2053:
	.size	gpu_fcopyout_, .-gpu_fcopyout_
	.globl	end_cu_
	.type	end_cu_, @function
end_cu_:
.LFB2056:
	.cfi_startproc
	endbr64
	jmp	end_cu
	.cfi_endproc
.LFE2056:
	.size	end_cu_, .-end_cu_
	.globl	_Z30__device_stub__Z11emptyKernelvv
	.type	_Z30__device_stub__Z11emptyKernelvv, @function
_Z30__device_stub__Z11emptyKernelvv:
.LFB2090:
	.cfi_startproc
	endbr64
	subq	$88, %rsp
	.cfi_def_cfa_offset 96
	movq	%fs:40, %rax
	movq	%rax, 72(%rsp)
	movabsq	$4294967297, %rax
	leaq	8(%rsp), %rcx
	movq	%rsp, %rdx
	leaq	28(%rsp), %rsi
	leaq	16(%rsp), %rdi
	movl	$1, 24(%rsp)
	movl	$1, 36(%rsp)
	movq	%rax, 16(%rsp)
	movq	%rax, 28(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L49
	pushq	8(%rsp)
	.cfi_def_cfa_offset 104
	leaq	_Z11emptyKernelv(%rip), %rdi
	pushq	8(%rsp)
	.cfi_def_cfa_offset 112
	movq	44(%rsp), %rcx
	movl	52(%rsp), %r8d
	movq	32(%rsp), %rsi
	movl	40(%rsp), %edx
	leaq	80(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 104
	popq	%rdx
	.cfi_def_cfa_offset 96
.L49:
	movq	72(%rsp), %rax
	subq	%fs:40, %rax
	je	.L51
	call	__stack_chk_fail@PLT
.L51:
	addq	$88, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2090:
	.size	_Z30__device_stub__Z11emptyKernelvv, .-_Z30__device_stub__Z11emptyKernelvv
	.globl	_Z11emptyKernelv
	.type	_Z11emptyKernelv, @function
_Z11emptyKernelv:
.LFB2091:
	.cfi_startproc
	endbr64
	jmp	_Z30__device_stub__Z11emptyKernelvv
	.cfi_endproc
.LFE2091:
	.size	_Z11emptyKernelv, .-_Z11emptyKernelv
	.section	.rodata.str1.1
.LC6:
	.string	"emptyKernel error=%d:%s\n"
	.text
	.globl	emptykernel
	.type	emptykernel, @function
emptykernel:
.LFB2034:
	.cfi_startproc
	endbr64
	subq	$40, %rsp
	.cfi_def_cfa_offset 48
	movl	nblock_size(%rip), %esi
	movl	ngrid_size(%rip), %eax
	movl	$32768, %ecx
	movl	$1, 28(%rsp)
	cmpl	%ecx, %esi
	movl	%esi, 8(%rsp)
	cmovle	%esi, %ecx
	decl	%eax
	cltd
	idivl	%ecx
	movl	%ecx, 20(%rsp)
	movabsq	$4294967297, %rdx
	movq	%rdx, 12(%rsp)
	incl	%eax
	movl	%eax, 24(%rsp)
	call	cudaGetLastError@PLT
	movl	16(%rsp), %ecx
	movl	28(%rsp), %esi
	xorl	%r9d, %r9d
	movq	8(%rsp), %rdx
	movq	20(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L55
	call	_Z30__device_stub__Z11emptyKernelvv
.L55:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L54
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC6(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L54:
	addq	$40, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2034:
	.size	emptykernel, .-emptykernel
	.section	.rodata.str1.1
.LC7:
	.string	"cudaGetDeviceCount Error=%i:%s\n"
.LC8:
	.string	"cudaGetDeviceProperties Error=%i:%s\n"
.LC9:
	.string	"j=%i:CUDA_DEVICE_NAME=%s,CUDA_MULTIPROCESSOR_COUNT=%i\n"
.LC11:
	.string	"    CUDA_GLOBAL_MEM_SIZE=%lu(%f GB),Capability=%d\n"
.LC12:
	.string	"    Capability=%d\n"
.LC13:
	.string	"using device j=%i\n"
.LC14:
	.string	"cudaSetDevice Error=%i:%s\n"
	.text
	.globl	init_cu
	.type	init_cu, @function
init_cu:
.LFB2035:
	.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
	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
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	movl	%edi, %ebx
	subq	$1080, %rsp
	.cfi_def_cfa_offset 1136
	movq	%fs:40, %rax
	movq	%rax, 1064(%rsp)
	xorl	%eax, %eax
	leaq	28(%rsp), %rdi
	call	cudaGetDeviceCount@PLT
	movl	%eax, _ZL3crc(%rip)
	testl	%eax, %eax
	je	.L71
	movl	%eax, %edi
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC7(%rip), %rsi
	movq	%rax, %rcx
	jmp	.L77
.L71:
	xorl	%ebp, %ebp
	orl	$-1, %r12d
	xorl	%r14d, %r14d
.L59:
	movl	28(%rsp), %ecx
	leaq	32(%rsp), %rax
	movq	%rax, 8(%rsp)
	cmpl	%ebp, %ecx
	jle	.L78
	movq	8(%rsp), %rdi
	movl	%ebp, %esi
	call	cudaGetDeviceProperties_v2@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L61
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC8(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movb	$0, 32(%rsp)
.L61:
	testl	%ebx, %ebx
	jg	.L62
	movq	8(%rsp), %rcx
	movl	%ebp, %edx
	leaq	.LC9(%rip), %rsi
	xorl	%eax, %eax
	movl	420(%rsp), %r15d
	movl	$2, %edi
	movl	%r15d, %r8d
	call	__printf_chk@PLT
	movq	320(%rsp), %rdx
	imull	$10, 392(%rsp), %ecx
	addl	396(%rsp), %ecx
	movl	%ecx, mmcc(%rip)
	testq	%rdx, %rdx
	js	.L63
	cvtsi2sdq	%rdx, %xmm0
	jmp	.L64
.L63:
	movq	%rdx, %rax
	movq	%rdx, %rsi
	shrq	%rax
	andl	$1, %esi
	orq	%rsi, %rax
	cvtsi2sdq	%rax, %xmm0
	addsd	%xmm0, %xmm0
.L64:
	mulsd	.LC10(%rip), %xmm0
	leaq	.LC11(%rip), %rsi
	movl	$2, %edi
	movb	$1, %al
	cvtsd2ss	%xmm0, %xmm0
	cvtss2sd	%xmm0, %xmm0
	call	__printf_chk@PLT
	xorl	%eax, %eax
	movl	mmcc(%rip), %edx
	leaq	.LC12(%rip), %rsi
	movl	$2, %edi
	call	__printf_chk@PLT
	cmpl	%r15d, %r14d
	jl	.L72
.L62:
	movl	%r14d, %r15d
	jmp	.L65
.L72:
	movl	%ebp, %r12d
.L65:
	incl	%ebp
	movl	%r15d, %r14d
	jmp	.L59
.L78:
	testl	%ebx, %ebx
	js	.L67
	movl	%ebx, %eax
	cltd
	idivl	%ecx
	movl	%edx, %r12d
.L67:
	movl	%r12d, %edx
	leaq	.LC13(%rip), %rsi
	movl	$2, %edi
	xorl	%eax, %eax
	movl	%r12d, _ZL5devid(%rip)
	call	__printf_chk@PLT
	movl	_ZL5devid(%rip), %esi
	movq	8(%rsp), %rdi
	call	cudaGetDeviceProperties_v2@PLT
	movl	_ZL5devid(%rip), %edi
	movl	%eax, _ZL3crc(%rip)
	movl	368(%rsp), %eax
	movl	%eax, maxgsx(%rip)
	imull	$10, 392(%rsp), %eax
	addl	396(%rsp), %eax
	movl	%eax, mmcc(%rip)
	call	cudaSetDevice@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L68
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC14(%rip), %rsi
	movq	%rax, %rcx
.L77:
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, 0(%r13)
	jmp	.L58
.L68:
	call	emptykernel
.L58:
	movq	1064(%rsp), %rax
	subq	%fs:40, %rax
	je	.L70
	call	__stack_chk_fail@PLT
.L70:
	addq	$1080, %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
.LFE2035:
	.size	init_cu, .-init_cu
	.globl	init_cu_
	.type	init_cu_, @function
init_cu_:
.LFB2055:
	.cfi_startproc
	endbr64
	movl	(%rdi), %edi
	jmp	init_cu
	.cfi_endproc
.LFE2055:
	.size	init_cu_, .-init_cu_
	.globl	emptykernel_
	.type	emptykernel_, @function
emptykernel_:
.LFB2054:
	.cfi_startproc
	endbr64
	jmp	emptykernel
	.cfi_endproc
.LFE2054:
	.size	emptykernel_, .-emptykernel_
	.globl	_Z28__device_stub__Z6gcopy1PfS_iPfS_i
	.type	_Z28__device_stub__Z6gcopy1PfS_iPfS_i, @function
_Z28__device_stub__Z6gcopy1PfS_iPfS_i:
.LFB2092:
	.cfi_startproc
	endbr64
	subq	$136, %rsp
	.cfi_def_cfa_offset 144
	movq	%rdi, 24(%rsp)
	leaq	40(%rsp), %rcx
	leaq	48(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	60(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	32(%rsp), %rdx
	movq	%fs:40, %rax
	movq	%rax, 120(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 56(%rsp)
	movq	%rax, 96(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 104(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 112(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 48(%rsp)
	movq	%rax, 60(%rsp)
	movl	$1, 68(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L81
	pushq	40(%rsp)
	.cfi_def_cfa_offset 152
	leaq	_Z6gcopy1PfS_i(%rip), %rdi
	pushq	40(%rsp)
	.cfi_def_cfa_offset 160
	movq	76(%rsp), %rcx
	movl	84(%rsp), %r8d
	movq	64(%rsp), %rsi
	movl	72(%rsp), %edx
	leaq	112(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 152
	popq	%rdx
	.cfi_def_cfa_offset 144
.L81:
	movq	120(%rsp), %rax
	subq	%fs:40, %rax
	je	.L83
	call	__stack_chk_fail@PLT
.L83:
	addq	$136, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2092:
	.size	_Z28__device_stub__Z6gcopy1PfS_iPfS_i, .-_Z28__device_stub__Z6gcopy1PfS_iPfS_i
	.globl	_Z6gcopy1PfS_i
	.type	_Z6gcopy1PfS_i, @function
_Z6gcopy1PfS_i:
.LFB2093:
	.cfi_startproc
	endbr64
	jmp	_Z28__device_stub__Z6gcopy1PfS_iPfS_i
	.cfi_endproc
.LFE2093:
	.size	_Z6gcopy1PfS_i, .-_Z6gcopy1PfS_i
	.section	.rodata.str1.1
.LC15:
	.string	"gcopy1 error=%d:%s\n"
	.text
	.globl	gpu_copy1
	.type	gpu_copy1, @function
gpu_copy1:
.LFB2038:
	.cfi_startproc
	endbr64
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movl	%ecx, %r12d
	movabsq	$4294967297, %rcx
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	leal	-1(%r12), %eax
	movq	%rsi, %rbp
	movl	%edx, %esi
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	movq	%rdi, %rbx
	subq	$32, %rsp
	.cfi_def_cfa_offset 64
	movl	%edx, 8(%rsp)
	cltd
	idivl	%esi
	movq	%rcx, 12(%rsp)
	movq	%rcx, 24(%rsp)
	incl	%eax
	movl	%eax, 20(%rsp)
	call	cudaGetLastError@PLT
	movl	16(%rsp), %ecx
	movl	28(%rsp), %esi
	xorl	%r9d, %r9d
	movq	8(%rsp), %rdx
	movq	20(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L87
	movl	%r12d, %edx
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	call	_Z28__device_stub__Z6gcopy1PfS_iPfS_i
.L87:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L86
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC15(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L86:
	addq	$32, %rsp
	.cfi_def_cfa_offset 32
	popq	%rbx
	.cfi_def_cfa_offset 24
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2038:
	.size	gpu_copy1, .-gpu_copy1
	.globl	gpu_copy1_
	.type	gpu_copy1_, @function
gpu_copy1_:
.LFB2057:
	.cfi_startproc
	endbr64
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_copy1
	.cfi_endproc
.LFE2057:
	.size	gpu_copy1_, .-gpu_copy1_
	.globl	_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii
	.type	_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii, @function
_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii:
.LFB2094:
	.cfi_startproc
	endbr64
	subq	$152, %rsp
	.cfi_def_cfa_offset 160
	movq	%rdi, 24(%rsp)
	leaq	56(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	68(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	40(%rsp), %rdx
	movl	%ecx, 8(%rsp)
	leaq	48(%rsp), %rcx
	movq	%fs:40, %rax
	movq	%rax, 136(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 64(%rsp)
	movq	%rax, 104(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 112(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 128(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 56(%rsp)
	movq	%rax, 68(%rsp)
	movl	$1, 76(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L91
	pushq	48(%rsp)
	.cfi_def_cfa_offset 168
	leaq	_Z7gcopy2aPfS_ii(%rip), %rdi
	pushq	48(%rsp)
	.cfi_def_cfa_offset 176
	movq	84(%rsp), %rcx
	movl	92(%rsp), %r8d
	movq	72(%rsp), %rsi
	movl	80(%rsp), %edx
	leaq	120(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 168
	popq	%rdx
	.cfi_def_cfa_offset 160
.L91:
	movq	136(%rsp), %rax
	subq	%fs:40, %rax
	je	.L93
	call	__stack_chk_fail@PLT
.L93:
	addq	$152, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2094:
	.size	_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii, .-_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii
	.globl	_Z7gcopy2aPfS_ii
	.type	_Z7gcopy2aPfS_ii, @function
_Z7gcopy2aPfS_ii:
.LFB2095:
	.cfi_startproc
	endbr64
	jmp	_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii
	.cfi_endproc
.LFE2095:
	.size	_Z7gcopy2aPfS_ii, .-_Z7gcopy2aPfS_ii
	.section	.rodata.str1.1
.LC16:
	.string	"gcopy2a error=%d:%s\n"
	.text
	.globl	gpu_copy2a
	.type	gpu_copy2a, @function
gpu_copy2a:
.LFB2039:
	.cfi_startproc
	endbr64
	movabsq	$4294967297, %rax
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	movl	%r8d, %r13d
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movl	%ecx, %r12d
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%rsi, %rbp
	movl	%edx, %esi
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movq	%rdi, %rbx
	subq	$40, %rsp
	.cfi_def_cfa_offset 80
	movq	%rax, 12(%rsp)
	leal	-1(%rcx), %eax
	movl	%edx, 8(%rsp)
	cltd
	idivl	%esi
	movl	%r8d, 24(%rsp)
	movl	$1, 28(%rsp)
	incl	%eax
	movl	%eax, 20(%rsp)
	call	cudaGetLastError@PLT
	movl	16(%rsp), %ecx
	movl	28(%rsp), %esi
	xorl	%r9d, %r9d
	movq	8(%rsp), %rdx
	movq	20(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L97
	movl	%r13d, %ecx
	movl	%r12d, %edx
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	call	_Z30__device_stub__Z7gcopy2aPfS_iiPfS_ii
.L97:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L96
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC16(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L96:
	addq	$40, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2039:
	.size	gpu_copy2a, .-gpu_copy2a
	.globl	gpu_copy2a_
	.type	gpu_copy2a_, @function
gpu_copy2a_:
.LFB2058:
	.cfi_startproc
	endbr64
	movl	(%r8), %r8d
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_copy2a
	.cfi_endproc
.LFE2058:
	.size	gpu_copy2a_, .-gpu_copy2a_
	.globl	_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii
	.type	_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii, @function
_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii:
.LFB2096:
	.cfi_startproc
	endbr64
	subq	$152, %rsp
	.cfi_def_cfa_offset 160
	movq	%rdi, 24(%rsp)
	leaq	56(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	68(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	40(%rsp), %rdx
	movl	%ecx, 8(%rsp)
	leaq	48(%rsp), %rcx
	movq	%fs:40, %rax
	movq	%rax, 136(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 64(%rsp)
	movq	%rax, 104(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 112(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 128(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 56(%rsp)
	movq	%rax, 68(%rsp)
	movl	$1, 76(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L101
	pushq	48(%rsp)
	.cfi_def_cfa_offset 168
	leaq	_Z7gcopy2bPfS_ii(%rip), %rdi
	pushq	48(%rsp)
	.cfi_def_cfa_offset 176
	movq	84(%rsp), %rcx
	movl	92(%rsp), %r8d
	movq	72(%rsp), %rsi
	movl	80(%rsp), %edx
	leaq	120(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 168
	popq	%rdx
	.cfi_def_cfa_offset 160
.L101:
	movq	136(%rsp), %rax
	subq	%fs:40, %rax
	je	.L103
	call	__stack_chk_fail@PLT
.L103:
	addq	$152, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2096:
	.size	_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii, .-_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii
	.globl	_Z7gcopy2bPfS_ii
	.type	_Z7gcopy2bPfS_ii, @function
_Z7gcopy2bPfS_ii:
.LFB2097:
	.cfi_startproc
	endbr64
	jmp	_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii
	.cfi_endproc
.LFE2097:
	.size	_Z7gcopy2bPfS_ii, .-_Z7gcopy2bPfS_ii
	.section	.rodata.str1.1
.LC17:
	.string	"gcopy2b error=%d:%s\n"
	.text
	.globl	gpu_copy2b
	.type	gpu_copy2b, @function
gpu_copy2b:
.LFB2040:
	.cfi_startproc
	endbr64
	movabsq	$4294967297, %rax
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	movl	%ecx, %r13d
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movq	%rsi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movl	%r8d, %ebx
	subq	$40, %rsp
	.cfi_def_cfa_offset 80
	movl	%edx, 8(%rsp)
	movl	%r8d, 20(%rsp)
	movq	%rax, 12(%rsp)
	movq	%rax, 24(%rsp)
	call	cudaGetLastError@PLT
	movl	16(%rsp), %ecx
	movl	28(%rsp), %esi
	xorl	%r9d, %r9d
	movq	8(%rsp), %rdx
	movq	20(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L107
	movl	%ebx, %ecx
	movl	%r13d, %edx
	movq	%r12, %rsi
	movq	%rbp, %rdi
	call	_Z30__device_stub__Z7gcopy2bPfS_iiPfS_ii
.L107:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L106
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC17(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L106:
	addq	$40, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2040:
	.size	gpu_copy2b, .-gpu_copy2b
	.globl	gpu_copy2b_
	.type	gpu_copy2b_, @function
gpu_copy2b_:
.LFB2059:
	.cfi_startproc
	endbr64
	movl	(%r8), %r8d
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_copy2b
	.cfi_endproc
.LFE2059:
	.size	gpu_copy2b_, .-gpu_copy2b_
	.globl	_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii
	.type	_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii, @function
_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii:
.LFB2098:
	.cfi_startproc
	endbr64
	subq	$152, %rsp
	.cfi_def_cfa_offset 160
	movq	%rdi, 24(%rsp)
	leaq	48(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	60(%rsp), %rsi
	movl	%edx, 8(%rsp)
	leaq	32(%rsp), %rdx
	movl	%ecx, 4(%rsp)
	leaq	40(%rsp), %rcx
	movss	%xmm0, 12(%rsp)
	movq	%fs:40, %rax
	movq	%rax, 136(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 56(%rsp)
	movq	%rax, 96(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 104(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 112(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	4(%rsp), %rax
	movq	%rax, 128(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 48(%rsp)
	movq	%rax, 60(%rsp)
	movl	$1, 68(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L111
	pushq	40(%rsp)
	.cfi_def_cfa_offset 168
	leaq	_Z7gsaxpy2PfS_fii(%rip), %rdi
	pushq	40(%rsp)
	.cfi_def_cfa_offset 176
	movq	76(%rsp), %rcx
	movl	84(%rsp), %r8d
	movq	64(%rsp), %rsi
	movl	72(%rsp), %edx
	leaq	112(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 168
	popq	%rdx
	.cfi_def_cfa_offset 160
.L111:
	movq	136(%rsp), %rax
	subq	%fs:40, %rax
	je	.L113
	call	__stack_chk_fail@PLT
.L113:
	addq	$152, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2098:
	.size	_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii, .-_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii
	.globl	_Z7gsaxpy2PfS_fii
	.type	_Z7gsaxpy2PfS_fii, @function
_Z7gsaxpy2PfS_fii:
.LFB2099:
	.cfi_startproc
	endbr64
	jmp	_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii
	.cfi_endproc
.LFE2099:
	.size	_Z7gsaxpy2PfS_fii, .-_Z7gsaxpy2PfS_fii
	.section	.rodata.str1.1
.LC18:
	.string	"gsaxpy2 error=%d:%s\n"
	.text
	.globl	gpu_saxpy2
	.type	gpu_saxpy2, @function
gpu_saxpy2:
.LFB2041:
	.cfi_startproc
	endbr64
	movabsq	$4294967297, %rax
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	movl	%ecx, %r13d
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movq	%rsi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movl	%r8d, %ebx
	subq	$56, %rsp
	.cfi_def_cfa_offset 96
	movss	%xmm0, 12(%rsp)
	movl	%edx, 24(%rsp)
	movl	%r8d, 36(%rsp)
	movq	%rax, 28(%rsp)
	movq	%rax, 40(%rsp)
	call	cudaGetLastError@PLT
	movl	32(%rsp), %ecx
	movl	44(%rsp), %esi
	xorl	%r9d, %r9d
	movq	24(%rsp), %rdx
	movq	36(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	movss	12(%rsp), %xmm0
	testl	%eax, %eax
	jne	.L117
	movl	%ebx, %ecx
	movl	%r13d, %edx
	movq	%r12, %rsi
	movq	%rbp, %rdi
	call	_Z31__device_stub__Z7gsaxpy2PfS_fiiPfS_fii
.L117:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L116
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC18(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L116:
	addq	$56, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2041:
	.size	gpu_saxpy2, .-gpu_saxpy2
	.globl	gpu_saxpy2_
	.type	gpu_saxpy2_, @function
gpu_saxpy2_:
.LFB2060:
	.cfi_startproc
	endbr64
	movq	%rdx, %rax
	movq	%rcx, %rdx
	movq	%r8, %rcx
	movq	(%rsi), %rsi
	movl	(%r9), %r8d
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movss	(%rax), %xmm0
	movq	(%rdi), %rdi
	jmp	gpu_saxpy2
	.cfi_endproc
.LFE2060:
	.size	gpu_saxpy2_, .-gpu_saxpy2_
	.globl	_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii
	.type	_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii, @function
_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii:
.LFB2100:
	.cfi_startproc
	endbr64
	subq	$152, %rsp
	.cfi_def_cfa_offset 160
	movq	%rdi, 24(%rsp)
	leaq	56(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	68(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	40(%rsp), %rdx
	movl	%ecx, 8(%rsp)
	leaq	48(%rsp), %rcx
	movq	%fs:40, %rax
	movq	%rax, 136(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 64(%rsp)
	movq	%rax, 104(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 112(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 128(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 56(%rsp)
	movq	%rax, 68(%rsp)
	movl	$1, 76(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L121
	pushq	48(%rsp)
	.cfi_def_cfa_offset 168
	leaq	_Z6gcopy3PfS_ii(%rip), %rdi
	pushq	48(%rsp)
	.cfi_def_cfa_offset 176
	movq	84(%rsp), %rcx
	movl	92(%rsp), %r8d
	movq	72(%rsp), %rsi
	movl	80(%rsp), %edx
	leaq	120(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 168
	popq	%rdx
	.cfi_def_cfa_offset 160
.L121:
	movq	136(%rsp), %rax
	subq	%fs:40, %rax
	je	.L123
	call	__stack_chk_fail@PLT
.L123:
	addq	$152, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2100:
	.size	_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii, .-_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii
	.globl	_Z6gcopy3PfS_ii
	.type	_Z6gcopy3PfS_ii, @function
_Z6gcopy3PfS_ii:
.LFB2101:
	.cfi_startproc
	endbr64
	jmp	_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii
	.cfi_endproc
.LFE2101:
	.size	_Z6gcopy3PfS_ii, .-_Z6gcopy3PfS_ii
	.section	.rodata.str1.1
.LC19:
	.string	"gcopy3 error=%d:%s\n"
	.text
	.globl	gpu_copy3
	.type	gpu_copy3, @function
gpu_copy3:
.LFB2042:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	leal	-1(%r8), %eax
	movl	%r9d, %r13d
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movl	%r8d, %r12d
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%rsi, %rbp
	movl	%edx, %esi
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movq	%rdi, %rbx
	subq	$40, %rsp
	.cfi_def_cfa_offset 80
	movl	%edx, 8(%rsp)
	cltd
	idivl	%esi
	movl	%ecx, 12(%rsp)
	movl	$1, 16(%rsp)
	movl	$1, 28(%rsp)
	incl	%eax
	movl	%eax, 20(%rsp)
	leal	-1(%r9), %eax
	cltd
	idivl	%ecx
	incl	%eax
	movl	%eax, 24(%rsp)
	call	cudaGetLastError@PLT
	movl	16(%rsp), %ecx
	movl	28(%rsp), %esi
	xorl	%r9d, %r9d
	movq	8(%rsp), %rdx
	movq	20(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L127
	movl	%r13d, %ecx
	movl	%r12d, %edx
	movq	%rbp, %rsi
	movq	%rbx, %rdi
	call	_Z29__device_stub__Z6gcopy3PfS_iiPfS_ii
.L127:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L126
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC19(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L126:
	addq	$40, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2042:
	.size	gpu_copy3, .-gpu_copy3
	.globl	gpu_copy3_
	.type	gpu_copy3_, @function
gpu_copy3_:
.LFB2061:
	.cfi_startproc
	endbr64
	movl	(%r9), %r9d
	movl	(%r8), %r8d
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_copy3
	.cfi_endproc
.LFE2061:
	.size	gpu_copy3_, .-gpu_copy3_
	.globl	_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii
	.type	_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii, @function
_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii:
.LFB2102:
	.cfi_startproc
	endbr64
	subq	$152, %rsp
	.cfi_def_cfa_offset 160
	movq	%rdi, 24(%rsp)
	leaq	56(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	68(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	40(%rsp), %rdx
	movl	%ecx, 8(%rsp)
	leaq	48(%rsp), %rcx
	movq	%fs:40, %rax
	movq	%rax, 136(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 64(%rsp)
	movq	%rax, 104(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 112(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 120(%rsp)
	leaq	8(%rsp), %rax
	movq	%rax, 128(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 56(%rsp)
	movq	%rax, 68(%rsp)
	movl	$1, 76(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L131
	pushq	48(%rsp)
	.cfi_def_cfa_offset 168
	leaq	_Z11gtranspose2PfS_ii(%rip), %rdi
	pushq	48(%rsp)
	.cfi_def_cfa_offset 176
	movq	84(%rsp), %rcx
	movl	92(%rsp), %r8d
	movq	72(%rsp), %rsi
	movl	80(%rsp), %edx
	leaq	120(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 168
	popq	%rdx
	.cfi_def_cfa_offset 160
.L131:
	movq	136(%rsp), %rax
	subq	%fs:40, %rax
	je	.L133
	call	__stack_chk_fail@PLT
.L133:
	addq	$152, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2102:
	.size	_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii, .-_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii
	.globl	_Z11gtranspose2PfS_ii
	.type	_Z11gtranspose2PfS_ii, @function
_Z11gtranspose2PfS_ii:
.LFB2103:
	.cfi_startproc
	endbr64
	jmp	_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii
	.cfi_endproc
.LFE2103:
	.size	_Z11gtranspose2PfS_ii, .-_Z11gtranspose2PfS_ii
	.section	.rodata.str1.1
.LC20:
	.string	"gtranspose2 error=%d:%s\n"
	.text
	.globl	gpu_transpose2
	.type	gpu_transpose2, @function
gpu_transpose2:
.LFB2043:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	leal	-1(%rcx), %eax
	movl	%r8d, %r14d
	pushq	%r13
	.cfi_def_cfa_offset 24
	.cfi_offset 13, -24
	movl	%ecx, %r13d
	pushq	%r12
	.cfi_def_cfa_offset 32
	.cfi_offset 12, -32
	movq	%rsi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 40
	.cfi_offset 6, -40
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 48
	.cfi_offset 3, -48
	movl	%edx, %ebx
	subq	$32, %rsp
	.cfi_def_cfa_offset 80
	movl	%edx, 8(%rsp)
	movl	%edx, 12(%rsp)
	cltd
	idivl	%ebx
	movl	$1, 16(%rsp)
	movl	$1, 28(%rsp)
	incl	%eax
	movl	%eax, 20(%rsp)
	leal	-1(%r8), %eax
	cltd
	idivl	%ebx
	incl	%eax
	movl	%eax, 24(%rsp)
	call	cudaGetLastError@PLT
	leal	1(%rbx), %r8d
	movl	16(%rsp), %ecx
	xorl	%r9d, %r9d
	imull	%ebx, %r8d
	movq	8(%rsp), %rdx
	movq	20(%rsp), %rdi
	movl	%eax, _ZL3crc(%rip)
	movl	28(%rsp), %esi
	sall	$2, %r8d
	movslq	%r8d, %r8
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L137
	movl	%r14d, %ecx
	movl	%r13d, %edx
	movq	%r12, %rsi
	movq	%rbp, %rdi
	call	_Z35__device_stub__Z11gtranspose2PfS_iiPfS_ii
.L137:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L136
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC20(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L136:
	addq	$32, %rsp
	.cfi_def_cfa_offset 48
	popq	%rbx
	.cfi_def_cfa_offset 40
	popq	%rbp
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r13
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2043:
	.size	gpu_transpose2, .-gpu_transpose2
	.globl	gpu_transpose2_
	.type	gpu_transpose2_, @function
gpu_transpose2_:
.LFB2062:
	.cfi_startproc
	endbr64
	movl	(%r8), %r8d
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_transpose2
	.cfi_endproc
.LFE2062:
	.size	gpu_transpose2_, .-gpu_transpose2_
	.globl	_Z27__device_stub__Z5gsum1PfS_iPfS_i
	.type	_Z27__device_stub__Z5gsum1PfS_iPfS_i, @function
_Z27__device_stub__Z5gsum1PfS_iPfS_i:
.LFB2104:
	.cfi_startproc
	endbr64
	subq	$136, %rsp
	.cfi_def_cfa_offset 144
	movq	%rdi, 24(%rsp)
	leaq	40(%rsp), %rcx
	leaq	48(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	60(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	32(%rsp), %rdx
	movq	%fs:40, %rax
	movq	%rax, 120(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 56(%rsp)
	movq	%rax, 96(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 104(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 112(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 48(%rsp)
	movq	%rax, 60(%rsp)
	movl	$1, 68(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L141
	pushq	40(%rsp)
	.cfi_def_cfa_offset 152
	leaq	_Z5gsum1PfS_i(%rip), %rdi
	pushq	40(%rsp)
	.cfi_def_cfa_offset 160
	movq	76(%rsp), %rcx
	movl	84(%rsp), %r8d
	movq	64(%rsp), %rsi
	movl	72(%rsp), %edx
	leaq	112(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 152
	popq	%rdx
	.cfi_def_cfa_offset 144
.L141:
	movq	120(%rsp), %rax
	subq	%fs:40, %rax
	je	.L143
	call	__stack_chk_fail@PLT
.L143:
	addq	$136, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2104:
	.size	_Z27__device_stub__Z5gsum1PfS_iPfS_i, .-_Z27__device_stub__Z5gsum1PfS_iPfS_i
	.globl	_Z5gsum1PfS_i
	.type	_Z5gsum1PfS_i, @function
_Z5gsum1PfS_i:
.LFB2105:
	.cfi_startproc
	endbr64
	jmp	_Z27__device_stub__Z5gsum1PfS_iPfS_i
	.cfi_endproc
.LFE2105:
	.size	_Z5gsum1PfS_i, .-_Z5gsum1PfS_i
	.section	.rodata.str1.1
.LC22:
	.string	"gsum1 error=%d:%s\n"
	.text
	.globl	gpu_sum1
	.type	gpu_sum1, @function
gpu_sum1:
.LFB2044:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	movl	%ecx, %r13d
	movabsq	$4294967297, %rcx
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movq	%rdi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%rsi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movl	%edx, %ebx
	subq	$56, %rsp
	.cfi_def_cfa_offset 96
	movq	%fs:40, %rax
	movq	%rax, 40(%rsp)
	xorl	%eax, %eax
	leal	-1(%r13), %eax
	movl	%edx, 16(%rsp)
	leaq	12(%rsp), %rdi
	cltd
	movq	%rcx, 20(%rsp)
	idivl	%ebx
	movq	%rcx, 32(%rsp)
	movl	$0x00000000, 12(%rsp)
	movl	$1, %edx
	incl	%eax
	movl	%eax, 28(%rsp)
	call	gpu_fcopyin
	call	cudaGetLastError@PLT
	movl	24(%rsp), %ecx
	movl	36(%rsp), %esi
	xorl	%r9d, %r9d
	movq	16(%rsp), %rdx
	leal	0(,%rbx,4), %r8d
	movq	28(%rsp), %rdi
	movl	%eax, _ZL3crc(%rip)
	movslq	%r8d, %r8
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L147
	movl	%r13d, %edx
	movq	%rbp, %rsi
	movq	%r12, %rdi
	call	_Z27__device_stub__Z5gsum1PfS_iPfS_i
.L147:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L146
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC22(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L146:
	movq	40(%rsp), %rax
	subq	%fs:40, %rax
	je	.L149
	call	__stack_chk_fail@PLT
.L149:
	addq	$56, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2044:
	.size	gpu_sum1, .-gpu_sum1
	.globl	gpu_sum1_
	.type	gpu_sum1_, @function
gpu_sum1_:
.LFB2063:
	.cfi_startproc
	endbr64
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_sum1
	.cfi_endproc
.LFE2063:
	.size	gpu_sum1_, .-gpu_sum1_
	.globl	_Z27__device_stub__Z5gsum2PfS_iPfS_i
	.type	_Z27__device_stub__Z5gsum2PfS_iPfS_i, @function
_Z27__device_stub__Z5gsum2PfS_iPfS_i:
.LFB2106:
	.cfi_startproc
	endbr64
	subq	$136, %rsp
	.cfi_def_cfa_offset 144
	movq	%rdi, 24(%rsp)
	leaq	40(%rsp), %rcx
	leaq	48(%rsp), %rdi
	movq	%rsi, 16(%rsp)
	leaq	60(%rsp), %rsi
	movl	%edx, 12(%rsp)
	leaq	32(%rsp), %rdx
	movq	%fs:40, %rax
	movq	%rax, 120(%rsp)
	xorl	%eax, %eax
	leaq	24(%rsp), %rax
	movl	$1, 56(%rsp)
	movq	%rax, 96(%rsp)
	leaq	16(%rsp), %rax
	movq	%rax, 104(%rsp)
	leaq	12(%rsp), %rax
	movq	%rax, 112(%rsp)
	movabsq	$4294967297, %rax
	movq	%rax, 48(%rsp)
	movq	%rax, 60(%rsp)
	movl	$1, 68(%rsp)
	call	__cudaPopCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L152
	pushq	40(%rsp)
	.cfi_def_cfa_offset 152
	leaq	_Z5gsum2PfS_i(%rip), %rdi
	pushq	40(%rsp)
	.cfi_def_cfa_offset 160
	movq	76(%rsp), %rcx
	movl	84(%rsp), %r8d
	movq	64(%rsp), %rsi
	movl	72(%rsp), %edx
	leaq	112(%rsp), %r9
	call	cudaLaunchKernel@PLT
	popq	%rax
	.cfi_def_cfa_offset 152
	popq	%rdx
	.cfi_def_cfa_offset 144
.L152:
	movq	120(%rsp), %rax
	subq	%fs:40, %rax
	je	.L154
	call	__stack_chk_fail@PLT
.L154:
	addq	$136, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2106:
	.size	_Z27__device_stub__Z5gsum2PfS_iPfS_i, .-_Z27__device_stub__Z5gsum2PfS_iPfS_i
	.globl	_Z5gsum2PfS_i
	.type	_Z5gsum2PfS_i, @function
_Z5gsum2PfS_i:
.LFB2107:
	.cfi_startproc
	endbr64
	jmp	_Z27__device_stub__Z5gsum2PfS_iPfS_i
	.cfi_endproc
.LFE2107:
	.size	_Z5gsum2PfS_i, .-_Z5gsum2PfS_i
	.section	.rodata.str1.1
.LC23:
	.string	"gsum2 error=%d:%s\n"
	.text
	.globl	gpu_sum2
	.type	gpu_sum2, @function
gpu_sum2:
.LFB2045:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	movl	%ecx, %r13d
	movabsq	$4294967297, %rcx
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	leal	-1(%r13), %eax
	movq	%rsi, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%rdi, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movl	%edx, %ebx
	subq	$40, %rsp
	.cfi_def_cfa_offset 80
	movl	%edx, 8(%rsp)
	cltd
	idivl	%ebx
	movq	%rcx, 12(%rsp)
	movq	%rcx, 24(%rsp)
	incl	%eax
	movl	%eax, 20(%rsp)
	call	cudaGetLastError@PLT
	movl	16(%rsp), %ecx
	movl	28(%rsp), %esi
	xorl	%r9d, %r9d
	movq	8(%rsp), %rdx
	leal	0(,%rbx,4), %r8d
	movq	20(%rsp), %rdi
	movl	%eax, _ZL3crc(%rip)
	movslq	%r8d, %r8
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L158
	movl	%r13d, %edx
	movq	%r12, %rsi
	movq	%rbp, %rdi
	call	_Z27__device_stub__Z5gsum2PfS_iPfS_i
.L158:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L157
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	movl	$2, %edi
	leaq	.LC23(%rip), %rsi
	movq	%rax, %rcx
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L157:
	addq	$40, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2045:
	.size	gpu_sum2, .-gpu_sum2
	.globl	gpu_sum2_
	.type	gpu_sum2_, @function
gpu_sum2_:
.LFB2064:
	.cfi_startproc
	endbr64
	movl	(%rcx), %ecx
	movl	(%rdx), %edx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_sum2
	.cfi_endproc
.LFE2064:
	.size	gpu_sum2_, .-gpu_sum2_
	.section	.rodata.str1.1
.LC24:
	.string	"gsum2:0 error=%d:%s\n"
.LC25:
	.string	"gcopy1:0 error=%d:%s\n"
.LC26:
	.string	"gsum2:1 error=%d:%s\n"
.LC27:
	.string	"gsum2:n error=%d:%s\n"
.LC28:
	.string	"gcopy1:n error=%d:%s\n"
	.text
	.globl	gpu_sum3
	.type	gpu_sum3, @function
gpu_sum3:
.LFB2046:
	.cfi_startproc
	endbr64
	leal	-1(%r8), %eax
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	movq	%rdi, %r15
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	movl	%r8d, %r13d
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	movq	%rdx, %r12
	cltd
	idivl	%ecx
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	subq	$56, %rsp
	.cfi_def_cfa_offset 112
	movl	%ecx, %ebp
	movq	%rsi, 8(%rsp)
	movl	%ecx, 24(%rsp)
	leal	1(%rax), %r14d
	movl	%eax, %ebx
	movabsq	$4294967297, %rax
	movq	%rax, 28(%rsp)
	movl	%r14d, 36(%rsp)
	movq	%rax, 40(%rsp)
	call	cudaGetLastError@PLT
	movl	32(%rsp), %ecx
	movl	44(%rsp), %esi
	xorl	%r9d, %r9d
	movq	24(%rsp), %rdx
	movq	36(%rsp), %rdi
	movl	%eax, _ZL3crc(%rip)
	leal	0(,%rbp,4), %eax
	cltq
	movq	%rax, %r8
	movq	%rax, (%rsp)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L163
	movq	8(%rsp), %rsi
	movl	%r13d, %edx
	movq	%r15, %rdi
	call	_Z27__device_stub__Z5gsum2PfS_iPfS_i
.L163:
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L164
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC24(%rip), %rsi
	movq	%rax, %rcx
	jmp	.L189
.L164:
	cmpl	$1, %r14d
	jne	.L165
	movl	$1, 36(%rsp)
	call	cudaGetLastError@PLT
	movl	32(%rsp), %ecx
	movl	44(%rsp), %esi
	xorl	%r9d, %r9d
	movq	24(%rsp), %rdx
	movq	36(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L166
	movq	8(%rsp), %rsi
	movl	$1, %edx
	movq	%r12, %rdi
	call	_Z28__device_stub__Z6gcopy1PfS_iPfS_i
.L166:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L162
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC25(%rip), %rsi
	movq	%rax, %rcx
.L189:
	movl	$2, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$1, %edi
	call	exit@PLT
.L165:
	movl	$0, %r15d
	jle	.L168
	movl	%ebx, %eax
	cltd
	idivl	%ebp
	movl	%eax, %ebx
	incl	%ebx
	movl	%ebx, 36(%rsp)
	call	cudaGetLastError@PLT
	movl	32(%rsp), %ecx
	movq	(%rsp), %r8
	xorl	%r9d, %r9d
	movq	24(%rsp), %rdx
	movl	44(%rsp), %esi
	movl	%eax, _ZL3crc(%rip)
	movq	36(%rsp), %rdi
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L169
	movq	8(%rsp), %rdi
	movl	%r14d, %edx
	movq	%r12, %rsi
	call	_Z27__device_stub__Z5gsum2PfS_iPfS_i
.L169:
	cmpl	$1, %ebx
	jne	.L170
	call	cudaThreadSynchronize@PLT
.L170:
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L171
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC26(%rip), %rsi
	movq	%rax, %rcx
	jmp	.L189
.L171:
	xorl	%r15d, %r15d
	cmpl	$1, %ebx
	je	.L162
.L172:
	cmpl	$1, %ebx
	jle	.L168
	leal	-1(%rbx), %eax
	leal	(%rbx,%r15), %r14d
	cltd
	idivl	%ebp
	leal	1(%rax), %r13d
	movl	%r13d, 36(%rsp)
	call	cudaGetLastError@PLT
	movl	32(%rsp), %ecx
	movq	(%rsp), %r8
	xorl	%r9d, %r9d
	movq	24(%rsp), %rdx
	movl	44(%rsp), %esi
	movl	%eax, _ZL3crc(%rip)
	movq	36(%rsp), %rdi
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L173
	movslq	%r14d, %rax
	leaq	(%r12,%r15,4), %rdi
	movl	%ebx, %edx
	leaq	(%r12,%rax,4), %rsi
	call	_Z27__device_stub__Z5gsum2PfS_iPfS_i
.L173:
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L178
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC27(%rip), %rsi
	movq	%rax, %rcx
	jmp	.L189
.L178:
	movslq	%r14d, %r15
	movl	%r13d, %ebx
	jmp	.L172
.L168:
	movl	$1, 36(%rsp)
	call	cudaGetLastError@PLT
	movl	32(%rsp), %ecx
	movl	44(%rsp), %esi
	xorl	%r9d, %r9d
	movq	24(%rsp), %rdx
	movq	36(%rsp), %rdi
	xorl	%r8d, %r8d
	movl	%eax, _ZL3crc(%rip)
	call	__cudaPushCallConfiguration@PLT
	testl	%eax, %eax
	jne	.L175
	leaq	(%r12,%r15,4), %rsi
	movl	$1, %edx
	movq	%r12, %rdi
	call	_Z28__device_stub__Z6gcopy1PfS_iPfS_i
.L175:
	call	cudaThreadSynchronize@PLT
	call	cudaGetLastError@PLT
	movl	%eax, _ZL3crc(%rip)
	movl	%eax, %edi
	testl	%eax, %eax
	je	.L162
	call	cudaGetErrorString@PLT
	movl	_ZL3crc(%rip), %edx
	leaq	.LC28(%rip), %rsi
	movq	%rax, %rcx
	jmp	.L189
.L162:
	addq	$56, %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
.LFE2046:
	.size	gpu_sum3, .-gpu_sum3
	.globl	gpu_sum3_
	.type	gpu_sum3_, @function
gpu_sum3_:
.LFB2065:
	.cfi_startproc
	endbr64
	movl	(%r8), %r8d
	movl	(%rcx), %ecx
	movq	(%rdx), %rdx
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	gpu_sum3
	.cfi_endproc
.LFE2065:
	.size	gpu_sum3_, .-gpu_sum3_
	.section	.rodata.str1.1
.LC29:
	.string	"_Z5gsum2PfS_i"
.LC30:
	.string	"_Z5gsum1PfS_i"
.LC31:
	.string	"_Z11gtranspose2PfS_ii"
.LC32:
	.string	"_Z6gcopy3PfS_ii"
.LC33:
	.string	"_Z7gsaxpy2PfS_fii"
.LC34:
	.string	"_Z7gcopy2bPfS_ii"
.LC35:
	.string	"_Z7gcopy2aPfS_ii"
.LC36:
	.string	"_Z6gcopy1PfS_i"
.LC37:
	.string	"_Z11emptyKernelv"
	.section	.text.startup,"ax",@progbits
	.type	_ZL24__sti____cudaRegisterAllv, @function
_ZL24__sti____cudaRegisterAllv:
.LFB2109:
	.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	.LC29(%rip), %rdx
	movq	%rax, %rdi
	movq	%rax, %rbx
	pushq	$0
	.cfi_def_cfa_offset 40
	movq	%rdx, %rcx
	leaq	_Z5gsum2PfS_i(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC30(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z5gsum1PfS_i(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC31(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z11gtranspose2PfS_ii(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC32(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z6gcopy3PfS_ii(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC33(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z7gsaxpy2PfS_fii(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC34(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z7gcopy2bPfS_ii(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC35(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z7gcopy2aPfS_ii(%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
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	pushq	$0
	.cfi_def_cfa_offset 24
	leaq	.LC36(%rip), %rdx
	movq	%rbx, %rdi
	leaq	_Z6gcopy1PfS_i(%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
	leaq	.LC37(%rip), %rdx
	pushq	$0
	.cfi_def_cfa_offset 24
	xorl	%r9d, %r9d
	orl	$-1, %r8d
	movq	%rdx, %rcx
	pushq	$0
	.cfi_def_cfa_offset 32
	leaq	_Z11emptyKernelv(%rip), %rsi
	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
.LFE2109:
	.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
	.local	_ZL3crc
	.comm	_ZL3crc,4,4
	.local	_ZL5devid
	.comm	_ZL5devid,4,4
	.globl	mmcc
	.bss
	.align 4
	.type	mmcc, @object
	.size	mmcc, 4
mmcc:
	.zero	4
	.globl	maxgsx
	.data
	.align 4
	.type	maxgsx, @object
	.size	maxgsx, 4
maxgsx:
	.long	65535
	.globl	ngrid_size
	.align 4
	.type	ngrid_size, @object
	.size	ngrid_size, 4
ngrid_size:
	.long	1
	.globl	nblock_size
	.align 4
	.type	nblock_size, @object
	.size	nblock_size, 4
nblock_size:
	.long	64
	.section	.rodata.cst8,"aM",@progbits,8
	.align 8
.LC10:
	.long	0
	.long	1041235968
	.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:

/*--------------------------------------------------------------------*/
/* CUDA Library for GPU Tutorial */
/* written by Viktor K. Decyk, UCLA */

#include <stdlib.h>
#include <stdio.h>
#include "hip/hip_runtime.h"

int nblock_size = 64;
int ngrid_size = 1;
int maxgsx = 65535;
int mmcc = 0;
static int devid;

static hipError_t crc;

__global__ void emptyKernel() {}

/*--------------------------------------------------------------------*/
extern "C" void setgbsize(int nblock) {
/* set blocksize */
   nblock_size = nblock;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" int getmmcc() {
/* get major and minor computer capability */
   return mmcc;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fallocate(float **g_f, int nsize, int *irc) {
/* allocate global float memory on GPU, return pointer to C */
   void *gptr;
   crc = hipMalloc(&gptr,sizeof(float)*nsize);
   if (crc) {
      printf("hipMalloc float Error=%d:%s,l=%d\n",crc,
              hipGetErrorString(crc),nsize);
      *irc = 1;
   }
   *g_f = (float *)gptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_iallocate(int **g_i, int nsize, int *irc) {
/* allocate global integer memory on GPU, return pointer to C */
   void *gptr;
   crc = hipMalloc(&gptr,sizeof(int)*nsize);
   if (crc) {
      printf("hipMalloc int Error=%d:%s,l=%d\n",crc,
              hipGetErrorString(crc),nsize);
      *irc = 1;
   }
   *g_i = (int *)gptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_deallocate(void *g_d, int *irc) {
/* deallocate global memory on GPU */
   crc = hipFree(g_d);
   if (crc) {
      printf("hipFree Error=%d:%s\n",crc,hipGetErrorString(crc));
      *irc = 1;
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyin(float *f, float *g_f, int nsize) {
/* copy float array from host memory to global GPU memory */
   crc = hipMemcpy((void *)g_f,f,sizeof(float)*nsize,
                    hipMemcpyHostToDevice);
   if (crc) {
      printf("hipMemcpyHostToDevice float Error=%d:%s\n",crc,
              hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyout(float *f, float *g_f, int nsize) {
/* copy float array from global GPU memory to host memory */
   crc = hipMemcpy(f,(void *)g_f,sizeof(float)*nsize,
                    hipMemcpyDeviceToHost);
   if (crc) {
      printf("hipMemcpyDeviceToHost float Error=%d:%s\n",crc,
              hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void emptykernel() {
   int ngx, ngy;
   ngx  = nblock_size < 32768 ? nblock_size : 32768;
   ngy = (ngrid_size - 1)/ngx + 1;
   dim3 dimBlock(nblock_size,1);
   dim3 dimGrid(ngx,ngy);
   crc = hipGetLastError();
   emptyKernel<<<dimGrid,dimBlock>>>();
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("emptyKernel error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void init_cu(int dev, int *irc) {
/* initialize CUDA with device dev or selects best GPU available       */
/* searches throughs devices, selects the device with the most compute */
/* units, and saves the device id devid                                */
/* if dev is a valid device, it is used, otherwise the GPU with the    */
/* most multi-processors is selected                                   */
/* error code is modified only if there is an error */
   int maxcpus = 0, jm = -1;
   int j, ndevs, maxunits;
   unsigned long msize;
   double z;
   struct hipDeviceProp_t prop;
/* returns number of device */
   crc = hipGetDeviceCount(&ndevs);
   if (crc) {
      printf("hipGetDeviceCount Error=%i:%s\n",crc,
             hipGetErrorString(crc));
      *irc = 1;
      return;
   }
/* get information about devices */
   for (j = 0; j < ndevs; j++) {
      crc = hipGetDeviceProperties(&prop,j);
      if (crc) {
         printf("hipGetDeviceProperties Error=%i:%s\n",crc,
                hipGetErrorString(crc));
         prop.name[0] = 0;
      }
      maxunits = prop.multiProcessorCount;
      if (dev <= 0) {
         printf("j=%i:CUDA_DEVICE_NAME=%s,CUDA_MULTIPROCESSOR_COUNT=%i\n",
                j,prop.name,maxunits);
         msize = prop.totalGlobalMem;
         z = ((double) msize)/1073741824.0;
         mmcc = 10*prop.major + prop.minor;
         printf("    CUDA_GLOBAL_MEM_SIZE=%lu(%f GB),Capability=%d\n",
                msize,(float) z,mmcc);
         printf("    Capability=%d\n",mmcc);
         if (maxunits > maxcpus) {
            maxcpus = maxunits;
            jm = j;
         }
      }
   }
   devid = jm;
   if (dev >= 0)
      devid = dev % ndevs;
   printf("using device j=%i\n",devid);
/* get properties for this device */
   crc = hipGetDeviceProperties(&prop,devid);
   maxgsx = prop.maxGridSize[0];
   mmcc = 10*prop.major + prop.minor;
/* set device */
   crc = hipSetDevice(devid);
   if (crc) {
      printf("hipSetDevice Error=%i:%s\n",crc,
             hipGetErrorString(crc));
      *irc = 1;
      return;
   }
/* run empty kernel */
   emptykernel();
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void end_cu() {
/* terminate CUDA */
   crc = hipDeviceReset();
   if (crc) {
      printf("hipDeviceReset Error=%d:%s\n",crc,hipGetErrorString(crc));
   }
   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy1(float a[], float b[], int nx) {
/* 1d copy a = b                            */
/* one block of mx threads copies mx values */
/* ((nx-1)/mx+1) independent blocks         */
/* nx = size of arrays in x                 */
/* local data */
   int j, js, id, mx;
   mx = blockDim.x;
   j = threadIdx.x;
   id = blockIdx.x;

   js = j + mx*id;
   if (js < nx) a[js] = b[js];

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy2a(float a[], float b[], int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies mx values */
/* nbx*ny independent blocks                */
/* local data */
   int j, k, js, id, mx;
   mx = blockDim.x;
   j = threadIdx.x;
   id = blockIdx.x;
   k = blockIdx.y;

   js = j + mx*id;
   if ((js < nx) && (k < ny)) {
      a[js+nx*k] = b[js+nx*k];
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy2b(float a[], float b[], int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   int j, k, mx;
   mx = blockDim.x;
   k = blockIdx.x;

   j = threadIdx.x;
   while (j < nx) {
      if (k < ny)
         a[j+nx*k] = b[j+nx*k];
      j += mx;
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gsaxpy2(float a[], float b[], float s, int nx, int ny) {
/* 2d vector multiplye a = s*b + a          */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   int j, k, mx;
   mx = blockDim.x;
   k = blockIdx.x;

   j = threadIdx.x;
   while (j < nx) {
      if (k < ny)
         a[j+nx*k] = s*b[j+nx*k] + a[j+nx*k];
      j += mx;
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gcopy3(float a[], float b[], int nx, int ny) {
/* 2d copy a = b                                  */
/* one block of mx*my threads copies mx*my values */
/* ((nx-1)/mx+1)*((ny-1)/my+1) independent blocks */
/* local data */
   int j, k, js, ks, idx, idy, mx, my;
   mx = blockDim.x; my = blockDim.y;
   j = threadIdx.x; k = threadIdx.y;
   idx = blockIdx.x; idy = blockIdx.y;

   ks = k + my*idy;
   js = j + mx*idx;
   if ((js < nx) && (ks < ny))
       a[js+nx*ks] = b[js+nx*ks];

   return;
}

/*--------------------------------------------------------------------*/
__global__ void  gtranspose2(float a[], float b[], int nx, int ny) {
/* a = transpose(b)                                   */
/* one block of mx*mx threads transposes mx*mx values */
/* ((nx-1)/mx+1)*((ny-1)/mx+1) independent blocks     */
/* local data */
   int j, k, js, ks, idx, idy, joff, koff, mx, mxv;
   extern __shared__ float s[];
   mx = blockDim.x; mxv = mx + 1;
   j = threadIdx.x; k = threadIdx.y;
   idx = blockIdx.x; idy = blockIdx.y;
   koff = mx*idy;
   joff = mx*idx;

   ks = k + koff;
   js = j + joff;
   if ((js < nx) && (ks < ny))
      s[j+mxv*k] = b[js+nx*ks];
/* synchronize threads */
   __syncthreads();
   js = k + joff;
   ks = j + koff;
   if ((js < nx) && (ks < ny))
      a[ks+ny*js] = s[k+mxv*j];

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gsum1(float a[], float *sa, int nx) {
/* 1d serial sum reductions, each of length mx */
/* sa = sum(a)                                 */
/* local data */
   int j, js, jb, mx, joff, mxm;
   float t;
   extern __shared__ float s[];
   mx = blockDim.x;
   js = threadIdx.x;
   jb = blockIdx.x;
   joff = mx*jb;

   j = js + joff;
/* copy global data to shared memory */
   if (j < nx) s[js] = a[j];
/* synchronize to make sure each thread in block has the data */
   __syncthreads();
   if (js==0) {
      mxm = nx - joff;
      if (mxm > mx) mxm = mx;
/* perform serial local sum reduction: result in t */
      t = 0.0f;
      for (j = 0; j < mxm; j++) {
         t += s[j];
      }
/* accumulate results to global memory for each block */
/* for devices with compute capability 2.x            */
      atomicAdd(&sa[0],t);
   }

   return;
}

/*--------------------------------------------------------------------*/
__device__ void lsum2(float *sdata, int n) {
/* finds local sum of nths data items shared by threads */
/* using binary tree method. input is modified. */
/* local data */
   int l, k;
   float s;
   l = threadIdx.x;
   k = blockDim.x >> 1;
   s = 0.0f;

   if (l < n) s = sdata[l];
   while (k > 0) {
      if (l < k) {
         if ((l+k) < n) {
            s += sdata[l+k];
            sdata[l] = s;
         }
      }
      __syncthreads();
      k >>= 1;
   }

   return;
}

/*--------------------------------------------------------------------*/
__global__ void gsum2(float a[], float d[], int nx) {
/* segmented 1d sum reductions, each of length mx             */
/* forall (j = 1:nbx); d(j) = sum(a(1+mx*(j-1):min(nx,mx*j))) */
/* parallel summation                                         */
/* local data */
   int j, js, jb, mx, joff, mxm;
   extern __shared__ float s[];
   mx = blockDim.x;
   js = threadIdx.x;
   jb = blockIdx.x;
   joff = mx*jb;

   j = js + joff;
/* copy global data to shared memory */
   if (j < nx) s[js] = a[j];
/* synchronize to make sure each thread in block has the data */
   __syncthreads();
   mxm = nx - joff;
   if (mxm > mx) mxm = mx;
/* perform parallel local sum reduction: result in s[0] */
   lsum2(s,mxm);
/* write out result to global memory for each block */
   if (js==0) d[jb] = s[0];

   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy1(float *a, float *b, int mx, int nx) {
/* 2d copy of length nx, with block size mx */
/* one block of mx threads copies mx values */
/* ((nx-1)/mx+1) independent blocks         */
/* local data */
   int nbx;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
   crc = hipGetLastError();
 
   gcopy1<<<dimGrid,dimBlock>>>(a,b,nx);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gcopy1 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2a(float *a, float *b, int mx, int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies mx values */
/* nbx*ny independent blocks                */
/* local data */
   int nbx;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx,ny);
   crc = hipGetLastError();

   gcopy2a<<<dimGrid,dimBlock>>>(a,b,nx,ny);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gcopy2a error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2b(float *a, float *b, int mx, int nx, int ny) {
/* 2d copy a = b                            */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   dim3 dimBlock(mx);
   dim3 dimGrid(ny);
   crc = hipGetLastError();

   gcopy2b<<<dimGrid,dimBlock>>>(a,b,nx,ny);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gcopy2b error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_saxpy2(float *a, float *b, float s, int mx, int nx,
                           int ny) {
/* 2d vector multiply a = s*b + a           */
/* one block of mx threads copies nx values */
/* ny independent blocks                    */
/* local data */
   dim3 dimBlock(mx);
   dim3 dimGrid(ny);
   crc = hipGetLastError();

   gsaxpy2<<<dimGrid,dimBlock>>>(a,b,s,nx,ny);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gsaxpy2 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy3(float *a, float *b, int mx, int my, int nx,
                          int ny) {
/* 2d copy a = b                                  */
/* one block of mx*my threads copies mx*my values */
/* ((nx-1)/mx+1)*((ny-1)/my+1) independent blocks */
/* local data */
   int nbx, nby;
   nbx = (nx - 1)/mx + 1; nby = (ny - 1)/my + 1;
   dim3 dimBlock(mx,my);
   dim3 dimGrid(nbx,nby);
   crc = hipGetLastError();

   gcopy3<<<dimGrid,dimBlock>>>(a,b,nx,ny);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gcopy3 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void  gpu_transpose2(float *a, float *b, int mx, int nx,
                                int ny) {
/* 2d transpose of length nx, ny, with block size mx, mx */
/* one block of mx*mx threads transposes mx*mx values    */
/* ((nx-1)/mx+1)*((ny-1)/mx+1) independent blocks        */
/* local data */
   int nbx, nby, ns;
   nbx = (nx - 1)/mx + 1; nby = (ny - 1)/mx + 1;
   dim3 dimBlock(mx,mx);
   dim3 dimGrid(nbx,nby);
/* calculate size of shared memory */
   ns = (mx + 1)*mx*sizeof(float);
   crc = hipGetLastError();

   gtranspose2<<<dimGrid,dimBlock,ns>>>(a,b,nx,ny);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gtranspose2 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum1(float *a, float *sa, int mx, int nx) {
/* 1d serial sum reductions, each of length mx */
/* one block of mx threads sums mx values      */
/* ((nx-1)/mx+1) independent blocks            */
/* local data */
   int nbx, ns;
   float t;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
   t = 0.0f;
   gpu_fcopyin(&t,sa,1);
/* calculate size of shared memory */
   ns = mx*sizeof(float);
   crc = hipGetLastError();
 
   gsum1<<<dimGrid,dimBlock,ns>>>(a,sa,nx);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gsum1 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum2(float *a, float *d, int mx, int nx) {
/* segmented 1d parallel sum reductions, each of length mx */
/* one block of mx threads sums mx values                  */
/* ((nx-1)/mx+1) independent blocks                        */
/* local data */
   int nbx, ns;
   nbx = (nx - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
/* calculate size of shared memory */
   ns = mx*sizeof(float);
   crc = hipGetLastError();
 
   gsum2<<<dimGrid,dimBlock,ns>>>(a,d,nx);
 
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gsum2 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum3(float *a, float *d, float *sa, int mx,
                         int nx) {
/* segmented 1d parallel sum reductions   */
/* one block of mx threads sums mx values */
/* ((nx-1)/mx+1) independent blocks       */
/* local data */
   int nxs, nbx, n, ns;
   nxs = nx;
   nbx = (nxs - 1)/mx + 1;
   dim3 dimBlock(mx);
   dim3 dimGrid(nbx);
/* calculate size of shared memory */
   ns = mx*sizeof(float);
   crc = hipGetLastError();
   gsum2<<<dimGrid,dimBlock,ns>>>(a,d,nxs);
/* cudaThreadSynchronize(); */
   crc = hipGetLastError();
   if (crc) {
      printf("gsum2:0 error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
/* write out result */
   if (nbx==1) {
      dimGrid.x = 1;
      crc = hipGetLastError();
      gcopy1<<<dimGrid,dimBlock>>>(sa,d,1);
      hipDeviceSynchronize();
      crc = hipGetLastError();
      if (crc) {
         printf("gcopy1:0 error=%d:%s\n",crc,hipGetErrorString(crc));
         exit(1);
      }
      return;
   }
/* reduce further if necessary */
   if (nbx > 1) {
      nxs = nbx;
      nbx = (nxs - 1)/mx + 1;
      dimGrid.x = nbx;
      crc = hipGetLastError();
      gsum2<<<dimGrid,dimBlock,ns>>>(d,sa,nxs);
      if (nbx==1)
         hipDeviceSynchronize();
      crc = hipGetLastError();
      if (crc) {
         printf("gsum2:1 error=%d:%s\n",crc,hipGetErrorString(crc));
         exit(1);
      }
      n = 0;
   }
   if (nbx==1)
      return;
/* iterate if necessary */
   while (nbx > 1) {
      n += nbx;
      nxs = nbx;
      nbx = (nxs - 1)/mx + 1;
      dimGrid.x = nbx;
      crc = hipGetLastError();
      gsum2<<<dimGrid,dimBlock,ns>>>(&sa[n-nxs],&sa[n],nxs);
/*    cudaThreadSynchronize(); */
      crc = hipGetLastError();
      if (crc) {
         printf("gsum2:n error=%d:%s\n",crc,hipGetErrorString(crc));
         exit(1);
      }
   }
/* write out result */
   dimGrid.x = 1;
   crc = hipGetLastError();
   gcopy1<<<dimGrid,dimBlock>>>(sa,&sa[n],1);
   hipDeviceSynchronize();
   crc = hipGetLastError();
   if (crc) {
      printf("gcopy1:n error=%d:%s\n",crc,hipGetErrorString(crc));
      exit(1);
   }
   return;
}


/* Interfaces to Fortran */

/*--------------------------------------------------------------------*/
extern "C" void setgbsize_(int *nblock) {
   setgbsize(*nblock);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" int getmmcc_() {
/* get major and minor computer capability */
   return getmmcc();
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fallocate_(unsigned long *gp_f, int *nsize,
                               int *irc) {
/* allocate global float memory on GPU, return pointer to Fortran */
   float *fptr;
   gpu_fallocate(&fptr,*nsize,irc);
   *gp_f = (long )fptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_iallocate_(unsigned long *gp_i, int *nsize,
                               int *irc) {
/* allocate global integer memory on GPU, return pointer to Fortran */
   int *iptr;
   gpu_iallocate(&iptr,*nsize,irc);
   *gp_i = (long )iptr;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_deallocate_(unsigned long *gp_d, int *irc) {
/* deallocate global memory on GPU, return pointer to Fortran */
   void *d;
   d = (void *)*gp_d;
   gpu_deallocate(d,irc);
   *gp_d = 0;
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyin_(float *f, unsigned long *gp_f,
                                int *nsize) {
/* copy float array from main memory to global GPU memory */
   float *g_f;
   g_f = (float *)*gp_f;
   gpu_fcopyin(f,g_f,*nsize);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_fcopyout_(float *f, unsigned long *gp_f,
                              int *nsize) {
/* copy float array from global GPU memory to main memory */
   float *g_f;
   g_f = (float *)*gp_f;
   gpu_fcopyout(f,g_f,*nsize);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void emptykernel_() {
   emptykernel();
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void init_cu_(int *dev, int *irc) {
   init_cu(*dev,irc);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void end_cu_() {
   end_cu();
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy1_(unsigned long *gp_a, unsigned long *gp_b,
                           int *mx, int *nx) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy1(a,b,*mx,*nx);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2a_(unsigned long *gp_a, unsigned long *gp_b,
                            int *mx, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy2a(a,b,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy2b_(unsigned long *gp_a, unsigned long *gp_b,
                            int *mx, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy2b(a,b,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_saxpy2_(unsigned long *gp_a, unsigned long *gp_b,
                            float *s, int *mx, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_saxpy2(a,b,*s,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_copy3_(unsigned long *gp_a, unsigned long *gp_b,
                           int *mx, int *my, int *nx, int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_copy3(a,b,*mx,*my,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void  gpu_transpose2_(unsigned long *gp_a,
                                 unsigned long *gp_b, int *mx, int *nx,
                                 int *ny) {
   float *a, *b;
   a = (float *)*gp_a;
   b = (float *)*gp_b;
   gpu_transpose2(a,b,*mx,*nx,*ny);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum1_(unsigned long *gp_a, unsigned long *gp_sa,
                          int *mx, int *nx) {
   float *a, *sa;
   a = (float *)*gp_a;
   sa = (float *)*gp_sa;
   gpu_sum1(a,sa,*mx,*nx);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum2_(unsigned long *gp_a, unsigned long *gp_d,
                          int *mx, int *nx) {
   float *a, *d;
   a = (float *)*gp_a;
   d = (float *)*gp_d;
   gpu_sum2(a,d,*mx,*nx);
   return;
}

/*--------------------------------------------------------------------*/
extern "C" void gpu_sum3_(unsigned long *gp_a, unsigned long *gp_d,
                          unsigned long *gp_sa,int *mx, int *nx) {
   float *a, *d, *sa;
   a = (float *)*gp_a;
   d = (float *)*gp_d;
   sa = (float *)*gp_sa;
   gpu_sum3(a,d,sa,*mx,*nx);
   return;
}

	.text
	.file	"gpulib2.hip"
	.globl	_Z26__device_stub__emptyKernelv # -- Begin function _Z26__device_stub__emptyKernelv
	.type	_Z26__device_stub__emptyKernelv,@function
_Z26__device_stub__emptyKernelv:        # @_Z26__device_stub__emptyKernelv
	.cfi_startproc
# %bb.0:
	pushq	%r15
	.cfi_def_cfa_offset 16
	pushq	%r14
	.cfi_def_cfa_offset 24
	pushq	%r12
	.cfi_def_cfa_offset 32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	subq	$56, %rsp
	.cfi_def_cfa_offset 96
	.cfi_offset %rbx, -40
	.cfi_offset %r12, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rbx
	leaq	24(%rsp), %r14
	leaq	16(%rsp), %r15
	leaq	8(%rsp), %r12
	movq	%rbx, %rdi
	movq	%r14, %rsi
	movq	%r15, %rdx
	movq	%r12, %rcx
	callq	__hipPopCallConfiguration
	movq	(%rbx), %rsi
	movl	8(%rbx), %edx
	movq	(%r14), %rcx
	movl	8(%r14), %r8d
	movq	%rsp, %r9
	movl	$_Z11emptyKernelv, %edi
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	pushq	(%r15)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$72, %rsp
	.cfi_adjust_cfa_offset -72
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%r12
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end0:
	.size	_Z26__device_stub__emptyKernelv, .Lfunc_end0-_Z26__device_stub__emptyKernelv
	.cfi_endproc
                                        # -- End function
	.globl	setgbsize                       # -- Begin function setgbsize
	.type	setgbsize,@function
setgbsize:                              # @setgbsize
	.cfi_startproc
# %bb.0:
	movl	%edi, nblock_size(%rip)
	retq
.Lfunc_end1:
	.size	setgbsize, .Lfunc_end1-setgbsize
	.cfi_endproc
                                        # -- End function
	.globl	getmmcc                         # -- Begin function getmmcc
	.type	getmmcc,@function
getmmcc:                                # @getmmcc
	.cfi_startproc
# %bb.0:
	movl	mmcc(%rip), %eax
	retq
.Lfunc_end2:
	.size	getmmcc, .Lfunc_end2-getmmcc
	.cfi_endproc
                                        # -- End function
	.globl	gpu_fallocate                   # -- Begin function gpu_fallocate
	.type	gpu_fallocate,@function
gpu_fallocate:                          # @gpu_fallocate
	.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	%rbx
	.cfi_def_cfa_offset 40
	pushq	%rax
	.cfi_def_cfa_offset 48
	.cfi_offset %rbx, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movq	%rdx, %r14
	movl	%esi, %ebp
	movq	%rdi, %rbx
	movslq	%esi, %rsi
	shlq	$2, %rsi
	movq	%rsp, %rdi
	callq	hipMalloc
	testl	%eax, %eax
	je	.LBB3_2
# %bb.1:
	movl	%eax, %r15d
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str, %edi
	movl	%r15d, %esi
	movq	%rax, %rdx
	movl	%ebp, %ecx
	xorl	%eax, %eax
	callq	printf
	movl	$1, (%r14)
.LBB3_2:
	movq	(%rsp), %rax
	movq	%rax, (%rbx)
	addq	$8, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.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_end3:
	.size	gpu_fallocate, .Lfunc_end3-gpu_fallocate
	.cfi_endproc
                                        # -- End function
	.globl	gpu_iallocate                   # -- Begin function gpu_iallocate
	.type	gpu_iallocate,@function
gpu_iallocate:                          # @gpu_iallocate
	.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	%rbx
	.cfi_def_cfa_offset 40
	pushq	%rax
	.cfi_def_cfa_offset 48
	.cfi_offset %rbx, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movq	%rdx, %r14
	movl	%esi, %ebp
	movq	%rdi, %rbx
	movslq	%esi, %rsi
	shlq	$2, %rsi
	movq	%rsp, %rdi
	callq	hipMalloc
	testl	%eax, %eax
	je	.LBB4_2
# %bb.1:
	movl	%eax, %r15d
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.1, %edi
	movl	%r15d, %esi
	movq	%rax, %rdx
	movl	%ebp, %ecx
	xorl	%eax, %eax
	callq	printf
	movl	$1, (%r14)
.LBB4_2:
	movq	(%rsp), %rax
	movq	%rax, (%rbx)
	addq	$8, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.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_end4:
	.size	gpu_iallocate, .Lfunc_end4-gpu_iallocate
	.cfi_endproc
                                        # -- End function
	.globl	gpu_deallocate                  # -- Begin function gpu_deallocate
	.type	gpu_deallocate,@function
gpu_deallocate:                         # @gpu_deallocate
	.cfi_startproc
# %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	pushq	%rax
	.cfi_def_cfa_offset 32
	.cfi_offset %rbx, -24
	.cfi_offset %rbp, -16
	movq	%rsi, %rbx
	callq	hipFree
	testl	%eax, %eax
	je	.LBB5_2
# %bb.1:
	movl	%eax, %ebp
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.2, %edi
	movl	%ebp, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, (%rbx)
.LBB5_2:
	addq	$8, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end5:
	.size	gpu_deallocate, .Lfunc_end5-gpu_deallocate
	.cfi_endproc
                                        # -- End function
	.globl	gpu_fcopyin                     # -- Begin function gpu_fcopyin
	.type	gpu_fcopyin,@function
gpu_fcopyin:                            # @gpu_fcopyin
	.cfi_startproc
# %bb.0:
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset %rbx, -16
	movq	%rdi, %rax
	movslq	%edx, %rdx
	shlq	$2, %rdx
	movq	%rsi, %rdi
	movq	%rax, %rsi
	movl	$1, %ecx
	callq	hipMemcpy
	testl	%eax, %eax
	jne	.LBB6_2
# %bb.1:
	popq	%rbx
	.cfi_def_cfa_offset 8
	retq
.LBB6_2:
	.cfi_def_cfa_offset 16
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.3, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end6:
	.size	gpu_fcopyin, .Lfunc_end6-gpu_fcopyin
	.cfi_endproc
                                        # -- End function
	.globl	gpu_fcopyout                    # -- Begin function gpu_fcopyout
	.type	gpu_fcopyout,@function
gpu_fcopyout:                           # @gpu_fcopyout
	.cfi_startproc
# %bb.0:
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset %rbx, -16
	movslq	%edx, %rdx
	shlq	$2, %rdx
	movl	$2, %ecx
	callq	hipMemcpy
	testl	%eax, %eax
	jne	.LBB7_2
# %bb.1:
	popq	%rbx
	.cfi_def_cfa_offset 8
	retq
.LBB7_2:
	.cfi_def_cfa_offset 16
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.4, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end7:
	.size	gpu_fcopyout, .Lfunc_end7-gpu_fcopyout
	.cfi_endproc
                                        # -- End function
	.globl	emptykernel                     # -- Begin function emptykernel
	.type	emptykernel,@function
emptykernel:                            # @emptykernel
	.cfi_startproc
# %bb.0:
	pushq	%r14
	.cfi_def_cfa_offset 16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	pushq	%rax
	.cfi_def_cfa_offset 32
	.cfi_offset %rbx, -24
	.cfi_offset %r14, -16
	movl	nblock_size(%rip), %ebx
	movl	$32768, %r14d                   # imm = 0x8000
	cmpl	%r14d, %ebx
	cmovll	%ebx, %r14d
	movl	ngrid_size(%rip), %eax
	decl	%eax
	cltd
	idivl	%r14d
                                        # kill: def $eax killed $eax def $rax
	incl	%eax
	btsq	$32, %rbx
	shlq	$32, %rax
	orq	%rax, %r14
	callq	hipGetLastError
	movq	%r14, %rdi
	movl	$1, %esi
	movq	%rbx, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB8_2
# %bb.1:
	callq	_Z26__device_stub__emptyKernelv
.LBB8_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB8_4
# %bb.3:
	addq	$8, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	retq
.LBB8_4:
	.cfi_def_cfa_offset 32
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.5, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end8:
	.size	emptykernel, .Lfunc_end8-emptykernel
	.cfi_endproc
                                        # -- End function
	.section	.rodata.cst16,"aM",@progbits,16
	.p2align	4, 0x0                          # -- Begin function init_cu
.LCPI9_0:
	.long	1127219200                      # 0x43300000
	.long	1160773632                      # 0x45300000
	.long	0                               # 0x0
	.long	0                               # 0x0
.LCPI9_1:
	.quad	0x4330000000000000              # double 4503599627370496
	.quad	0x4530000000000000              # double 1.9342813113834067E+25
	.section	.rodata.cst8,"aM",@progbits,8
	.p2align	3, 0x0
.LCPI9_2:
	.quad	0x3e10000000000000              # double 9.3132257461547852E-10
	.text
	.globl	init_cu
	.type	init_cu,@function
init_cu:                                # @init_cu
	.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	$1496, %rsp                     # imm = 0x5D8
	.cfi_def_cfa_offset 1552
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movq	%rsi, %rbx
	movl	%edi, %ebp
	leaq	12(%rsp), %rdi
	callq	hipGetDeviceCount
	testl	%eax, %eax
	je	.LBB9_1
# %bb.12:
	movl	%eax, %r14d
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.6, %edi
	movl	%r14d, %esi
	jmp	.LBB9_13
.LBB9_1:                                # %.preheader
	movq	%rbx, 16(%rsp)                  # 8-byte Spill
	movl	12(%rsp), %ecx
	movl	$-1, %r14d
	testl	%ecx, %ecx
	jle	.LBB9_8
# %bb.2:                                # %.lr.ph
	leaq	24(%rsp), %r15
	xorl	%ebx, %ebx
	xorl	%r12d, %r12d
.LBB9_3:                                # =>This Inner Loop Header: Depth=1
	movq	%r15, %rdi
	movl	%r12d, %esi
	callq	hipGetDevicePropertiesR0600
	testl	%eax, %eax
	je	.LBB9_5
# %bb.4:                                #   in Loop: Header=BB9_3 Depth=1
	movl	%eax, %r13d
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.7, %edi
	movl	%r13d, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movb	$0, 24(%rsp)
.LBB9_5:                                #   in Loop: Header=BB9_3 Depth=1
	testl	%ebp, %ebp
	jg	.LBB9_7
# %bb.6:                                #   in Loop: Header=BB9_3 Depth=1
	movl	412(%rsp), %r13d
	movl	$.L.str.8, %edi
	movl	%r12d, %esi
	movq	%r15, %rdx
	movl	%r13d, %ecx
	xorl	%eax, %eax
	callq	printf
	movq	312(%rsp), %rsi
	movq	%rsi, %xmm0
	punpckldq	.LCPI9_0(%rip), %xmm0   # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
	subpd	.LCPI9_1(%rip), %xmm0
	movapd	%xmm0, %xmm1
	unpckhpd	%xmm0, %xmm1                    # xmm1 = xmm1[1],xmm0[1]
	addsd	%xmm0, %xmm1
	mulsd	.LCPI9_2(%rip), %xmm1
	movl	384(%rsp), %eax
	leal	(%rax,%rax,4), %edx
	addl	%edx, %edx
	addl	388(%rsp), %edx
	movl	%edx, mmcc(%rip)
	xorps	%xmm0, %xmm0
	cvtsd2ss	%xmm1, %xmm0
	cvtss2sd	%xmm0, %xmm0
	movl	$.L.str.9, %edi
	movb	$1, %al
	callq	printf
	movl	mmcc(%rip), %esi
	movl	$.L.str.10, %edi
	xorl	%eax, %eax
	callq	printf
	cmpl	%ebx, %r13d
	cmovgl	%r12d, %r14d
	cmovgl	%r13d, %ebx
.LBB9_7:                                #   in Loop: Header=BB9_3 Depth=1
	incl	%r12d
	movl	12(%rsp), %ecx
	cmpl	%ecx, %r12d
	jl	.LBB9_3
.LBB9_8:                                # %._crit_edge
	testl	%ebp, %ebp
	movq	16(%rsp), %rbx                  # 8-byte Reload
	js	.LBB9_10
# %bb.9:
	movl	%ebp, %eax
	cltd
	idivl	%ecx
	movl	%edx, %r14d
.LBB9_10:
	movl	%r14d, _ZL5devid(%rip)
	movl	$.L.str.11, %edi
	movl	%r14d, %esi
	xorl	%eax, %eax
	callq	printf
	movl	_ZL5devid(%rip), %esi
	leaq	24(%rsp), %r14
	movq	%r14, %rdi
	callq	hipGetDevicePropertiesR0600
	movl	336(%r14), %eax
	movl	360(%r14), %ecx
	movl	%eax, maxgsx(%rip)
	leal	(%rcx,%rcx,4), %eax
	addl	%eax, %eax
	addl	364(%r14), %eax
	movl	%eax, mmcc(%rip)
	movl	_ZL5devid(%rip), %edi
	callq	hipSetDevice
	testl	%eax, %eax
	je	.LBB9_14
# %bb.11:
	movl	%eax, %ebp
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.12, %edi
	movl	%ebp, %esi
.LBB9_13:
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, (%rbx)
.LBB9_15:
	addq	$1496, %rsp                     # imm = 0x5D8
	.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
.LBB9_14:
	.cfi_def_cfa_offset 1552
	callq	emptykernel
	jmp	.LBB9_15
.Lfunc_end9:
	.size	init_cu, .Lfunc_end9-init_cu
	.cfi_endproc
                                        # -- End function
	.globl	end_cu                          # -- Begin function end_cu
	.type	end_cu,@function
end_cu:                                 # @end_cu
	.cfi_startproc
# %bb.0:
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset %rbx, -16
	callq	hipDeviceReset
	testl	%eax, %eax
	je	.LBB10_1
# %bb.2:
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.13, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 8
	jmp	printf                          # TAILCALL
.LBB10_1:
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end10:
	.size	end_cu, .Lfunc_end10-end_cu
	.cfi_endproc
                                        # -- End function
	.globl	_Z21__device_stub__gcopy1PfS_i  # -- Begin function _Z21__device_stub__gcopy1PfS_i
	.type	_Z21__device_stub__gcopy1PfS_i,@function
_Z21__device_stub__gcopy1PfS_i:         # @_Z21__device_stub__gcopy1PfS_i
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rcx
	movq	%rsi, (%rcx)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rcx, 8(%rbx)
	movq	%rsi, 16(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z6gcopy1PfS_i, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end11:
	.size	_Z21__device_stub__gcopy1PfS_i, .Lfunc_end11-_Z21__device_stub__gcopy1PfS_i
	.cfi_endproc
                                        # -- End function
	.globl	_Z22__device_stub__gcopy2aPfS_ii # -- Begin function _Z22__device_stub__gcopy2aPfS_ii
	.type	_Z22__device_stub__gcopy2aPfS_ii,@function
_Z22__device_stub__gcopy2aPfS_ii:       # @_Z22__device_stub__gcopy2aPfS_ii
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	8(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%rdx, 24(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z7gcopy2aPfS_ii, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end12:
	.size	_Z22__device_stub__gcopy2aPfS_ii, .Lfunc_end12-_Z22__device_stub__gcopy2aPfS_ii
	.cfi_endproc
                                        # -- End function
	.globl	_Z22__device_stub__gcopy2bPfS_ii # -- Begin function _Z22__device_stub__gcopy2bPfS_ii
	.type	_Z22__device_stub__gcopy2bPfS_ii,@function
_Z22__device_stub__gcopy2bPfS_ii:       # @_Z22__device_stub__gcopy2bPfS_ii
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	8(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%rdx, 24(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z7gcopy2bPfS_ii, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end13:
	.size	_Z22__device_stub__gcopy2bPfS_ii, .Lfunc_end13-_Z22__device_stub__gcopy2bPfS_ii
	.cfi_endproc
                                        # -- End function
	.globl	_Z22__device_stub__gsaxpy2PfS_fii # -- Begin function _Z22__device_stub__gsaxpy2PfS_fii
	.type	_Z22__device_stub__gsaxpy2PfS_fii,@function
_Z22__device_stub__gsaxpy2PfS_fii:      # @_Z22__device_stub__gsaxpy2PfS_fii
	.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	$128, %rsp
	.cfi_def_cfa_offset 176
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	12(%rsp), %rsi
	movss	%xmm0, (%rsi)
	leaq	8(%rsp), %r8
	movl	%edx, (%r8)
	leaq	4(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%r8, 24(%rbx)
	movq	%rdx, 32(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z7gsaxpy2PfS_fii, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$144, %rsp
	.cfi_adjust_cfa_offset -144
	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_end14:
	.size	_Z22__device_stub__gsaxpy2PfS_fii, .Lfunc_end14-_Z22__device_stub__gsaxpy2PfS_fii
	.cfi_endproc
                                        # -- End function
	.globl	_Z21__device_stub__gcopy3PfS_ii # -- Begin function _Z21__device_stub__gcopy3PfS_ii
	.type	_Z21__device_stub__gcopy3PfS_ii,@function
_Z21__device_stub__gcopy3PfS_ii:        # @_Z21__device_stub__gcopy3PfS_ii
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	8(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%rdx, 24(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z6gcopy3PfS_ii, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end15:
	.size	_Z21__device_stub__gcopy3PfS_ii, .Lfunc_end15-_Z21__device_stub__gcopy3PfS_ii
	.cfi_endproc
                                        # -- End function
	.globl	_Z26__device_stub__gtranspose2PfS_ii # -- Begin function _Z26__device_stub__gtranspose2PfS_ii
	.type	_Z26__device_stub__gtranspose2PfS_ii,@function
_Z26__device_stub__gtranspose2PfS_ii:   # @_Z26__device_stub__gtranspose2PfS_ii
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rdi
	movq	%rsi, (%rdi)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	8(%rsp), %rdx
	movl	%ecx, (%rdx)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rdi, 8(%rbx)
	movq	%rsi, 16(%rbx)
	movq	%rdx, 24(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z11gtranspose2PfS_ii, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end16:
	.size	_Z26__device_stub__gtranspose2PfS_ii, .Lfunc_end16-_Z26__device_stub__gtranspose2PfS_ii
	.cfi_endproc
                                        # -- End function
	.globl	_Z20__device_stub__gsum1PfS_i   # -- Begin function _Z20__device_stub__gsum1PfS_i
	.type	_Z20__device_stub__gsum1PfS_i,@function
_Z20__device_stub__gsum1PfS_i:          # @_Z20__device_stub__gsum1PfS_i
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rcx
	movq	%rsi, (%rcx)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rcx, 8(%rbx)
	movq	%rsi, 16(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z5gsum1PfS_i, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end17:
	.size	_Z20__device_stub__gsum1PfS_i, .Lfunc_end17-_Z20__device_stub__gsum1PfS_i
	.cfi_endproc
                                        # -- End function
	.globl	_Z20__device_stub__gsum2PfS_i   # -- Begin function _Z20__device_stub__gsum2PfS_i
	.type	_Z20__device_stub__gsum2PfS_i,@function
_Z20__device_stub__gsum2PfS_i:          # @_Z20__device_stub__gsum2PfS_i
	.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	$112, %rsp
	.cfi_def_cfa_offset 160
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	leaq	40(%rsp), %rax
	movq	%rdi, (%rax)
	leaq	32(%rsp), %rcx
	movq	%rsi, (%rcx)
	leaq	12(%rsp), %rsi
	movl	%edx, (%rsi)
	leaq	80(%rsp), %rbx
	movq	%rax, (%rbx)
	movq	%rcx, 8(%rbx)
	movq	%rsi, 16(%rbx)
	leaq	64(%rsp), %r14
	leaq	48(%rsp), %r15
	leaq	24(%rsp), %r12
	leaq	16(%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	$_Z5gsum2PfS_i, %edi
	movq	%rbx, %r9
	pushq	(%r13)
	.cfi_adjust_cfa_offset 8
	pushq	(%r12)
	.cfi_adjust_cfa_offset 8
	callq	hipLaunchKernel
	addq	$128, %rsp
	.cfi_adjust_cfa_offset -128
	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_end18:
	.size	_Z20__device_stub__gsum2PfS_i, .Lfunc_end18-_Z20__device_stub__gsum2PfS_i
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy1                       # -- Begin function gpu_copy1
	.type	gpu_copy1,@function
gpu_copy1:                              # @gpu_copy1
	.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
	.cfi_offset %rbx, -48
	.cfi_offset %r12, -40
	.cfi_offset %r13, -32
	.cfi_offset %r14, -24
	.cfi_offset %r15, -16
	movl	%ecx, %ebx
	movl	%edx, %ecx
	movq	%rsi, %r14
	movq	%rdi, %r15
	leal	-1(%rbx), %eax
	cltd
	idivl	%ecx
                                        # kill: def $eax killed $eax def $rax
	leal	1(%rax), %r12d
	movl	%ecx, %r13d
	btsq	$32, %r13
	btsq	$32, %r12
	callq	hipGetLastError
	movq	%r12, %rdi
	movl	$1, %esi
	movq	%r13, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB19_2
# %bb.1:
	movq	%r15, %rdi
	movq	%r14, %rsi
	movl	%ebx, %edx
	callq	_Z21__device_stub__gcopy1PfS_i
.LBB19_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB19_4
# %bb.3:
	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
.LBB19_4:
	.cfi_def_cfa_offset 48
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.14, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end19:
	.size	gpu_copy1, .Lfunc_end19-gpu_copy1
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy2a                      # -- Begin function gpu_copy2a
	.type	gpu_copy2a,@function
gpu_copy2a:                             # @gpu_copy2a
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%r8d, %ebx
	movl	%ecx, %r14d
	movl	%edx, %ecx
	movq	%rsi, %r15
	movq	%rdi, %r12
	leal	-1(%r14), %eax
	cltd
	idivl	%ecx
                                        # kill: def $eax killed $eax def $rax
	incl	%eax
	movl	%ecx, %r13d
	btsq	$32, %r13
	movq	%rbx, %rbp
	shlq	$32, %rbp
	orq	%rax, %rbp
	callq	hipGetLastError
	movq	%rbp, %rdi
	movl	$1, %esi
	movq	%r13, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB20_2
# %bb.1:
	movq	%r12, %rdi
	movq	%r15, %rsi
	movl	%r14d, %edx
	movl	%ebx, %ecx
	callq	_Z22__device_stub__gcopy2aPfS_ii
.LBB20_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB20_4
# %bb.3:
	addq	$8, %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
.LBB20_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.15, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end20:
	.size	gpu_copy2a, .Lfunc_end20-gpu_copy2a
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy2b                      # -- Begin function gpu_copy2b
	.type	gpu_copy2b,@function
gpu_copy2b:                             # @gpu_copy2b
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%r8d, %ebx
	movl	%ecx, %ebp
	movq	%rsi, %r14
	movq	%rdi, %r15
	movl	%edx, %r12d
	btsq	$32, %r12
	movl	%r8d, %r13d
	btsq	$32, %r13
	callq	hipGetLastError
	movq	%r13, %rdi
	movl	$1, %esi
	movq	%r12, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB21_2
# %bb.1:
	movq	%r15, %rdi
	movq	%r14, %rsi
	movl	%ebp, %edx
	movl	%ebx, %ecx
	callq	_Z22__device_stub__gcopy2bPfS_ii
.LBB21_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB21_4
# %bb.3:
	addq	$8, %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
.LBB21_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.16, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end21:
	.size	gpu_copy2b, .Lfunc_end21-gpu_copy2b
	.cfi_endproc
                                        # -- End function
	.globl	gpu_saxpy2                      # -- Begin function gpu_saxpy2
	.type	gpu_saxpy2,@function
gpu_saxpy2:                             # @gpu_saxpy2
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%r8d, %ebx
	movl	%ecx, %ebp
	movss	%xmm0, 4(%rsp)                  # 4-byte Spill
	movq	%rsi, %r14
	movq	%rdi, %r15
	movl	%edx, %r12d
	btsq	$32, %r12
	movl	%r8d, %r13d
	btsq	$32, %r13
	callq	hipGetLastError
	movq	%r13, %rdi
	movl	$1, %esi
	movq	%r12, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB22_2
# %bb.1:
	movq	%r15, %rdi
	movq	%r14, %rsi
	movss	4(%rsp), %xmm0                  # 4-byte Reload
                                        # xmm0 = mem[0],zero,zero,zero
	movl	%ebp, %edx
	movl	%ebx, %ecx
	callq	_Z22__device_stub__gsaxpy2PfS_fii
.LBB22_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB22_4
# %bb.3:
	addq	$8, %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
.LBB22_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.17, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end22:
	.size	gpu_saxpy2, .Lfunc_end22-gpu_saxpy2
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy3                       # -- Begin function gpu_copy3
	.type	gpu_copy3,@function
gpu_copy3:                              # @gpu_copy3
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%r9d, %ebx
	movl	%r8d, %r14d
                                        # kill: def $ecx killed $ecx def $rcx
	movl	%edx, %r8d
	movq	%rsi, %r15
	movq	%rdi, %r12
	leal	-1(%r14), %eax
	cltd
	idivl	%r8d
                                        # kill: def $eax killed $eax def $rax
	leal	1(%rax), %r13d
	leal	-1(%rbx), %eax
	cltd
	idivl	%ecx
                                        # kill: def $eax killed $eax def $rax
	incl	%eax
	movl	%r8d, %ebp
	shlq	$32, %rcx
	orq	%rcx, %rbp
	shlq	$32, %rax
	orq	%rax, %r13
	callq	hipGetLastError
	movq	%r13, %rdi
	movl	$1, %esi
	movq	%rbp, %rdx
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB23_2
# %bb.1:
	movq	%r12, %rdi
	movq	%r15, %rsi
	movl	%r14d, %edx
	movl	%ebx, %ecx
	callq	_Z21__device_stub__gcopy3PfS_ii
.LBB23_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB23_4
# %bb.3:
	addq	$8, %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
.LBB23_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.18, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end23:
	.size	gpu_copy3, .Lfunc_end23-gpu_copy3
	.cfi_endproc
                                        # -- End function
	.globl	gpu_transpose2                  # -- Begin function gpu_transpose2
	.type	gpu_transpose2,@function
gpu_transpose2:                         # @gpu_transpose2
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%r8d, %ebx
	movl	%ecx, %r14d
	movl	%edx, %ecx
	movq	%rsi, (%rsp)                    # 8-byte Spill
	movq	%rdi, %r12
	leal	-1(%r14), %eax
	cltd
	idivl	%ecx
                                        # kill: def $eax killed $eax def $rax
	leal	1(%rax), %r13d
	leal	-1(%rbx), %eax
	cltd
	idivl	%ecx
                                        # kill: def $eax killed $eax def $rax
	incl	%eax
	movl	%ecx, %edx
	movq	%rdx, %rbp
	shlq	$32, %rbp
	orq	%rdx, %rbp
	shlq	$32, %rax
	orq	%rax, %r13
	leal	1(%rcx), %r15d
	imull	%ecx, %r15d
	shll	$2, %r15d
	callq	hipGetLastError
	movslq	%r15d, %r8
	movq	%r13, %rdi
	movl	$1, %esi
	movq	%rbp, %rdx
	movl	$1, %ecx
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB24_2
# %bb.1:
	movq	%r12, %rdi
	movq	(%rsp), %rsi                    # 8-byte Reload
	movl	%r14d, %edx
	movl	%ebx, %ecx
	callq	_Z26__device_stub__gtranspose2PfS_ii
.LBB24_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB24_4
# %bb.3:
	addq	$8, %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
.LBB24_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.19, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end24:
	.size	gpu_transpose2, .Lfunc_end24-gpu_transpose2
	.cfi_endproc
                                        # -- End function
	.globl	gpu_sum1                        # -- Begin function gpu_sum1
	.type	gpu_sum1,@function
gpu_sum1:                               # @gpu_sum1
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%ecx, %ebx
	movl	%edx, %ebp
	movq	%rsi, %r14
	movq	%rdi, %r15
	leal	-1(%rbx), %eax
	cltd
	idivl	%ebp
                                        # kill: def $eax killed $eax def $rax
	leal	1(%rax), %r12d
	movl	%ebp, %r13d
	btsq	$32, %r13
	btsq	$32, %r12
	leaq	4(%rsp), %rdi
	movl	$0, (%rdi)
	movl	$1, %edx
	callq	gpu_fcopyin
	shll	$2, %ebp
	callq	hipGetLastError
	movslq	%ebp, %r8
	movq	%r12, %rdi
	movl	$1, %esi
	movq	%r13, %rdx
	movl	$1, %ecx
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB25_2
# %bb.1:
	movq	%r15, %rdi
	movq	%r14, %rsi
	movl	%ebx, %edx
	callq	_Z20__device_stub__gsum1PfS_i
.LBB25_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB25_4
# %bb.3:
	addq	$8, %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
.LBB25_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.20, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end25:
	.size	gpu_sum1, .Lfunc_end25-gpu_sum1
	.cfi_endproc
                                        # -- End function
	.globl	gpu_sum2                        # -- Begin function gpu_sum2
	.type	gpu_sum2,@function
gpu_sum2:                               # @gpu_sum2
	.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
	pushq	%rax
	.cfi_def_cfa_offset 64
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%ecx, %ebx
	movl	%edx, %ebp
	movq	%rsi, %r14
	movq	%rdi, %r15
	leal	-1(%rbx), %eax
	cltd
	idivl	%ebp
                                        # kill: def $eax killed $eax def $rax
	leal	1(%rax), %r12d
	movl	%ebp, %r13d
	btsq	$32, %r13
	btsq	$32, %r12
	shll	$2, %ebp
	callq	hipGetLastError
	movslq	%ebp, %r8
	movq	%r12, %rdi
	movl	$1, %esi
	movq	%r13, %rdx
	movl	$1, %ecx
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB26_2
# %bb.1:
	movq	%r15, %rdi
	movq	%r14, %rsi
	movl	%ebx, %edx
	callq	_Z20__device_stub__gsum2PfS_i
.LBB26_2:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB26_4
# %bb.3:
	addq	$8, %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
.LBB26_4:
	.cfi_def_cfa_offset 64
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.21, %edi
	movl	%ebx, %esi
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.Lfunc_end26:
	.size	gpu_sum2, .Lfunc_end26-gpu_sum2
	.cfi_endproc
                                        # -- End function
	.globl	gpu_sum3                        # -- Begin function gpu_sum3
	.type	gpu_sum3,@function
gpu_sum3:                               # @gpu_sum3
	.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	$56, %rsp
	.cfi_def_cfa_offset 112
	.cfi_offset %rbx, -56
	.cfi_offset %r12, -48
	.cfi_offset %r13, -40
	.cfi_offset %r14, -32
	.cfi_offset %r15, -24
	.cfi_offset %rbp, -16
	movl	%r8d, %r13d
                                        # kill: def $ecx killed $ecx def $rcx
	movq	%rdx, 8(%rsp)                   # 8-byte Spill
	movq	%rsi, 24(%rsp)                  # 8-byte Spill
	movq	%rdi, %rbx
	leal	-1(%r13), %eax
	cltd
	idivl	%ecx
	movl	%eax, %ebp
	leal	1(%rbp), %r12d
	movl	%ecx, %r15d
	btsq	$32, %r15
	movq	%r12, 32(%rsp)                  # 8-byte Spill
	btsq	$32, %r12
	movq	%rcx, 48(%rsp)                  # 8-byte Spill
	leal	(,%rcx,4), %r14d
	callq	hipGetLastError
	movslq	%r14d, %r8
	movq	%r12, %rdi
	movl	$1, %esi
	movq	%r15, 16(%rsp)                  # 8-byte Spill
	movq	%r15, %rdx
	movl	$1, %ecx
	movq	%r8, 40(%rsp)                   # 8-byte Spill
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB27_2
# %bb.1:
	movq	%rbx, %rdi
	movq	24(%rsp), %rsi                  # 8-byte Reload
	movl	%r13d, %edx
	callq	_Z20__device_stub__gsum2PfS_i
.LBB27_2:
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB27_3
# %bb.6:
	movabsq	$4294967296, %r13               # imm = 0x100000000
	testl	%ebp, %ebp
	je	.LBB27_7
# %bb.11:
	jle	.LBB27_12
# %bb.20:
	movl	%ebp, %eax
	cltd
	idivl	48(%rsp)                        # 4-byte Folded Reload
	movl	%eax, %ebp
	leal	1(%rbp), %ebx
	movq	%rbx, %r12
	orq	%r13, %r12
	callq	hipGetLastError
	movq	%r12, %rdi
	movl	$1, %esi
	movq	16(%rsp), %rdx                  # 8-byte Reload
	movl	$1, %ecx
	movq	40(%rsp), %r8                   # 8-byte Reload
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB27_22
# %bb.21:
	movq	24(%rsp), %rdi                  # 8-byte Reload
	movq	8(%rsp), %rsi                   # 8-byte Reload
	movq	32(%rsp), %rdx                  # 8-byte Reload
                                        # kill: def $edx killed $edx killed $rdx
	callq	_Z20__device_stub__gsum2PfS_i
.LBB27_22:
	testl	%ebp, %ebp
	jne	.LBB27_24
# %bb.23:
	callq	hipDeviceSynchronize
.LBB27_24:
	callq	hipGetLastError
	testl	%eax, %eax
	je	.LBB27_13
# %bb.25:
	movl	%eax, %ebp
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.24, %edi
	movl	%ebp, %esi
	jmp	.LBB27_5
.LBB27_7:
	callq	hipGetLastError
	incq	%r13
	movq	%r13, %rdi
	movl	$1, %esi
	movq	16(%rsp), %rdx                  # 8-byte Reload
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB27_9
# %bb.8:
	movq	8(%rsp), %rdi                   # 8-byte Reload
	movq	24(%rsp), %rsi                  # 8-byte Reload
	movl	$1, %edx
	callq	_Z21__device_stub__gcopy1PfS_i
.LBB27_9:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	je	.LBB27_30
# %bb.10:
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.23, %edi
	jmp	.LBB27_4
.LBB27_12:
	movq	32(%rsp), %rbx                  # 8-byte Reload
                                        # kill: def $ebx killed $ebx killed $rbx def $rbx
.LBB27_13:
	cmpl	$1, %ebx
	je	.LBB27_30
# %bb.14:                               # %.preheader.preheader
	xorl	%r14d, %r14d
.LBB27_15:                              # %.preheader
                                        # =>This Inner Loop Header: Depth=1
	cmpl	$2, %ebx
	jl	.LBB27_26
# %bb.16:                               #   in Loop: Header=BB27_15 Depth=1
	leal	(%rbx,%r14), %r15d
	leal	-1(%rbx), %eax
	cltd
	idivl	48(%rsp)                        # 4-byte Folded Reload
	movl	%eax, %ebp
	incl	%ebp
	movq	%rbp, %r12
	orq	%r13, %r12
	callq	hipGetLastError
	movq	%r12, %rdi
	movl	$1, %esi
	movq	16(%rsp), %rdx                  # 8-byte Reload
	movl	$1, %ecx
	movq	40(%rsp), %r8                   # 8-byte Reload
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB27_18
# %bb.17:                               #   in Loop: Header=BB27_15 Depth=1
	movl	%r14d, %eax
	movq	8(%rsp), %rcx                   # 8-byte Reload
	leaq	(%rcx,%rax,4), %rdi
	movl	%r15d, %eax
	leaq	(%rcx,%rax,4), %rsi
	movl	%ebx, %edx
	callq	_Z20__device_stub__gsum2PfS_i
.LBB27_18:                              #   in Loop: Header=BB27_15 Depth=1
	callq	hipGetLastError
	movl	%r15d, %r14d
	movl	%ebp, %ebx
	testl	%eax, %eax
	je	.LBB27_15
# %bb.19:
	movl	%eax, %r12d
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.25, %edi
	movl	%r12d, %esi
.LBB27_5:
	movq	%rax, %rdx
	xorl	%eax, %eax
	callq	printf
	movl	$1, %edi
	callq	exit
.LBB27_26:
	callq	hipGetLastError
	incq	%r13
	movq	%r13, %rdi
	movl	$1, %esi
	movq	16(%rsp), %rdx                  # 8-byte Reload
	movl	$1, %ecx
	xorl	%r8d, %r8d
	xorl	%r9d, %r9d
	callq	__hipPushCallConfiguration
	testl	%eax, %eax
	jne	.LBB27_28
# %bb.27:
	movl	%r14d, %eax
	movq	8(%rsp), %rdi                   # 8-byte Reload
	leaq	(%rdi,%rax,4), %rsi
	movl	$1, %edx
	callq	_Z21__device_stub__gcopy1PfS_i
.LBB27_28:
	callq	hipDeviceSynchronize
	callq	hipGetLastError
	testl	%eax, %eax
	jne	.LBB27_29
.LBB27_30:
	addq	$56, %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
.LBB27_3:
	.cfi_def_cfa_offset 112
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.22, %edi
	jmp	.LBB27_4
.LBB27_29:
	movl	%eax, %ebx
	movl	%eax, %edi
	callq	hipGetErrorString
	movl	$.L.str.26, %edi
.LBB27_4:
	movl	%ebx, %esi
	jmp	.LBB27_5
.Lfunc_end27:
	.size	gpu_sum3, .Lfunc_end27-gpu_sum3
	.cfi_endproc
                                        # -- End function
	.globl	setgbsize_                      # -- Begin function setgbsize_
	.type	setgbsize_,@function
setgbsize_:                             # @setgbsize_
	.cfi_startproc
# %bb.0:
	movl	(%rdi), %eax
	movl	%eax, nblock_size(%rip)
	retq
.Lfunc_end28:
	.size	setgbsize_, .Lfunc_end28-setgbsize_
	.cfi_endproc
                                        # -- End function
	.globl	getmmcc_                        # -- Begin function getmmcc_
	.type	getmmcc_,@function
getmmcc_:                               # @getmmcc_
	.cfi_startproc
# %bb.0:
	movl	mmcc(%rip), %eax
	retq
.Lfunc_end29:
	.size	getmmcc_, .Lfunc_end29-getmmcc_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_fallocate_                  # -- Begin function gpu_fallocate_
	.type	gpu_fallocate_,@function
gpu_fallocate_:                         # @gpu_fallocate_
	.cfi_startproc
# %bb.0:
	pushq	%r14
	.cfi_def_cfa_offset 16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	pushq	%rax
	.cfi_def_cfa_offset 32
	.cfi_offset %rbx, -24
	.cfi_offset %r14, -16
	movq	%rdi, %rbx
	movl	(%rsi), %esi
	movq	%rsp, %r14
	movq	%r14, %rdi
	callq	gpu_fallocate
	movq	(%r14), %rax
	movq	%rax, (%rbx)
	addq	$8, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end30:
	.size	gpu_fallocate_, .Lfunc_end30-gpu_fallocate_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_iallocate_                  # -- Begin function gpu_iallocate_
	.type	gpu_iallocate_,@function
gpu_iallocate_:                         # @gpu_iallocate_
	.cfi_startproc
# %bb.0:
	pushq	%r14
	.cfi_def_cfa_offset 16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	pushq	%rax
	.cfi_def_cfa_offset 32
	.cfi_offset %rbx, -24
	.cfi_offset %r14, -16
	movq	%rdi, %rbx
	movl	(%rsi), %esi
	movq	%rsp, %r14
	movq	%r14, %rdi
	callq	gpu_iallocate
	movq	(%r14), %rax
	movq	%rax, (%rbx)
	addq	$8, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end31:
	.size	gpu_iallocate_, .Lfunc_end31-gpu_iallocate_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_deallocate_                 # -- Begin function gpu_deallocate_
	.type	gpu_deallocate_,@function
gpu_deallocate_:                        # @gpu_deallocate_
	.cfi_startproc
# %bb.0:
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset %rbx, -16
	movq	%rdi, %rbx
	movq	(%rdi), %rdi
	callq	gpu_deallocate
	movq	$0, (%rbx)
	popq	%rbx
	.cfi_def_cfa_offset 8
	retq
.Lfunc_end32:
	.size	gpu_deallocate_, .Lfunc_end32-gpu_deallocate_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_fcopyin_                    # -- Begin function gpu_fcopyin_
	.type	gpu_fcopyin_,@function
gpu_fcopyin_:                           # @gpu_fcopyin_
	.cfi_startproc
# %bb.0:
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	jmp	gpu_fcopyin                     # TAILCALL
.Lfunc_end33:
	.size	gpu_fcopyin_, .Lfunc_end33-gpu_fcopyin_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_fcopyout_                   # -- Begin function gpu_fcopyout_
	.type	gpu_fcopyout_,@function
gpu_fcopyout_:                          # @gpu_fcopyout_
	.cfi_startproc
# %bb.0:
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	jmp	gpu_fcopyout                    # TAILCALL
.Lfunc_end34:
	.size	gpu_fcopyout_, .Lfunc_end34-gpu_fcopyout_
	.cfi_endproc
                                        # -- End function
	.globl	emptykernel_                    # -- Begin function emptykernel_
	.type	emptykernel_,@function
emptykernel_:                           # @emptykernel_
	.cfi_startproc
# %bb.0:
	jmp	emptykernel                     # TAILCALL
.Lfunc_end35:
	.size	emptykernel_, .Lfunc_end35-emptykernel_
	.cfi_endproc
                                        # -- End function
	.globl	init_cu_                        # -- Begin function init_cu_
	.type	init_cu_,@function
init_cu_:                               # @init_cu_
	.cfi_startproc
# %bb.0:
	movl	(%rdi), %edi
	jmp	init_cu                         # TAILCALL
.Lfunc_end36:
	.size	init_cu_, .Lfunc_end36-init_cu_
	.cfi_endproc
                                        # -- End function
	.globl	end_cu_                         # -- Begin function end_cu_
	.type	end_cu_,@function
end_cu_:                                # @end_cu_
	.cfi_startproc
# %bb.0:
	jmp	end_cu                          # TAILCALL
.Lfunc_end37:
	.size	end_cu_, .Lfunc_end37-end_cu_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy1_                      # -- Begin function gpu_copy1_
	.type	gpu_copy1_,@function
gpu_copy1_:                             # @gpu_copy1_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	jmp	gpu_copy1                       # TAILCALL
.Lfunc_end38:
	.size	gpu_copy1_, .Lfunc_end38-gpu_copy1_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy2a_                     # -- Begin function gpu_copy2a_
	.type	gpu_copy2a_,@function
gpu_copy2a_:                            # @gpu_copy2a_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	movl	(%r8), %r8d
	jmp	gpu_copy2a                      # TAILCALL
.Lfunc_end39:
	.size	gpu_copy2a_, .Lfunc_end39-gpu_copy2a_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy2b_                     # -- Begin function gpu_copy2b_
	.type	gpu_copy2b_,@function
gpu_copy2b_:                            # @gpu_copy2b_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	movl	(%r8), %r8d
	jmp	gpu_copy2b                      # TAILCALL
.Lfunc_end40:
	.size	gpu_copy2b_, .Lfunc_end40-gpu_copy2b_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_saxpy2_                     # -- Begin function gpu_saxpy2_
	.type	gpu_saxpy2_,@function
gpu_saxpy2_:                            # @gpu_saxpy2_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movss	(%rdx), %xmm0                   # xmm0 = mem[0],zero,zero,zero
	movl	(%rcx), %edx
	movl	(%r8), %ecx
	movl	(%r9), %r8d
	jmp	gpu_saxpy2                      # TAILCALL
.Lfunc_end41:
	.size	gpu_saxpy2_, .Lfunc_end41-gpu_saxpy2_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_copy3_                      # -- Begin function gpu_copy3_
	.type	gpu_copy3_,@function
gpu_copy3_:                             # @gpu_copy3_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	movl	(%r8), %r8d
	movl	(%r9), %r9d
	jmp	gpu_copy3                       # TAILCALL
.Lfunc_end42:
	.size	gpu_copy3_, .Lfunc_end42-gpu_copy3_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_transpose2_                 # -- Begin function gpu_transpose2_
	.type	gpu_transpose2_,@function
gpu_transpose2_:                        # @gpu_transpose2_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	movl	(%r8), %r8d
	jmp	gpu_transpose2                  # TAILCALL
.Lfunc_end43:
	.size	gpu_transpose2_, .Lfunc_end43-gpu_transpose2_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_sum1_                       # -- Begin function gpu_sum1_
	.type	gpu_sum1_,@function
gpu_sum1_:                              # @gpu_sum1_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	jmp	gpu_sum1                        # TAILCALL
.Lfunc_end44:
	.size	gpu_sum1_, .Lfunc_end44-gpu_sum1_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_sum2_                       # -- Begin function gpu_sum2_
	.type	gpu_sum2_,@function
gpu_sum2_:                              # @gpu_sum2_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movl	(%rdx), %edx
	movl	(%rcx), %ecx
	jmp	gpu_sum2                        # TAILCALL
.Lfunc_end45:
	.size	gpu_sum2_, .Lfunc_end45-gpu_sum2_
	.cfi_endproc
                                        # -- End function
	.globl	gpu_sum3_                       # -- Begin function gpu_sum3_
	.type	gpu_sum3_,@function
gpu_sum3_:                              # @gpu_sum3_
	.cfi_startproc
# %bb.0:
	movq	(%rdi), %rdi
	movq	(%rsi), %rsi
	movq	(%rdx), %rdx
	movl	(%rcx), %ecx
	movl	(%r8), %r8d
	jmp	gpu_sum3                        # TAILCALL
.Lfunc_end46:
	.size	gpu_sum3_, .Lfunc_end46-gpu_sum3_
	.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	.LBB47_2
# %bb.1:
	movl	$__hip_fatbin_wrapper, %edi
	callq	__hipRegisterFatBinary
	movq	%rax, %rbx
	movq	%rax, __hip_gpubin_handle(%rip)
.LBB47_2:
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z11emptyKernelv, %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	$_Z6gcopy1PfS_i, %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	$_Z7gcopy2aPfS_ii, %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	$_Z7gcopy2bPfS_ii, %esi
	movl	$.L__unnamed_4, %edx
	movl	$.L__unnamed_4, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z7gsaxpy2PfS_fii, %esi
	movl	$.L__unnamed_5, %edx
	movl	$.L__unnamed_5, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z6gcopy3PfS_ii, %esi
	movl	$.L__unnamed_6, %edx
	movl	$.L__unnamed_6, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z11gtranspose2PfS_ii, %esi
	movl	$.L__unnamed_7, %edx
	movl	$.L__unnamed_7, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z5gsum1PfS_i, %esi
	movl	$.L__unnamed_8, %edx
	movl	$.L__unnamed_8, %ecx
	movq	%rbx, %rdi
	movl	$-1, %r8d
	xorl	%r9d, %r9d
	callq	__hipRegisterFunction
	xorps	%xmm0, %xmm0
	movups	%xmm0, 16(%rsp)
	movups	%xmm0, (%rsp)
	movl	$_Z5gsum2PfS_i, %esi
	movl	$.L__unnamed_9, %edx
	movl	$.L__unnamed_9, %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_end47:
	.size	__hip_module_ctor, .Lfunc_end47-__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	.LBB48_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
.LBB48_2:
	retq
.Lfunc_end48:
	.size	__hip_module_dtor, .Lfunc_end48-__hip_module_dtor
	.cfi_endproc
                                        # -- End function
	.type	nblock_size,@object             # @nblock_size
	.data
	.globl	nblock_size
	.p2align	2, 0x0
nblock_size:
	.long	64                              # 0x40
	.size	nblock_size, 4

	.type	ngrid_size,@object              # @ngrid_size
	.globl	ngrid_size
	.p2align	2, 0x0
ngrid_size:
	.long	1                               # 0x1
	.size	ngrid_size, 4

	.type	maxgsx,@object                  # @maxgsx
	.globl	maxgsx
	.p2align	2, 0x0
maxgsx:
	.long	65535                           # 0xffff
	.size	maxgsx, 4

	.type	mmcc,@object                    # @mmcc
	.bss
	.globl	mmcc
	.p2align	2, 0x0
mmcc:
	.long	0                               # 0x0
	.size	mmcc, 4

	.type	_Z11emptyKernelv,@object        # @_Z11emptyKernelv
	.section	.rodata,"a",@progbits
	.globl	_Z11emptyKernelv
	.p2align	3, 0x0
_Z11emptyKernelv:
	.quad	_Z26__device_stub__emptyKernelv
	.size	_Z11emptyKernelv, 8

	.type	.L.str,@object                  # @.str
	.section	.rodata.str1.1,"aMS",@progbits,1
.L.str:
	.asciz	"hipMalloc float Error=%d:%s,l=%d\n"
	.size	.L.str, 34

	.type	.L.str.1,@object                # @.str.1
.L.str.1:
	.asciz	"hipMalloc int Error=%d:%s,l=%d\n"
	.size	.L.str.1, 32

	.type	.L.str.2,@object                # @.str.2
.L.str.2:
	.asciz	"hipFree Error=%d:%s\n"
	.size	.L.str.2, 21

	.type	.L.str.3,@object                # @.str.3
.L.str.3:
	.asciz	"hipMemcpyHostToDevice float Error=%d:%s\n"
	.size	.L.str.3, 41

	.type	.L.str.4,@object                # @.str.4
.L.str.4:
	.asciz	"hipMemcpyDeviceToHost float Error=%d:%s\n"
	.size	.L.str.4, 41

	.type	.L.str.5,@object                # @.str.5
.L.str.5:
	.asciz	"emptyKernel error=%d:%s\n"
	.size	.L.str.5, 25

	.type	.L.str.6,@object                # @.str.6
.L.str.6:
	.asciz	"hipGetDeviceCount Error=%i:%s\n"
	.size	.L.str.6, 31

	.type	.L.str.7,@object                # @.str.7
.L.str.7:
	.asciz	"hipGetDeviceProperties Error=%i:%s\n"
	.size	.L.str.7, 36

	.type	.L.str.8,@object                # @.str.8
.L.str.8:
	.asciz	"j=%i:CUDA_DEVICE_NAME=%s,CUDA_MULTIPROCESSOR_COUNT=%i\n"
	.size	.L.str.8, 55

	.type	.L.str.9,@object                # @.str.9
.L.str.9:
	.asciz	"    CUDA_GLOBAL_MEM_SIZE=%lu(%f GB),Capability=%d\n"
	.size	.L.str.9, 51

	.type	.L.str.10,@object               # @.str.10
.L.str.10:
	.asciz	"    Capability=%d\n"
	.size	.L.str.10, 19

	.type	_ZL5devid,@object               # @_ZL5devid
	.local	_ZL5devid
	.comm	_ZL5devid,4,4
	.type	.L.str.11,@object               # @.str.11
.L.str.11:
	.asciz	"using device j=%i\n"
	.size	.L.str.11, 19

	.type	.L.str.12,@object               # @.str.12
.L.str.12:
	.asciz	"hipSetDevice Error=%i:%s\n"
	.size	.L.str.12, 26

	.type	.L.str.13,@object               # @.str.13
.L.str.13:
	.asciz	"hipDeviceReset Error=%d:%s\n"
	.size	.L.str.13, 28

	.type	_Z6gcopy1PfS_i,@object          # @_Z6gcopy1PfS_i
	.section	.rodata,"a",@progbits
	.globl	_Z6gcopy1PfS_i
	.p2align	3, 0x0
_Z6gcopy1PfS_i:
	.quad	_Z21__device_stub__gcopy1PfS_i
	.size	_Z6gcopy1PfS_i, 8

	.type	_Z7gcopy2aPfS_ii,@object        # @_Z7gcopy2aPfS_ii
	.globl	_Z7gcopy2aPfS_ii
	.p2align	3, 0x0
_Z7gcopy2aPfS_ii:
	.quad	_Z22__device_stub__gcopy2aPfS_ii
	.size	_Z7gcopy2aPfS_ii, 8

	.type	_Z7gcopy2bPfS_ii,@object        # @_Z7gcopy2bPfS_ii
	.globl	_Z7gcopy2bPfS_ii
	.p2align	3, 0x0
_Z7gcopy2bPfS_ii:
	.quad	_Z22__device_stub__gcopy2bPfS_ii
	.size	_Z7gcopy2bPfS_ii, 8

	.type	_Z7gsaxpy2PfS_fii,@object       # @_Z7gsaxpy2PfS_fii
	.globl	_Z7gsaxpy2PfS_fii
	.p2align	3, 0x0
_Z7gsaxpy2PfS_fii:
	.quad	_Z22__device_stub__gsaxpy2PfS_fii
	.size	_Z7gsaxpy2PfS_fii, 8

	.type	_Z6gcopy3PfS_ii,@object         # @_Z6gcopy3PfS_ii
	.globl	_Z6gcopy3PfS_ii
	.p2align	3, 0x0
_Z6gcopy3PfS_ii:
	.quad	_Z21__device_stub__gcopy3PfS_ii
	.size	_Z6gcopy3PfS_ii, 8

	.type	_Z11gtranspose2PfS_ii,@object   # @_Z11gtranspose2PfS_ii
	.globl	_Z11gtranspose2PfS_ii
	.p2align	3, 0x0
_Z11gtranspose2PfS_ii:
	.quad	_Z26__device_stub__gtranspose2PfS_ii
	.size	_Z11gtranspose2PfS_ii, 8

	.type	_Z5gsum1PfS_i,@object           # @_Z5gsum1PfS_i
	.globl	_Z5gsum1PfS_i
	.p2align	3, 0x0
_Z5gsum1PfS_i:
	.quad	_Z20__device_stub__gsum1PfS_i
	.size	_Z5gsum1PfS_i, 8

	.type	_Z5gsum2PfS_i,@object           # @_Z5gsum2PfS_i
	.globl	_Z5gsum2PfS_i
	.p2align	3, 0x0
_Z5gsum2PfS_i:
	.quad	_Z20__device_stub__gsum2PfS_i
	.size	_Z5gsum2PfS_i, 8

	.type	.L.str.14,@object               # @.str.14
	.section	.rodata.str1.1,"aMS",@progbits,1
.L.str.14:
	.asciz	"gcopy1 error=%d:%s\n"
	.size	.L.str.14, 20

	.type	.L.str.15,@object               # @.str.15
.L.str.15:
	.asciz	"gcopy2a error=%d:%s\n"
	.size	.L.str.15, 21

	.type	.L.str.16,@object               # @.str.16
.L.str.16:
	.asciz	"gcopy2b error=%d:%s\n"
	.size	.L.str.16, 21

	.type	.L.str.17,@object               # @.str.17
.L.str.17:
	.asciz	"gsaxpy2 error=%d:%s\n"
	.size	.L.str.17, 21

	.type	.L.str.18,@object               # @.str.18
.L.str.18:
	.asciz	"gcopy3 error=%d:%s\n"
	.size	.L.str.18, 20

	.type	.L.str.19,@object               # @.str.19
.L.str.19:
	.asciz	"gtranspose2 error=%d:%s\n"
	.size	.L.str.19, 25

	.type	.L.str.20,@object               # @.str.20
.L.str.20:
	.asciz	"gsum1 error=%d:%s\n"
	.size	.L.str.20, 19

	.type	.L.str.21,@object               # @.str.21
.L.str.21:
	.asciz	"gsum2 error=%d:%s\n"
	.size	.L.str.21, 19

	.type	.L.str.22,@object               # @.str.22
.L.str.22:
	.asciz	"gsum2:0 error=%d:%s\n"
	.size	.L.str.22, 21

	.type	.L.str.23,@object               # @.str.23
.L.str.23:
	.asciz	"gcopy1:0 error=%d:%s\n"
	.size	.L.str.23, 22

	.type	.L.str.24,@object               # @.str.24
.L.str.24:
	.asciz	"gsum2:1 error=%d:%s\n"
	.size	.L.str.24, 21

	.type	.L.str.25,@object               # @.str.25
.L.str.25:
	.asciz	"gsum2:n error=%d:%s\n"
	.size	.L.str.25, 21

	.type	.L.str.26,@object               # @.str.26
.L.str.26:
	.asciz	"gcopy1:n error=%d:%s\n"
	.size	.L.str.26, 22

	.type	.L__unnamed_1,@object           # @0
.L__unnamed_1:
	.asciz	"_Z11emptyKernelv"
	.size	.L__unnamed_1, 17

	.type	.L__unnamed_2,@object           # @1
.L__unnamed_2:
	.asciz	"_Z6gcopy1PfS_i"
	.size	.L__unnamed_2, 15

	.type	.L__unnamed_3,@object           # @2
.L__unnamed_3:
	.asciz	"_Z7gcopy2aPfS_ii"
	.size	.L__unnamed_3, 17

	.type	.L__unnamed_4,@object           # @3
.L__unnamed_4:
	.asciz	"_Z7gcopy2bPfS_ii"
	.size	.L__unnamed_4, 17

	.type	.L__unnamed_5,@object           # @4
.L__unnamed_5:
	.asciz	"_Z7gsaxpy2PfS_fii"
	.size	.L__unnamed_5, 18

	.type	.L__unnamed_6,@object           # @5
.L__unnamed_6:
	.asciz	"_Z6gcopy3PfS_ii"
	.size	.L__unnamed_6, 16

	.type	.L__unnamed_7,@object           # @6
.L__unnamed_7:
	.asciz	"_Z11gtranspose2PfS_ii"
	.size	.L__unnamed_7, 22

	.type	.L__unnamed_8,@object           # @7
.L__unnamed_8:
	.asciz	"_Z5gsum1PfS_i"
	.size	.L__unnamed_8, 14

	.type	.L__unnamed_9,@object           # @8
.L__unnamed_9:
	.asciz	"_Z5gsum2PfS_i"
	.size	.L__unnamed_9, 14

	.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

	.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 _Z26__device_stub__emptyKernelv
	.addrsig_sym _Z21__device_stub__gcopy1PfS_i
	.addrsig_sym _Z22__device_stub__gcopy2aPfS_ii
	.addrsig_sym _Z22__device_stub__gcopy2bPfS_ii
	.addrsig_sym _Z22__device_stub__gsaxpy2PfS_fii
	.addrsig_sym _Z21__device_stub__gcopy3PfS_ii
	.addrsig_sym _Z26__device_stub__gtranspose2PfS_ii
	.addrsig_sym _Z20__device_stub__gsum1PfS_i
	.addrsig_sym _Z20__device_stub__gsum2PfS_i
	.addrsig_sym __hip_module_ctor
	.addrsig_sym __hip_module_dtor
	.addrsig_sym _Z11emptyKernelv
	.addrsig_sym _Z6gcopy1PfS_i
	.addrsig_sym _Z7gcopy2aPfS_ii
	.addrsig_sym _Z7gcopy2bPfS_ii
	.addrsig_sym _Z7gsaxpy2PfS_fii
	.addrsig_sym _Z6gcopy3PfS_ii
	.addrsig_sym _Z11gtranspose2PfS_ii
	.addrsig_sym _Z5gsum1PfS_i
	.addrsig_sym _Z5gsum2PfS_i
	.addrsig_sym __hip_fatbin
	.addrsig_sym __hip_fatbin_wrapper
	.addrsig_sym __hip_cuid_

	.text
	.amdgcn_target "amdgcn-amd-amdhsa--gfx1100"
	.protected	_Z11emptyKernelv        ; -- Begin function _Z11emptyKernelv
	.globl	_Z11emptyKernelv
	.p2align	8
	.type	_Z11emptyKernelv,@function
_Z11emptyKernelv:                       ; @_Z11emptyKernelv
; %bb.0:
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z11emptyKernelv
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 0
		.amdhsa_user_sgpr_count 15
		.amdhsa_user_sgpr_dispatch_ptr 0
		.amdhsa_user_sgpr_queue_ptr 0
		.amdhsa_user_sgpr_kernarg_segment_ptr 0
		.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 1
		.amdhsa_next_free_sgpr 1
		.amdhsa_reserve_vcc 0
		.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	_Z11emptyKernelv, .Lfunc_end0-_Z11emptyKernelv
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 4
; NumSgprs: 0
; NumVgprs: 0
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 0
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 1
; NumVGPRsForWavesPerEU: 1
; 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	_Z6gcopy1PfS_i          ; -- Begin function _Z6gcopy1PfS_i
	.globl	_Z6gcopy1PfS_i
	.p2align	8
	.type	_Z6gcopy1PfS_i,@function
_Z6gcopy1PfS_i:                         ; @_Z6gcopy1PfS_i
; %bb.0:
	s_clause 0x1
	s_load_b32 s2, s[0:1], 0x24
	s_load_b32 s3, s[0:1], 0x10
	s_waitcnt lgkmcnt(0)
	s_and_b32 s2, s2, 0xffff
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_mad_u64_u32 v[1:2], null, s15, s2, v[0:1]
	s_mov_b32 s2, exec_lo
	v_cmpx_gt_i32_e64 s3, v1
	s_cbranch_execz .LBB1_2
; %bb.1:
	s_load_b128 s[0:3], s[0:1], 0x0
	v_ashrrev_i32_e32 v2, 31, v1
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_lshlrev_b64 v[0:1], 2, v[1:2]
	s_waitcnt lgkmcnt(0)
	v_add_co_u32 v2, vcc_lo, s2, v0
	s_delay_alu instid0(VALU_DEP_2)
	v_add_co_ci_u32_e32 v3, vcc_lo, s3, v1, vcc_lo
	v_add_co_u32 v0, vcc_lo, s0, v0
	v_add_co_ci_u32_e32 v1, vcc_lo, s1, v1, vcc_lo
	global_load_b32 v2, v[2:3], off
	s_waitcnt vmcnt(0)
	global_store_b32 v[0:1], v2, off
.LBB1_2:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z6gcopy1PfS_i
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 4
		.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_end1:
	.size	_Z6gcopy1PfS_i, .Lfunc_end1-_Z6gcopy1PfS_i
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 148
; NumSgprs: 18
; NumVgprs: 4
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 4
; 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	_Z7gcopy2aPfS_ii        ; -- Begin function _Z7gcopy2aPfS_ii
	.globl	_Z7gcopy2aPfS_ii
	.p2align	8
	.type	_Z7gcopy2aPfS_ii,@function
_Z7gcopy2aPfS_ii:                       ; @_Z7gcopy2aPfS_ii
; %bb.0:
	s_clause 0x1
	s_load_b32 s4, s[0:1], 0x24
	s_load_b64 s[2:3], s[0:1], 0x10
	s_waitcnt lgkmcnt(0)
	s_and_b32 s4, s4, 0xffff
	s_cmp_lt_i32 s15, s3
	v_mad_u64_u32 v[1:2], null, s14, s4, v[0:1]
	s_cselect_b32 s3, -1, 0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cmp_gt_i32_e32 vcc_lo, s2, v1
	s_and_b32 s3, s3, vcc_lo
	s_and_saveexec_b32 s4, s3
	s_cbranch_execz .LBB2_2
; %bb.1:
	s_load_b128 s[4:7], s[0:1], 0x0
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_mad_u64_u32 v[2:3], null, s15, s2, v[1:2]
	v_ashrrev_i32_e32 v3, 31, v2
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
	v_lshlrev_b64 v[0:1], 2, v[2:3]
	s_waitcnt lgkmcnt(0)
	v_add_co_u32 v2, vcc_lo, s6, v0
	s_delay_alu instid0(VALU_DEP_2)
	v_add_co_ci_u32_e32 v3, vcc_lo, s7, v1, vcc_lo
	v_add_co_u32 v0, vcc_lo, s4, v0
	v_add_co_ci_u32_e32 v1, vcc_lo, s5, v1, vcc_lo
	global_load_b32 v2, v[2:3], off
	s_waitcnt vmcnt(0)
	global_store_b32 v[0:1], v2, off
.LBB2_2:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z7gcopy2aPfS_ii
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 0
		.amdhsa_next_free_vgpr 4
		.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_end2:
	.size	_Z7gcopy2aPfS_ii, .Lfunc_end2-_Z7gcopy2aPfS_ii
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 168
; NumSgprs: 18
; NumVgprs: 4
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 4
; 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: 0
	.text
	.protected	_Z7gcopy2bPfS_ii        ; -- Begin function _Z7gcopy2bPfS_ii
	.globl	_Z7gcopy2bPfS_ii
	.p2align	8
	.type	_Z7gcopy2bPfS_ii,@function
_Z7gcopy2bPfS_ii:                       ; @_Z7gcopy2bPfS_ii
; %bb.0:
	s_load_b64 s[4:5], s[0:1], 0x10
	s_mov_b32 s2, exec_lo
	s_waitcnt lgkmcnt(0)
	v_cmpx_gt_i32_e64 s4, v0
	s_cbranch_execz .LBB3_5
; %bb.1:                                ; %.lr.ph
	s_clause 0x1
	s_load_b32 s6, s[0:1], 0x24
	s_load_b128 s[0:3], s[0:1], 0x0
	s_mov_b32 s7, 0
	s_waitcnt lgkmcnt(0)
	s_and_b32 s6, s6, 0xffff
	s_cmp_lt_i32 s15, s5
	s_mul_i32 s15, s15, s4
	s_cselect_b32 s5, -1, 0
.LBB3_2:                                ; =>This Inner Loop Header: Depth=1
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_not1_b32 vcc_lo, exec_lo, s5
	s_cbranch_vccnz .LBB3_4
; %bb.3:                                ;   in Loop: Header=BB3_2 Depth=1
	v_add_nc_u32_e32 v1, s15, v0
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_ashrrev_i32_e32 v2, 31, v1
	v_lshlrev_b64 v[1:2], 2, v[1:2]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_co_u32 v3, vcc_lo, s2, v1
	v_add_co_ci_u32_e32 v4, vcc_lo, s3, v2, vcc_lo
	v_add_co_u32 v1, vcc_lo, s0, v1
	v_add_co_ci_u32_e32 v2, vcc_lo, s1, v2, vcc_lo
	global_load_b32 v3, v[3:4], off
	s_waitcnt vmcnt(0)
	global_store_b32 v[1:2], v3, off
.LBB3_4:                                ;   in Loop: Header=BB3_2 Depth=1
	v_add_nc_u32_e32 v0, s6, v0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cmp_le_i32_e32 vcc_lo, s4, v0
	s_or_b32 s7, vcc_lo, s7
	s_and_not1_b32 exec_lo, exec_lo, s7
	s_cbranch_execnz .LBB3_2
.LBB3_5:                                ; %._crit_edge
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z7gcopy2bPfS_ii
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 5
		.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	_Z7gcopy2bPfS_ii, .Lfunc_end3-_Z7gcopy2bPfS_ii
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 192
; NumSgprs: 18
; NumVgprs: 5
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 5
; 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	_Z7gsaxpy2PfS_fii       ; -- Begin function _Z7gsaxpy2PfS_fii
	.globl	_Z7gsaxpy2PfS_fii
	.p2align	8
	.type	_Z7gsaxpy2PfS_fii,@function
_Z7gsaxpy2PfS_fii:                      ; @_Z7gsaxpy2PfS_fii
; %bb.0:
	s_load_b128 s[4:7], s[0:1], 0x10
	s_mov_b32 s2, exec_lo
	s_waitcnt lgkmcnt(0)
	v_cmpx_gt_i32_e64 s5, v0
	s_cbranch_execz .LBB4_5
; %bb.1:                                ; %.lr.ph
	s_clause 0x1
	s_load_b32 s7, s[0:1], 0x2c
	s_load_b128 s[0:3], s[0:1], 0x0
	s_mov_b32 s8, 0
	s_waitcnt lgkmcnt(0)
	s_and_b32 s7, s7, 0xffff
	s_cmp_lt_i32 s15, s6
	s_mul_i32 s15, s15, s5
	s_cselect_b32 s6, -1, 0
.LBB4_2:                                ; =>This Inner Loop Header: Depth=1
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_not1_b32 vcc_lo, exec_lo, s6
	s_cbranch_vccnz .LBB4_4
; %bb.3:                                ;   in Loop: Header=BB4_2 Depth=1
	v_add_nc_u32_e32 v1, s15, v0
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_ashrrev_i32_e32 v2, 31, v1
	v_lshlrev_b64 v[1:2], 2, v[1:2]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_co_u32 v3, vcc_lo, s2, v1
	v_add_co_ci_u32_e32 v4, vcc_lo, s3, v2, vcc_lo
	v_add_co_u32 v1, vcc_lo, s0, v1
	v_add_co_ci_u32_e32 v2, vcc_lo, s1, v2, vcc_lo
	global_load_b32 v3, v[3:4], off
	global_load_b32 v4, v[1:2], off
	s_waitcnt vmcnt(0)
	v_fmac_f32_e32 v4, s4, v3
	global_store_b32 v[1:2], v4, off
.LBB4_4:                                ;   in Loop: Header=BB4_2 Depth=1
	v_add_nc_u32_e32 v0, s7, v0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cmp_le_i32_e32 vcc_lo, s5, v0
	s_or_b32 s8, vcc_lo, s8
	s_and_not1_b32 exec_lo, exec_lo, s8
	s_cbranch_execnz .LBB4_2
.LBB4_5:                                ; %._crit_edge
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z7gsaxpy2PfS_fii
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 288
		.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 5
		.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_end4:
	.size	_Z7gsaxpy2PfS_fii, .Lfunc_end4-_Z7gsaxpy2PfS_fii
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 204
; NumSgprs: 18
; NumVgprs: 5
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 5
; 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	_Z6gcopy3PfS_ii         ; -- Begin function _Z6gcopy3PfS_ii
	.globl	_Z6gcopy3PfS_ii
	.p2align	8
	.type	_Z6gcopy3PfS_ii,@function
_Z6gcopy3PfS_ii:                        ; @_Z6gcopy3PfS_ii
; %bb.0:
	s_clause 0x1
	s_load_b32 s2, s[0:1], 0x24
	s_load_b64 s[4:5], s[0:1], 0x10
	v_and_b32_e32 v2, 0x3ff, v0
	v_bfe_u32 v3, v0, 10, 10
	s_waitcnt lgkmcnt(0)
	s_lshr_b32 s3, s2, 16
	s_and_b32 s2, s2, 0xffff
	s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
	v_mad_u64_u32 v[0:1], null, s14, s2, v[2:3]
	v_mad_u64_u32 v[1:2], null, s15, s3, v[3:4]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_cmp_gt_i32_e32 vcc_lo, s4, v0
	v_cmp_gt_i32_e64 s2, s5, v1
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_and_b32 s2, vcc_lo, s2
	s_and_saveexec_b32 s3, s2
	s_cbranch_execz .LBB5_2
; %bb.1:
	s_load_b128 s[0:3], s[0:1], 0x0
	v_mad_u64_u32 v[2:3], null, v1, s4, v[0:1]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_ashrrev_i32_e32 v3, 31, v2
	v_lshlrev_b64 v[0:1], 2, v[2:3]
	s_waitcnt lgkmcnt(0)
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_co_u32 v2, vcc_lo, s2, v0
	v_add_co_ci_u32_e32 v3, vcc_lo, s3, v1, vcc_lo
	v_add_co_u32 v0, vcc_lo, s0, v0
	v_add_co_ci_u32_e32 v1, vcc_lo, s1, v1, vcc_lo
	global_load_b32 v2, v[2:3], off
	s_waitcnt vmcnt(0)
	global_store_b32 v[0:1], v2, off
.LBB5_2:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z6gcopy3PfS_ii
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 5
		.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_end5:
	.size	_Z6gcopy3PfS_ii, .Lfunc_end5-_Z6gcopy3PfS_ii
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 200
; NumSgprs: 18
; NumVgprs: 5
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 5
; 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	_Z11gtranspose2PfS_ii   ; -- Begin function _Z11gtranspose2PfS_ii
	.globl	_Z11gtranspose2PfS_ii
	.p2align	8
	.type	_Z11gtranspose2PfS_ii,@function
_Z11gtranspose2PfS_ii:                  ; @_Z11gtranspose2PfS_ii
; %bb.0:
	s_clause 0x2
	s_load_b32 s8, s[0:1], 0x24
	s_load_b64 s[2:3], s[0:1], 0x10
	s_load_b128 s[4:7], s[0:1], 0x0
	v_and_b32_e32 v1, 0x3ff, v0
	v_bfe_u32 v2, v0, 10, 10
	s_waitcnt lgkmcnt(0)
	s_and_b32 s1, s8, 0xffff
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
	s_mul_i32 s14, s14, s1
	s_mul_i32 s15, s15, s1
	v_add_nc_u32_e32 v0, s14, v1
	v_add_nc_u32_e32 v3, s15, v2
	s_add_i32 s1, s1, 1
	v_cmp_gt_i32_e32 vcc_lo, s2, v0
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_cmp_gt_i32_e64 s0, s3, v3
	s_and_b32 s8, vcc_lo, s0
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_saveexec_b32 s0, s8
	s_cbranch_execz .LBB6_2
; %bb.1:
	v_mad_u64_u32 v[4:5], null, v3, s2, v[0:1]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_ashrrev_i32_e32 v5, 31, v4
	v_lshlrev_b64 v[3:4], 2, v[4:5]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_co_u32 v3, vcc_lo, s6, v3
	v_add_co_ci_u32_e32 v4, vcc_lo, s7, v4, vcc_lo
	global_load_b32 v0, v[3:4], off
	v_mad_u32_u24 v3, s1, v2, v1
	s_delay_alu instid0(VALU_DEP_1)
	v_lshl_add_u32 v3, v3, 2, 0
	s_waitcnt vmcnt(0)
	ds_store_b32 v3, v0
.LBB6_2:
	s_or_b32 exec_lo, exec_lo, s0
	v_add_nc_u32_e32 v3, s14, v2
	v_add_nc_u32_e32 v0, s15, v1
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	v_cmp_gt_i32_e32 vcc_lo, s2, v3
	v_cmp_gt_i32_e64 s0, s3, v0
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_and_b32 s0, vcc_lo, s0
	s_and_saveexec_b32 s2, s0
	s_cbranch_execz .LBB6_4
; %bb.3:
	v_mad_u32_u24 v4, s1, v1, v2
	v_mad_u64_u32 v[1:2], null, v3, s3, v[0:1]
	s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_lshl_add_u32 v0, v4, 2, 0
	v_ashrrev_i32_e32 v2, 31, v1
	ds_load_b32 v3, v0
	v_lshlrev_b64 v[0:1], 2, v[1:2]
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
	v_add_co_u32 v0, vcc_lo, s4, v0
	v_add_co_ci_u32_e32 v1, vcc_lo, s5, v1, vcc_lo
	s_waitcnt lgkmcnt(0)
	global_store_b32 v[0:1], v3, off
.LBB6_4:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z11gtranspose2PfS_ii
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 6
		.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_end6:
	.size	_Z11gtranspose2PfS_ii, .Lfunc_end6-_Z11gtranspose2PfS_ii
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 336
; NumSgprs: 18
; NumVgprs: 6
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 6
; 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	_Z5gsum1PfS_i           ; -- Begin function _Z5gsum1PfS_i
	.globl	_Z5gsum1PfS_i
	.p2align	8
	.type	_Z5gsum1PfS_i,@function
_Z5gsum1PfS_i:                          ; @_Z5gsum1PfS_i
; %bb.0:
	s_clause 0x2
	s_load_b32 s5, s[0:1], 0x24
	s_load_b32 s4, s[0:1], 0x10
	s_load_b128 s[0:3], s[0:1], 0x0
	s_mov_b32 s6, exec_lo
	s_waitcnt lgkmcnt(0)
	s_and_b32 s5, s5, 0xffff
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_mul_i32 s15, s15, s5
	v_add_nc_u32_e32 v1, s15, v0
	s_delay_alu instid0(VALU_DEP_1)
	v_cmpx_gt_i32_e64 s4, v1
	s_cbranch_execz .LBB7_2
; %bb.1:
	v_ashrrev_i32_e32 v2, 31, v1
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b64 v[1:2], 2, v[1:2]
	v_add_co_u32 v1, vcc_lo, s0, v1
	s_delay_alu instid0(VALU_DEP_2)
	v_add_co_ci_u32_e32 v2, vcc_lo, s1, v2, vcc_lo
	global_load_b32 v1, v[1:2], off
	v_lshl_add_u32 v2, v0, 2, 0
	s_waitcnt vmcnt(0)
	ds_store_b32 v2, v1
.LBB7_2:
	s_or_b32 exec_lo, exec_lo, s6
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_mov_b32 s0, exec_lo
	v_cmpx_eq_u32_e32 0, v0
	s_cbranch_execz .LBB7_9
; %bb.3:
	s_sub_i32 s0, s4, s15
	v_mov_b32_e32 v0, 0
	s_min_i32 s0, s0, s5
	s_delay_alu instid0(SALU_CYCLE_1)
	s_cmp_lt_i32 s0, 1
	s_cbranch_scc1 .LBB7_6
; %bb.4:                                ; %.lr.ph.preheader
	s_mov_b32 s1, 0
.LBB7_5:                                ; %.lr.ph
                                        ; =>This Inner Loop Header: Depth=1
	s_delay_alu instid0(SALU_CYCLE_1)
	v_mov_b32_e32 v1, s1
	s_add_i32 s0, s0, -1
	s_add_i32 s1, s1, 4
	s_cmp_lg_u32 s0, 0
	ds_load_b32 v1, v1
	s_waitcnt lgkmcnt(0)
	v_add_f32_e32 v0, v0, v1
	s_cbranch_scc1 .LBB7_5
.LBB7_6:                                ; %._crit_edge
	s_mov_b32 s1, exec_lo
	s_mov_b32 s0, 0
	v_mbcnt_lo_u32_b32 v1, s1, 0
	s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
	v_cmp_eq_u32_e32 vcc_lo, 0, v1
	s_and_b32 s4, exec_lo, vcc_lo
	s_mov_b32 exec_lo, s4
	s_cbranch_execz .LBB7_9
; %bb.7:
	s_load_b32 s4, s[2:3], 0x0
	s_bcnt1_i32_b32 s1, s1
	v_mov_b32_e32 v3, 0
	v_cvt_f32_ubyte0_e32 v1, s1
	s_waitcnt lgkmcnt(0)
	s_delay_alu instid0(VALU_DEP_1)
	v_dual_mul_f32 v2, v0, v1 :: v_dual_mov_b32 v1, s4
.LBB7_8:                                ; %atomicrmw.start
                                        ; =>This Inner Loop Header: Depth=1
	s_delay_alu instid0(VALU_DEP_1)
	v_add_f32_e32 v0, v1, v2
	global_atomic_cmpswap_b32 v0, v3, v[0:1], s[2:3] glc
	s_waitcnt vmcnt(0)
	v_cmp_eq_u32_e32 vcc_lo, v0, v1
	v_mov_b32_e32 v1, v0
	s_or_b32 s0, vcc_lo, s0
	s_delay_alu instid0(SALU_CYCLE_1)
	s_and_not1_b32 exec_lo, exec_lo, s0
	s_cbranch_execnz .LBB7_8
.LBB7_9:
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z5gsum1PfS_i
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 4
		.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_end7:
	.size	_Z5gsum1PfS_i, .Lfunc_end7-_Z5gsum1PfS_i
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 352
; NumSgprs: 18
; NumVgprs: 4
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 4
; 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	_Z5gsum2PfS_i           ; -- Begin function _Z5gsum2PfS_i
	.globl	_Z5gsum2PfS_i
	.p2align	8
	.type	_Z5gsum2PfS_i,@function
_Z5gsum2PfS_i:                          ; @_Z5gsum2PfS_i
; %bb.0:
	s_clause 0x2
	s_load_b32 s5, s[0:1], 0x24
	s_load_b32 s6, s[0:1], 0x10
	s_load_b128 s[0:3], s[0:1], 0x0
	v_lshl_add_u32 v3, v0, 2, 0
	s_mov_b32 s4, s15
	s_mov_b32 s8, exec_lo
	s_waitcnt lgkmcnt(0)
	s_and_b32 s5, s5, 0xffff
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_mul_i32 s7, s15, s5
	v_add_nc_u32_e32 v1, s7, v0
	s_delay_alu instid0(VALU_DEP_1)
	v_cmpx_gt_i32_e64 s6, v1
	s_cbranch_execz .LBB8_2
; %bb.1:
	v_ashrrev_i32_e32 v2, 31, v1
	s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
	v_lshlrev_b64 v[1:2], 2, v[1:2]
	v_add_co_u32 v1, vcc_lo, s0, v1
	s_delay_alu instid0(VALU_DEP_2)
	v_add_co_ci_u32_e32 v2, vcc_lo, s1, v2, vcc_lo
	global_load_b32 v1, v[1:2], off
	s_waitcnt vmcnt(0)
	ds_store_b32 v3, v1
.LBB8_2:
	s_or_b32 exec_lo, exec_lo, s8
	v_mov_b32_e32 v1, 0
	s_sub_i32 s0, s6, s7
	s_mov_b32 s1, exec_lo
	s_min_i32 s0, s0, s5
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	v_cmpx_gt_i32_e64 s0, v0
	s_cbranch_execz .LBB8_4
; %bb.3:
	ds_load_b32 v1, v3
.LBB8_4:
	s_or_b32 exec_lo, exec_lo, s1
	s_cmp_lt_u32 s5, 2
	s_cbranch_scc1 .LBB8_11
; %bb.5:                                ; %.lr.ph.i
	s_lshr_b32 s1, s5, 1
.LBB8_6:                                ; =>This Inner Loop Header: Depth=1
	s_mov_b32 s5, exec_lo
	v_cmpx_gt_u32_e64 s1, v0
	s_cbranch_execz .LBB8_10
; %bb.7:                                ;   in Loop: Header=BB8_6 Depth=1
	v_add_nc_u32_e32 v2, s1, v0
	s_mov_b32 s6, exec_lo
	s_delay_alu instid0(VALU_DEP_1)
	v_cmpx_gt_i32_e64 s0, v2
	s_cbranch_execz .LBB8_9
; %bb.8:                                ;   in Loop: Header=BB8_6 Depth=1
	v_lshl_add_u32 v2, s1, 2, v3
	ds_load_b32 v2, v2
	s_waitcnt lgkmcnt(0)
	v_add_f32_e32 v1, v1, v2
	ds_store_b32 v3, v1
.LBB8_9:                                ; %Flow
                                        ;   in Loop: Header=BB8_6 Depth=1
	s_or_b32 exec_lo, exec_lo, s6
.LBB8_10:                               ;   in Loop: Header=BB8_6 Depth=1
	s_delay_alu instid0(SALU_CYCLE_1)
	s_or_b32 exec_lo, exec_lo, s5
	s_lshr_b32 s5, s1, 1
	s_cmp_gt_u32 s1, 1
	s_mov_b32 s1, s5
	s_waitcnt lgkmcnt(0)
	s_barrier
	buffer_gl0_inv
	s_cbranch_scc1 .LBB8_6
.LBB8_11:                               ; %_Z5lsum2Pfi.exit
	s_mov_b32 s0, exec_lo
	v_cmpx_eq_u32_e32 0, v0
	s_cbranch_execz .LBB8_13
; %bb.12:
	v_mov_b32_e32 v0, 0
	s_ashr_i32 s5, s4, 31
	s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
	s_lshl_b64 s[0:1], s[4:5], 2
	s_add_u32 s0, s2, s0
	s_waitcnt lgkmcnt(0)
	ds_load_b32 v1, v0
	s_addc_u32 s1, s3, s1
	s_waitcnt lgkmcnt(0)
	global_store_b32 v0, v1, s[0:1]
.LBB8_13:
	s_nop 0
	s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
	s_endpgm
	.section	.rodata,"a",@progbits
	.p2align	6, 0x0
	.amdhsa_kernel _Z5gsum2PfS_i
		.amdhsa_group_segment_fixed_size 0
		.amdhsa_private_segment_fixed_size 0
		.amdhsa_kernarg_size 280
		.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 4
		.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_end8:
	.size	_Z5gsum2PfS_i, .Lfunc_end8-_Z5gsum2PfS_i
                                        ; -- End function
	.section	.AMDGPU.csdata,"",@progbits
; Kernel info:
; codeLenInByte = 396
; NumSgprs: 18
; NumVgprs: 4
; ScratchSize: 0
; MemoryBound: 0
; FloatMode: 240
; IeeeMode: 1
; LDSByteSize: 0 bytes/workgroup (compile time only)
; SGPRBlocks: 2
; VGPRBlocks: 0
; NumSGPRsForWavesPerEU: 18
; NumVGPRsForWavesPerEU: 4
; 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:           []
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 4
    .kernarg_segment_size: 0
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z11emptyKernelv
    .private_segment_fixed_size: 0
    .sgpr_count:     0
    .sgpr_spill_count: 0
    .symbol:         _Z11emptyKernelv.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     0
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z6gcopy1PfS_i
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z6gcopy1PfS_i.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     4
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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
      - .offset:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z7gcopy2aPfS_ii
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z7gcopy2aPfS_ii.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     4
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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
      - .offset:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z7gcopy2bPfS_ii
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z7gcopy2bPfS_ii.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     5
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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
      - .offset:         24
        .size:           4
        .value_kind:     by_value
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         36
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         40
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         44
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         46
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         48
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         50
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         52
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         54
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         88
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         96
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 288
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z7gsaxpy2PfS_fii
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z7gsaxpy2PfS_fii.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     5
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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
      - .offset:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z6gcopy3PfS_ii
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z6gcopy3PfS_ii.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     5
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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
      - .offset:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
      - .offset:         144
        .size:           4
        .value_kind:     hidden_dynamic_lds_size
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z11gtranspose2PfS_ii
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z11gtranspose2PfS_ii.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     6
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
      - .offset:         144
        .size:           4
        .value_kind:     hidden_dynamic_lds_size
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z5gsum1PfS_i
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z5gsum1PfS_i.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     4
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
  - .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:         24
        .size:           4
        .value_kind:     hidden_block_count_x
      - .offset:         28
        .size:           4
        .value_kind:     hidden_block_count_y
      - .offset:         32
        .size:           4
        .value_kind:     hidden_block_count_z
      - .offset:         36
        .size:           2
        .value_kind:     hidden_group_size_x
      - .offset:         38
        .size:           2
        .value_kind:     hidden_group_size_y
      - .offset:         40
        .size:           2
        .value_kind:     hidden_group_size_z
      - .offset:         42
        .size:           2
        .value_kind:     hidden_remainder_x
      - .offset:         44
        .size:           2
        .value_kind:     hidden_remainder_y
      - .offset:         46
        .size:           2
        .value_kind:     hidden_remainder_z
      - .offset:         64
        .size:           8
        .value_kind:     hidden_global_offset_x
      - .offset:         72
        .size:           8
        .value_kind:     hidden_global_offset_y
      - .offset:         80
        .size:           8
        .value_kind:     hidden_global_offset_z
      - .offset:         88
        .size:           2
        .value_kind:     hidden_grid_dims
      - .offset:         144
        .size:           4
        .value_kind:     hidden_dynamic_lds_size
    .group_segment_fixed_size: 0
    .kernarg_segment_align: 8
    .kernarg_segment_size: 280
    .language:       OpenCL C
    .language_version:
      - 2
      - 0
    .max_flat_workgroup_size: 1024
    .name:           _Z5gsum2PfS_i
    .private_segment_fixed_size: 0
    .sgpr_count:     18
    .sgpr_spill_count: 0
    .symbol:         _Z5gsum2PfS_i.kd
    .uniform_work_group_size: 1
    .uses_dynamic_stack: false
    .vgpr_count:     4
    .vgpr_spill_count: 0
    .wavefront_size: 32
    .workgroup_processor_mode: 1
amdhsa.target:   amdgcn-amd-amdhsa--gfx1100
amdhsa.version:
  - 1
  - 2
...

	.end_amdgpu_metadata
