nb_kernel112_ppc_altivec.c

来自「最著名最快的分子模拟软件」· C语言 代码 · 共 1,557 行 · 第 1/5 页

C
1,557
字号
				v25             = vec_ld(32, pos+j3d);				/* v5  =  Oxa  Oya  Oza H1xa */				v5              = vec_perm(v2,v3,(vector unsigned char)v1); 				/* v12 = Oxb  Oyb  Ozb H1xb */				v12             = vec_perm(v9,v10,(vector unsigned char)v8);  				/* v19 = Oxc  Oyc  Ozc H1xc */				v19             = vec_perm(v16,v17,(vector unsigned char)v15);				/* v26 =  Oxd  Oyd  Ozd H1xd */				v26             = vec_perm(v23,v24,(vector unsigned char)v22);				/* H1ya H1za H2xa H2ya */				v6              = vec_perm(v3,v4,(vector unsigned char)v1); 				 /* H1yb H1zb H2xb H2yb */				v13             = vec_perm(v10,v11,(vector unsigned char)v8);				 /* H1yc H1zc H2xc H2yc */				v20             = vec_perm(v17,v18,(vector unsigned char)v15);				 /* H1yd H1zd H2xd H2yd */				v27             = vec_perm(v24,v25,(vector unsigned char)v22);				/* H2za   -   -   - */ 				v7              = vec_perm(v4,v4,(vector unsigned char)v1);    				 /* H2zb   -   -   - */				v14             = vec_perm(v11,v11,(vector unsigned char)v8);				 /* H2zc   -   -   - */				v21             = vec_perm(v18,v18,(vector unsigned char)v15);				 /* H2zd   -   -   - */				v28             = vec_perm(v25,v25,(vector unsigned char)v22);      				/* permute 3atoms coordinates */				/*  Oxa  Oxc  Oya  Oyc */				v3              = vec_mergeh(v5,v19);  				/*  Oza  Ozc H1xa H1xc */				v5              = vec_mergel(v5,v19);  				/*  Oxb  Oxd  Oyb  Oyd */				v19             = vec_mergeh(v12,v26); 				/*  Ozb  Ozd H1xb H1xd */				v12             = vec_mergel(v12,v26); 				/* H1ya H1yc H1za H1zc */				v26             = vec_mergeh(v6,v20);  				/* H2xa H2xc H2ya H2yc */				v16              = vec_mergel(v6,v20);  				/* H1yb H1yd H1zb H1zd */				v20             = vec_mergeh(v13,v27); 				/* H2xb H2xd H2yb H2yd */				v13             = vec_mergel(v13,v27); 				/* H2za H2zc   -    -  */				v15             = vec_mergeh(v7,v21);  				/* H2zb H2zd   -    -  */				v14             = vec_mergeh(v14,v28); 				/*  Oxa  Oxb  Oxc  Oxd */				v1              = vec_mergeh(v3,v19);  				/* load i H1x */				v29             = vec_ld(128, (float *) stackdata); 				/*  Oya  Oyb  Oyc  Oyd */				v2              = vec_mergel(v3,v19);  				/* load i H1y */				v30             = vec_ld(144, (float *) stackdata); 				/*  Oza  Ozb  Ozc  Ozd */				v3              = vec_mergeh(v5,v12);  				/* load i H1z */				v31             = vec_ld(160, (float *) stackdata); 				/* H1xa H1xb H1xc H1xd */				v4              = vec_mergel(v5,v12);  				/* H1ya H1yb H1yc H1yd */				v5              = vec_mergeh(v26,v20); 				/* H1za H1zb H1zc H1zd */				v6              = vec_mergel(v26,v20); 				/* H2xa H2xb H2xc H2xd */				v7              = vec_mergeh(v16,v13); 				/* H2ya H2yb H2yc H2yd */				v8              = vec_mergel(v16,v13); 				/* H2za H2zb H2zc H2zd */				v9              = vec_mergeh(v15,v14); 				v10             = vec_sub(v29,v1); /* iH1x - jOx */				v13             = vec_sub(v29,v4); /* iH1x - jH1x */				v16             = vec_sub(v29,v7); /* iH1x - jH2x */				/* load i H2x */     				v29             = vec_ld(176, (float *) stackdata); 				v11             = vec_sub(v30,v2); /* iH1y - jOy */				v14             = vec_sub(v30,v5); /* iH1y - jH1y */				v17             = vec_sub(v30,v8); /* iH1y - jH2y */				/* load i H2y */     				v30             = vec_ld(192, (float *) stackdata); 				vec_st(v10, 544, (float *)stackdata); /* dx21 */				vec_st(v13, 592, (float *)stackdata); /* dx22 */				vec_st(v16, 640, (float *)stackdata); /* dx23 */				v12             = vec_sub(v31,v3); /* iH1z - jOz */				v15             = vec_sub(v31,v6); /* iH1z - jH1z */				v18             = vec_sub(v31,v9); /* iH1z - jH2z */				/* load i H2z */         				v31             = vec_ld(208, (float *) stackdata); 				/* v10-v18 now contains iH1-jO, iH1-jH1 and iJ1-jH2 dist. */				vec_st(v11, 560, (float *)stackdata); /* dy21 */				vec_st(v14, 608, (float *)stackdata); /* dy22 */				vec_st(v17, 656, (float *)stackdata); /* dy23 */				v19             = vec_sub(v29,v1); /* iH2x - jOx */				v22             = vec_sub(v29,v4); /* iH2x - jH1x */				v25             = vec_sub(v29,v7); /* iH2x - jH2x */				vec_st(v12, 576, (float *)stackdata); /* dz21 */				vec_st(v15, 624, (float *)stackdata); /* dz22 */				vec_st(v18, 672, (float *)stackdata); /* dz23 */				/* load i Ox */     				v29             = vec_ld(80, (float *) stackdata); 				v20             = vec_sub(v30,v2); /* iH2y - jOy */				v23             = vec_sub(v30,v5); /* iH2y - jH1y */				v26             = vec_sub(v30,v8); /* iH2y - jH2y */				vec_st(v19, 688, (float *)stackdata); /* dx31 */				vec_st(v22, 736, (float *)stackdata); /* dx32 */				vec_st(v25, 784, (float *)stackdata); /* dx33 */				/* load i Oy */     				v30             = vec_ld(96, (float *) stackdata); 				v21             = vec_sub(v31,v3); /* iH2z - jOz */				v24             = vec_sub(v31,v6); /* iH2z - jH1z */				v27             = vec_sub(v31,v9); /* iH2z - jH2z */				/* load i Oz */     				v31             = vec_ld(112, (float *) stackdata); 				vec_st(v20, 704, (float *)stackdata); /* dy31 */				vec_st(v23, 752, (float *)stackdata); /* dy32 */				vec_st(v26, 800, (float *)stackdata); /* dy33 */				v1              = vec_sub(v29,v1); /* iOx - jOx */				v4              = vec_sub(v29,v4); /* iOx - jH1x */				v7              = vec_sub(v29,v7); /* iOx - jH2x */				vec_st(v21, 720, (float *)stackdata); /* dz31 */				vec_st(v24, 768, (float *)stackdata); /* dz32 */				vec_st(v27, 816, (float *)stackdata); /* dz33 */				v2              = vec_sub(v30,v2); /* iOy - jOy */				v5              = vec_sub(v30,v5); /* iOy - jH1y */				v8              = vec_sub(v30,v8); /* iOy - jH2y */				vec_st(v1, 400, (float *)stackdata); /* dx11 */				vec_st(v4, 448, (float *)stackdata); /* dx12 */				vec_st(v7, 496, (float *)stackdata); /* dx13 */				v3              = vec_sub(v31,v3); /* iOz - jOz */				v6              = vec_sub(v31,v6); /* iOz - jH1z */				v9              = vec_sub(v31,v9); /* iOz - jH2z */				vec_st(v2, 416, (float *)stackdata); /* dy11 */				vec_st(v5, 464, (float *)stackdata); /* dy12 */				vec_st(v8, 512, (float *)stackdata); /* dy13 */				v1              = vec_madd(v1,v1,v0);				v4              = vec_madd(v4,v4,v0);				v7              = vec_madd(v7,v7,v0);				vec_st(v3, 432, (float *)stackdata); /* dz11 */				vec_st(v6, 480, (float *)stackdata); /* dz12 */				vec_st(v9, 528, (float *)stackdata); /* dz13 */				v10             = vec_madd(v10,v10,v0);				v13             = vec_madd(v13,v13,v0);				v16             = vec_madd(v16,v16,v0);				v19             = vec_madd(v19,v19,v0);				v22             = vec_madd(v22,v22,v0);				v25             = vec_madd(v25,v25,v0);				v1              = vec_madd(v2,v2,v1);				v4              = vec_madd(v5,v5,v4);				v7              = vec_madd(v8,v8,v7);				v10             = vec_madd(v11,v11,v10);				v13             = vec_madd(v14,v14,v13);				v16             = vec_madd(v17,v17,v16);				v19             = vec_madd(v20,v20,v19);				v22             = vec_madd(v23,v23,v22);				v25             = vec_madd(v26,v26,v25);				v1              = vec_madd(v3,v3,v1);				v2              = vec_madd(v6,v6,v4);				v3              = vec_madd(v9,v9,v7);				v4              = vec_madd(v12,v12,v10);				v5              = vec_madd(v15,v15,v13);				v6              = vec_madd(v18,v18,v16);				v7              = vec_madd(v21,v21,v19);				v8              = vec_madd(v24,v24,v22);				v9              = vec_madd(v27,v27,v25);				/* 				 * v1  = rsq  iO-jO				 * v2  = rsq  iO-jH1				 * v3  = rsq  iO-jH2				 * v4  = rsq  iH1-jO				 * v5  = rsq  iH1-jH1				 * v6  = rsq  iH1-jH2				 * v7  = rsq  iH2-jO				 * v8  = rsq  iH2-jH1				 * v9 = rsq  iH2-jH2				 */				v10             = vec_rsqrte(v1);				v11             = vec_rsqrte(v2);				v12             = vec_rsqrte(v3);				v13             = vec_rsqrte(v4);				v14             = vec_rsqrte(v5);				v15             = vec_rsqrte(v6);				v16             = vec_rsqrte(v7);				v17             = vec_rsqrte(v8);				v18             = vec_rsqrte(v9);				/* create constant 0.5 */				v30             = (vector float) vec_splat_u32(1);				/* 0.5 */				v31             = vec_ctf((vector unsigned int)v30,1); 				/* 1.0 */				v30             = vec_ctf((vector unsigned int)v30,0); 				v19             = vec_madd(v10,v10,v0); /* lu*lu */				v20             = vec_madd(v11,v11,v0);				v21             = vec_madd(v12,v12,v0);				v22             = vec_madd(v13,v13,v0);				v23             = vec_madd(v14,v14,v0);				v24             = vec_madd(v15,v15,v0);				v25             = vec_madd(v16,v16,v0);				v26             = vec_madd(v17,v17,v0);				v27             = vec_madd(v18,v18,v0);				v19             = vec_nmsub(v1,v19,v30); /* 1.0 - rsq*lu*lu */				v20             = vec_nmsub(v2,v20,v30);				v21             = vec_nmsub(v3,v21,v30);				v22             = vec_nmsub(v4,v22,v30);				v23             = vec_nmsub(v5,v23,v30);				v24             = vec_nmsub(v6,v24,v30);				v25             = vec_nmsub(v7,v25,v30);				v26             = vec_nmsub(v8,v26,v30);				v27             = vec_nmsub(v9,v27,v30);				v1              = vec_madd(v10,v31,v0);/* lu*0.5*/				v2              = vec_madd(v11,v31,v0);				v3              = vec_madd(v12,v31,v0);				v4              = vec_madd(v13,v31,v0);				v5              = vec_madd(v14,v31,v0);				v6              = vec_madd(v15,v31,v0);				v7              = vec_madd(v16,v31,v0);				v8              = vec_madd(v17,v31,v0);				v9              = vec_madd(v18,v31,v0);				/* The rinv values */				v1              = vec_madd(v1,v19,v10);				v2              = vec_madd(v2,v20,v11);				v3              = vec_madd(v3,v21,v12);				v4              = vec_madd(v4,v22,v13);				v5              = vec_madd(v5,v23,v14);				v6              = vec_madd(v6,v24,v15);				v7              = vec_madd(v7,v25,v16);				v8              = vec_madd(v8,v26,v17);				v9              = vec_madd(v9,v27,v18);      				/* load qqOO, qqOH and qqHH  to v27,v28,v29 */				v27             = vec_ld(0, (float *) stackdata);				v28             = vec_ld(16, (float *) stackdata);				v29             = vec_ld(32, (float *) stackdata);				/*				vec_dstst( faction+j3a, 0x10010100, 2 ); */				/* put rinvsq in v10-v18, rinv6_OO in v30 & rinv12_OO in v31 */				/* load c6 to v25 and c12 to v26 */				v25             = vec_ld(48, (float *) stackdata);				v26             = vec_ld(64, (float *) stackdata);      				v10             = vec_madd(v1,v1,v0);				v1              = vec_madd(v1,v27,v0); /* rinv11*qqOO */				v11             = vec_madd(v2,v2,v0);				/* load vctot to v23 and Vvdwtot to v24 */				v23             = vec_ld(224,(float *) stackdata);				v24             = vec_ld(240,(float *) stackdata);				v2              = vec_madd(v2,v28,v0); /* rinv12*qqOH */				v12             = vec_madd(v3,v3,v0);				v30             = vec_madd(v10,v10,v0); /* rinv4 */				v3              = vec_madd(v3,v28,v0); /* rinv13*qqOH */				v13             = vec_madd(v4,v4,v0);				v4              = vec_madd(v4,v28,v0); /* rinv21*qqOH */				v14             = vec_madd(v5,v5,v0);				v23             = vec_add(v23,v1);				v30             = vec_madd(v30,v10,v0); /* rinv6 */				v5              = vec_madd(v5,v29,v0); /* rinv22*qqHH */				v15             = vec_madd(v6,v6,v0);				v6              = vec_madd(v6,v29,v0); /* rinv23*qqHH */				v23             = vec_add(v23,v2);				v16             = vec_madd(v7,v7,v0);				v31             = vec_madd(v30,v30,v0); /* rinv12 */				v25             = vec_madd(v25,v30,v0); /* c6*rinv6 */				/* load 6.0 to v30 */				v30             = (vector float)vec_splat_u32(6);				v30             = vec_ctf((vector unsigned int)v30,0);				v23             = vec_add(v23,v3);				v7              = vec_madd(v7,v28,v0); /* rinv31*qqOH */				v17             = vec_madd(v8,v8,v0);				v8              = vec_madd(v8,v29,v0); /* rinv32*qqHH */				v26             = vec_madd(v26,v31,v0); /* c12*rinv12 */				v23             = vec_add(v23,v4);				/* load 12.0 to v31 */				v31             = (vector float)vec_splat_u32(12);				v31             = vec_ctf((vector unsigned int)v31,0);				v24             = vec_sub(v24,v25);  /* add Vvdw6 to Vvdwtot */				v18             = vec_madd(v9,v9,v0);				v23             = vec_add(v23,v5);				v9              = vec_madd(v9,v29,v0); /* rinv33*qqHH */				v24             = vec_add(v24,v26);/* add Vvdw12 to Vvdwtot */    				v31             = vec_madd(v31,v26,v0);				v11             = vec_madd(v11,v2,v0); /* fs12 */				v23             = vec_add(v23,v6);				v12             = vec_madd(v12,v3,v0); /* fs13 */				v13             = vec_madd(v13,v4,v0); /* fs21 */				v31             = vec_nmsub(v30,v25,v31);				v14             = vec_madd(v14,v5,v0); /* fs22 */				v23             = vec_add(v23,v7);				v15             = vec_madd(v15,v6,v0); /* fs23 */				v16             = vec_madd(v16,v7,v0); /* fs31 */				v1              = vec_add(v31,v1);				v17             = vec_madd(v17,v8,v0); /* fs32 */				v23             = vec_add(v23,v8);				v18             = vec_madd(v18,v9,v0); /* fs33 */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?