nb_kernel112_ppc_altivec.c

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

C
1,557
字号
				v10             = vec_madd(v10,v1,v0);				vec_st(v24,240,(float *)stackdata); /* store Vvdwtot */				/* calculate vectorial forces and accumulate fj. 				 * v10-v18 has fs11-fs33 now. 				 * First load iO-* dx,dy,dz vectors to v1-v9 				 * and load iO forces to v28,v29,v30 				 * use v19-v27 to accumulate j 3atoms forces 				 */				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 the 				 * procedure 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 the				 * procedure 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 */    								/*  Oxa  Oza  Oxb  Ozb */				v1              = vec_mergeh(v19,v21); 				/*  Oxc  Ozc  Oxd  Ozd */				v19             = vec_mergel(v19,v21); 				/*  Oya H1xa  Oyb H1xb */				v21             = vec_mergeh(v20,v22); 				/*  Oyc H1xc  Oyd H1xd */				v20             = vec_mergel(v20,v22); 				/* H1ya H2xa H1yb H2xb */				v22             = vec_mergeh(v23,v25); 				/* H1yc H2xc H1yd H2xd */				v23             = vec_mergel(v23,v25); 				/* H1za H2ya H1zb H2yb */				v25             = vec_mergeh(v24,v26); 				/* H1zc H2yc H1zd H2yd */				v24             = vec_mergel(v24,v26); 				/* H2za   0  H2zb   0  */				v26             = vec_mergeh(v27,v0);   				/* H2zc   0  H2zd   0  */				v27             = vec_mergel(v27,v0);         				/*  Oxa  Oya  Oza H1xa */				v2              = vec_mergeh(v1,v21);   				/*  Oxb  Oyb  Ozb H1xb */				v21             = vec_mergel(v1,v21);   				/*  Oxc  Oyc  Ozc H1xc */				v1              = vec_mergeh(v19,v20);    				/*  Oxd  Oyd  Ozd H1xd */				v19             = vec_mergel(v19,v20);    				/* H1ya H1za H2xa H2ya */				v20             = vec_mergeh(v22,v25);  				/* H1yb H1zb H2xb H2yb */				v22             = vec_mergel(v22,v25);  				/* H1yc H1zc H2xc H2yc */				v25             = vec_mergeh(v23,v24);  				/* H1yd H1zd H2xd H2yd */				v23             = vec_mergel(v23,v24);  				/* H2za   0    0    0  */				v24             = vec_mergeh(v26,v0);   				/* H2zb   0    0    0  */				v26             = vec_mergel(v26,v0);   				/* H2zc   0    0    0  */				v3              = vec_mergeh(v27,v0);   				/* H2zd   0    0    0  */				v27             = vec_mergel(v27,v0);    				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);				/* water 4 */				v31            = (vector float)vec_lvsr(0,(int *)faction+j3d);    				v5              = vec_ld(  0, faction+j3d);				v7              = vec_ld( 16, faction+j3d);				v9              = vec_ld( 32, faction+j3d);				v11             = vec_perm(v0,v29,(vector unsigned char)v31);      				v13             = vec_perm(v0,v19,(vector unsigned char)v31);				v25             = vec_add(v13,v5);				v13             = vec_perm(v19,v23,(vector unsigned char)v31);				v19             = vec_add(v13,v7);				v13             = vec_perm(v23,v27,(vector unsigned char)v31);				v23             = vec_add(v13,v9);				v13             = vec_sel(v5,v25,(vector unsigned int)v11);				vec_st(v13,  0, faction+j3d);				v11             = vec_sld(v0,v11,12);				vec_st(v19, 16, faction+j3d);				v13             = vec_sel(v23,v9,(vector unsigned int)v11);				vec_st(v13, 32, faction+j3d);			} 			if(k<(nj1-2)) {				jnra            = jjnr[k];				jnrb            = jjnr[k+1];				jnrc            = jjnr[k+2];				j3a             = 3*jnra;				j3b             = 3*jnrb;				j3c             = 3*jnrc;				v1              = (vector float)vec_lvsl(0, pos+j3a);				v8              = (vector float)vec_lvsl(0, pos+j3b);				v15             = (vector float)vec_lvsl(0, pos+j3c);				v2              = vec_ld(0, pos+j3a);				v9              = vec_ld(0, pos+j3b);				v16             = vec_ld(0, pos+j3c);				v3              = vec_ld(16, pos+j3a);				v10             = vec_ld(16, pos+j3b);				v17             = vec_ld(16, pos+j3c);				v4              = vec_ld(32, pos+j3a);				v11             = vec_ld(32, pos+j3b);				v18             = vec_ld(32, pos+j3c);				/*  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); 				 /*  Oxc  Oyc  Ozc H1xc */				v19             = vec_perm(v16,v17,(vector unsigned char)v15);				 /* 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);				/* 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);       				/* permute 3atoms coordinates */				/*  Oxa  Oxc  Oya  Oyc */				v3              = vec_mergeh(v5,v19);  				v5              = vec_mergel(v5,v19); /*  Oza  Ozc H1xa H1xc */				v19             = vec_mergeh(v12,v0); /*  Oxb   -   Oyb   -  */				v12             = vec_mergel(v12,v0); /*  Ozb   -  H1xb   -  */      				v26             = vec_mergeh(v6,v20); /* H1ya H1yc H1za H1zc */				v16              = vec_mergel(v6,v20);/* H2xa H2xc H2ya H2yc */

⌨️ 快捷键说明

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