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 + -
显示快捷键?