nb_kernel112_ppc_altivec.c

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

C
1,557
字号
				 */				v28             = vec_ld(256, (float *) stackdata);				v29             = vec_ld(272, (float *) stackdata);				v30             = vec_ld(288, (float *) stackdata);				v1              = vec_ld(400, (float *) stackdata);				v2              = vec_ld(416, (float *) stackdata);				v23             = vec_add(v23,v9); /* incr. vctot */				v3              = vec_ld(432, (float *) stackdata);				v4              = vec_ld(448, (float *) stackdata);				v5              = vec_ld(464, (float *) stackdata);				v6              = vec_ld(480, (float *) stackdata);				vec_st(v23,224,(float *)stackdata); /* store vctot to stack */				v7              = vec_ld(496, (float *) stackdata);				v8              = vec_ld(512, (float *) stackdata);				v9              = vec_ld(528, (float *) stackdata);				v28             = vec_madd(v10,v1,v28);				v19             = vec_nmsub(v10,v1,v0);				v29             = vec_madd(v10,v2,v29);				v20             = vec_nmsub(v10,v2,v0);				v30             = vec_madd(v10,v3,v30);				v21             = vec_nmsub(v10,v3,v0);				v28             = vec_madd(v11,v4,v28);				v22             = vec_nmsub(v11,v4,v0);				v29             = vec_madd(v11,v5,v29);				v23             = vec_nmsub(v11,v5,v0);				v30             = vec_madd(v11,v6,v30);				v24             = vec_nmsub(v11,v6,v0);				v28             = vec_madd(v12,v7,v28);				v25             = vec_nmsub(v12,v7,v0);				v29             = vec_madd(v12,v8,v29);				v26             = vec_nmsub(v12,v8,v0);				v30             = vec_madd(v12,v9,v30);				v27             = vec_nmsub(v12,v9,v0);				/* store these i forces, and repeat for the iH1-* force */				vec_st(v28,256,(float *)stackdata);				vec_st(v29,272,(float *)stackdata);				vec_st(v30,288,(float *)stackdata);				v28             = vec_ld(304,(float *) stackdata);				v29             = vec_ld(320,(float *) stackdata);				v30             = vec_ld(336,(float *) stackdata);				/* load new vectorial distances */				v1              = vec_ld(544, (float *) stackdata);				v2              = vec_ld(560, (float *) stackdata);				v3              = vec_ld(576, (float *) stackdata);				v4              = vec_ld(592, (float *) stackdata);				v5              = vec_ld(608, (float *) stackdata);				v6              = vec_ld(624, (float *) stackdata);				v7              = vec_ld(640, (float *) stackdata);				v8              = vec_ld(656, (float *) stackdata);				v9              = vec_ld(672, (float *) stackdata);      				v28             = vec_madd(v13,v1,v28);				v19             = vec_nmsub(v13,v1,v19);				v29             = vec_madd(v13,v2,v29);				v20             = vec_nmsub(v13,v2,v20);				v30             = vec_madd(v13,v3,v30);				v21             = vec_nmsub(v13,v3,v21);				v28             = vec_madd(v14,v4,v28);				v22             = vec_nmsub(v14,v4,v22);				v29             = vec_madd(v14,v5,v29);				v23             = vec_nmsub(v14,v5,v23);				v30             = vec_madd(v14,v6,v30);				v24             = vec_nmsub(v14,v6,v24);				v28             = vec_madd(v15,v7,v28);				v25             = vec_nmsub(v15,v7,v25);				v29             = vec_madd(v15,v8,v29);				v26             = vec_nmsub(v15,v8,v26);				v30             = vec_madd(v15,v9,v30);				v27             = vec_nmsub(v15,v9,v27);				/* store these i forces, and repeat for the iH2-* force */				vec_st(v28,304,(float *)stackdata);				vec_st(v29,320,(float *)stackdata);				vec_st(v30,336,(float *)stackdata);				v28             = vec_ld(352,(float *) stackdata);				v29             = vec_ld(368,(float *) stackdata);				v30             = vec_ld(384,(float *) stackdata);				/* load new vectorial distances */				v1              = vec_ld(688, (float *) stackdata);				v2              = vec_ld(704, (float *) stackdata);				v3              = vec_ld(720, (float *) stackdata);				v4              = vec_ld(736, (float *) stackdata);				v5              = vec_ld(752, (float *) stackdata);				v6              = vec_ld(768, (float *) stackdata);				v7              = vec_ld(784, (float *) stackdata);				v8              = vec_ld(800, (float *) stackdata);				v9              = vec_ld(816, (float *) stackdata);      				v28             = vec_madd(v16,v1,v28);				v19             = vec_nmsub(v16,v1,v19);				v29             = vec_madd(v16,v2,v29);				v20             = vec_nmsub(v16,v2,v20);				v30             = vec_madd(v16,v3,v30);				v21             = vec_nmsub(v16,v3,v21);				v28             = vec_madd(v17,v4,v28);				v22             = vec_nmsub(v17,v4,v22);				v29             = vec_madd(v17,v5,v29);				v23             = vec_nmsub(v17,v5,v23);				v30             = vec_madd(v17,v6,v30);				v24             = vec_nmsub(v17,v6,v24);				v28             = vec_madd(v18,v7,v28);				v25             = vec_nmsub(v18,v7,v25);				v29             = vec_madd(v18,v8,v29);				v26             = vec_nmsub(v18,v8,v26);				v30             = vec_madd(v18,v9,v30);				v27             = vec_nmsub(v18,v9,v27);				/* store these i forces */				vec_st(v28,352,(float *)stackdata);				vec_st(v29,368,(float *)stackdata);				vec_st(v30,384,(float *)stackdata);				/* j forces present in v19-v27 */      				v1              = vec_mergeh(v19,v21);/*  Oxa  Oza  Oxb  Ozb */				v19             = vec_mergel(v19,v21);/*  Oxc  Ozc   -    -  */				v21             = vec_mergeh(v20,v22);/*  Oya H1xa  Oyb H1xb */				v20             = vec_mergel(v20,v22);/*  Oyc H1xc   -    -  */				v22             = vec_mergeh(v23,v25);/* H1ya H2xa H1yb H2xb */				v23             = vec_mergel(v23,v25);/* H1yc H2xc   -    -  */				v25             = vec_mergeh(v24,v26);/* H1za H2ya H1zb H2yb */				v24             = vec_mergel(v24,v26);/* H1zc H2yc   -    -  */				v26             = vec_mergeh(v27,v0); /* H2za   0  H2zb   0  */				v27             = vec_mergel(v27,v0); /* H2zc   0   -     0  */      				v2              = vec_mergeh(v1,v21); /*  Oxa  Oya  Oza H1xa */				v21             = vec_mergel(v1,v21); /*  Oxb  Oyb  Ozb H1xb */				v1              = vec_mergeh(v19,v20);/*  Oxc  Oyc  Ozc H1xc */				v20             = vec_mergeh(v22,v25);/* H1ya H1za H2xa H2ya */				v22             = vec_mergel(v22,v25);/* H1yb H1zb H2xb H2yb */				v25             = vec_mergeh(v23,v24);/* H1yc H1zc H2xc H2yc */				v24             = vec_mergeh(v26,v0); /* H2za   0    0    0  */				v26             = vec_mergel(v26,v0); /* H2zb   0    0    0  */				v3              = vec_mergeh(v27,v0); /* H2zc   0    0    0  */				v29             = (vector float)vec_splat_s32(-1);				/* move into position, load and add */  				v30            = (vector float)vec_lvsr(0,(int *)faction+j3a); 				v4              = vec_ld(  0, faction+j3a);				v6              = vec_ld( 16, faction+j3a);				v8              = vec_ld( 32, faction+j3a);				v10             = vec_perm(v0,v29,(vector unsigned char)v30);				v12             = vec_perm(v0,v2,(vector unsigned char)v30);				v12             = vec_add(v12,v4);				v14             = vec_perm(v2,v20,(vector unsigned char)v30);				v2              = vec_add(v14,v6);				v16             = vec_perm(v20,v24,(vector unsigned char)v30);				v20             = vec_add(v16,v8);				v12             = vec_sel(v4,v12,(vector unsigned int)v10);				vec_st(v12,  0, faction+j3a);				v10             = vec_sld(v0,v10,12);				vec_st(v2, 16, faction+j3a);				v12             = vec_sel(v20,v8,(vector unsigned int)v10);				vec_st(v12, 32, faction+j3a);				/* Finished 1, now do 2  */				v30            = (vector float)vec_lvsr(0,(int *)faction+j3b); 				v4              = vec_ld(  0, faction+j3b);				v6              = vec_ld( 16, faction+j3b);				v8              = vec_ld( 32, faction+j3b);				v10             = vec_perm(v0,v29,(vector unsigned char)v30);				v12             = vec_perm(v0,v21,(vector unsigned char)v30);				v24             = vec_add(v12,v4);				v12             = vec_perm(v21,v22,(vector unsigned char)v30);				v21             = vec_add(v12,v6);				v12             = vec_perm(v22,v26,(vector unsigned char)v30);				v22             = vec_add(v12,v8);				v12             = vec_sel(v4,v24,(vector unsigned int)v10);				vec_st(v12,  0, faction+j3b);				v10             = vec_sld(v0,v10,12);				vec_st(v21, 16, faction+j3b);				v12             = vec_sel(v22,v8,(vector unsigned int)v10);				vec_st(v12, 32, faction+j3b);				/* water 3 */				v31            = (vector float)vec_lvsr(0,(int *)faction+j3c);				v5              = vec_ld(  0, faction+j3c);				v7              = vec_ld( 16, faction+j3c);				v9              = vec_ld( 32, faction+j3c);				v11             = vec_perm(v0,v29,(vector unsigned char)v31);				v13             = vec_perm(v0,v1,(vector unsigned char)v31);				v13             = vec_add(v13,v5);				v15             = vec_perm(v1,v25,(vector unsigned char)v31);				v1              = vec_add(v15,v7);      				v17             = vec_perm(v25,v3,(vector unsigned char)v31);				v25             = vec_add(v17,v9);				v13             = vec_sel(v5,v13,(vector unsigned int)v11);				vec_st(v13,  0, faction+j3c);				v11             = vec_sld(v0,v11,12);				vec_st(v1, 16, faction+j3c);				v13             = vec_sel(v25,v9,(vector unsigned int)v11);				vec_st(v13, 32, faction+j3c);			} else if(k<(nj1-1)) {				jnra            = jjnr[k];				jnrb            = jjnr[k+1];				j3a             = 3*jnra;				j3b             = 3*jnrb;				v1              = (vector float)vec_lvsl(0, pos+j3a);				v8              = (vector float)vec_lvsl(0, pos+j3b);				v2              = vec_ld(0, pos+j3a);				v9              = vec_ld(0, pos+j3b);				v3              = vec_ld(16, pos+j3a);				v10             = vec_ld(16, pos+j3b);				v4              = vec_ld(32, pos+j3a);				v11             = vec_ld(32, pos+j3b);				/*  Oxa  Oya  Oza H1xa */				v5              = vec_perm(v2,v3,(vector unsigned char)v1); 				/*  Oxb  Oyb  Ozb H1xb */				v12             = vec_perm(v9,v10,(vector unsigned char)v8);  				/* 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); 				/* H2za   -   -   - */    				v7              = vec_perm(v4,v4,(vector unsigned char)v1); 				/* H2zb   -   -   - */				v14             = vec_perm(v11,v11,(vector unsigned char)v8);       				/* permute 3atoms coordinates */				v1              = vec_mergeh(v5,v12);/*  Oxa  Oxb  Oya  Oyb */				v3              = vec_mergel(v5,v12);/*  Oza  Ozb H1xa H1xb */				v5              = vec_mergeh(v6,v13);/* H1ya H1yb H1za H1zb */				v9              = vec_mergeh(v7,v14);/* H2za H2zb   -    -  */				v7              = vec_mergel(v6,v13);/* H2xa H2xb H2ya H2yb */				/* load i H1x */				v29             = vec_ld(128, (float *) stackdata); 				v2              = vec_sld(v1,v1,8);  /*  Oya  Oyb   -   -  */				/* load i H1y */				v30             = vec_ld(144, (float *) stackdata); 				v4              = vec_sld(v3,v3,8);  /* H1xa H1xb   -   -  */				/* load i H1z */				v31             = vec_ld(160, (float *) stackdata); 				v6              = vec_sld(v5,v5,8);  /* H1za H1zb   -   -  */				v8              = vec_sld(v7,v7,8);  /* H2ya H2yb   -   -  */				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 & iJ1-jH2 distances */				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 - j

⌨️ 快捷键说明

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