int updateReg(unsigned int A[], unsigned int E[], unsigned int m[], int n) { // Compute the register value E[n], having already computed the others. // Pass parameters as: updateReg (a1, e1, m1, n) or updateReg(a2, e2, m2, n) E[n] = E[n-4] + S1(E[n-1]) + ch(E[n-1], E[n-2], E[n-3]) + A[n-4] + k[n] + m[n]; A[n] = -A[n-4] + S0(A[n-1]) + mj(A[n-1]), A[n-2], A[n-3]) + E[n]; }
void sg::cd_system::cd_update(int pid, int id, unsigned ft, bool lock, int index /* = 0 */) { Json::Value jCdInfo; jCdInfo["id"] = id * 10 + index; jCdInfo["ft"] = ft; jCdInfo["lc"] = lock; Json::Value respJson; respJson["msg"][0u] = jCdInfo; string respond_str = respJson.toStyledString(); //respond_str = commom_sys.tighten(respond_str); na::msg::msg_json mj(sg::protocol::g2c::cd_cdInfo_update_resp, respond_str); player_mgr.send_to_online_player(pid, mj); }
// So, first, let us write a function to update a particular bit of A and E depending on M. n - step number int updateBit (int bitPos, int step, unsigned int A[], unsigned int E[], unsigned int m[], char mChar[][32], char aChar[][32], char eChar[][32]) { // Let us build the bitPos - bit of A and E. int bitE, bitA, bitEC, bitAC; int chBit1 = extractBit(E, step - 1, bitPos); int chBit2 = extractBit(E, step - 2, bitPos); int chBit3 = extractBit(E, step - 3, bitPos); int chBit = ch(chBit1, chBit2, chBit3); int constBit = extractBit(k, step, bitPos); int wordBit = extractBit(m, step, bitPos); int EBit_4 = extractBit(E, step - 4, bitPos); int ABit_4 = extractBit(A, step - 4, bitPos); int sBit1 = extractBit(E, step - 1, (bitPos - 6) % 32); int sBit2 = extractBit(E, step - 1, (bitPos - 11) % 32); int sBit3 = extractBit(E, step - 1, (bitPos - 25) % 32); int sBit = sBit1 ^ sBit2 ^ sBit3; int bitECarry = extractBit(ECarry, step, bitPos-1); int bitE = EBit_4 ^ sBit ^ chBit ^ ABit_4 ^ constBit ^ wordBit ^ bitECarry; int bitEC = (EBit_4 + sBit + chBit + ABit_4 + constBit + wordBit + bitECarry) >> 1; // Dropped the last bit to generate the carry. int SBit1 = extractBit(A, step - 1, (bitPos - 2) % 32); int SBit2 = extractBit(A, step - 1, (bitPos - 13) % 32); int SBit3 = extractBit(A, step - 1, (bitPost - 22) % 32); int SBit = SBit1 ^ SBit2 ^ SBit3; int bitACarry = extractBit(ACarry, step, bitPos - 1); int mjBit1 = extractBit(A, step - 1, bitPos); int mjBit2 = extractBit(A, step - 2, bitPos); int mjBit3 = extractBit(A, step - 3, bitPos); int mjBit = mj(mjBit1, mjBit2, mjBit3); int bitA = (-ABit_4) ^ SBit ^ bitE ^ mjBit; int bitACarry = ((-ABit_4) + SBit + bitE + mjBit) >> 1; }
void sg::cd_system::modelData_update_client(int player_id) { Json::Value jCdList; building_sub_sys.collect_cd_info(player_id, jCdList); train_system.collect_cd_info(player_id, jCdList); building_sys.collect_cd_info(player_id, jCdList); equipment_sys.collect_cd_info(player_id, jCdList); player_mgr.collect_cd_info(player_id, jCdList); Json::Value respJson; respJson["msg"][0u] = jCdList; string respond_str = respJson.toStyledString(); //respond_str = commom_sys.tighten(respond_str); na::msg::msg_json mj(sg::protocol::g2c::cd_modelData_update_resp, respond_str); player_mgr.send_to_online_player(player_id, mj); }
void cnbint( int i, const double pos[][3], const double vel[][3], const double mass[], int nnb, int list[], double f[3], double fdot[3]){ const int NBMAX = 512; assert(nnb <= NBMAX); float xbuf[NBMAX] __attribute__ ((aligned(16))); float ybuf[NBMAX] __attribute__ ((aligned(16))); float zbuf[NBMAX] __attribute__ ((aligned(16))); float vxbuf[NBMAX] __attribute__ ((aligned(16))); float vybuf[NBMAX] __attribute__ ((aligned(16))); float vzbuf[NBMAX] __attribute__ ((aligned(16))); float mbuf[NBMAX] __attribute__ ((aligned(16))); assert((unsigned long)xbuf % 16 == 0); double xi = pos[i][0]; double yi = pos[i][1]; double zi = pos[i][2]; float vxi = vel[i][0]; float vyi = vel[i][1]; float vzi = vel[i][2]; for(int k=0; k<nnb; k++){ int j = list[k]; #if 1 int jj = list[k+4]; __builtin_prefetch(pos[jj]); __builtin_prefetch(pos[jj]+2); __builtin_prefetch(vel[jj]); __builtin_prefetch(vel[jj]+2); __builtin_prefetch(&mass[jj]); #endif #if 0 xbuf[k] = pos[j][0] - xi; ybuf[k] = pos[j][1] - yi; zbuf[k] = pos[j][2] - zi; vxbuf[k] = vel[j][0] - vxi; vybuf[k] = vel[j][1] - vyi; vzbuf[k] = vel[j][2] - vzi; mbuf[k] = mass[j]; #else double xj = pos[j][0]; double yj = pos[j][1]; double zj = pos[j][2]; float vxj = vel[j][0]; float vyj = vel[j][1]; float vzj = vel[j][2]; float mj = mass[j]; xj -= xi; yj -= yi; zj -= zi; vxj -= vxi; vyj -= vyi; vzj -= vzi; xbuf[k] = xj; ybuf[k] = yj; zbuf[k] = zj; vxbuf[k] = vxj; vybuf[k] = vyj; vzbuf[k] = vzj; mbuf[k] = mj; #endif } for(int k=nnb; k%4; k++){ xbuf[k] = 16.0f; ybuf[k] = 16.0f; zbuf[k] = 16.0f; vxbuf[k] = 0.0f; vybuf[k] = 0.0f; vzbuf[k] = 0.0f; mbuf[k] = 0.0f; } v4df ax(0.0), ay(0.0), az(0.0); v4sf jx(0.0), jy(0.0), jz(0.0); for(int k=0; k<nnb; k+=4){ v4sf dx(xbuf + k); v4sf dy(ybuf + k); v4sf dz(zbuf + k); v4sf dvx(vxbuf + k); v4sf dvy(vybuf + k); v4sf dvz(vzbuf + k); v4sf mj(mbuf + k); v4sf r2 = dx*dx + dy*dy + dz*dz; v4sf rv = dx*dvx + dy*dvy + dz*dvz; rv *= v4sf(-3.0f); // v4sf rinv1 = r2.rsqrt() & v4sf(mask); #if 1 v4sf rinv1 = r2.rsqrt(); #else v4sf rinv1 = v4sf(v4df(1.0) / v4df(r2).sqrt()); #endif v4sf rinv2 = rinv1 * rinv1; rv *= rinv2; v4sf rinv3 = mj * rinv1 * rinv2; dx *= rinv3; ax += v4df(dx); dy *= rinv3; ay += v4df(dy); dz *= rinv3; az += v4df(dz); dvx *= rinv3; jx += dvx; dvy *= rinv3; jy += dvy; dvz *= rinv3; jz += dvz; dx *= rv; jx += dx; dy *= rv; jy += dy; dz *= rv; jz += dz; } f[0] = ax.sum(); f[1] = ay.sum(); f[2] = az.sum(); fdot[0] = (v4df(jx)).sum(); fdot[1] = (v4df(jy)).sum(); fdot[2] = (v4df(jz)).sum(); assert(f[0] == f[0]); assert(f[1] == f[1]); assert(f[2] == f[2]); assert(fdot[0] == fdot[0]); assert(fdot[1] == fdot[1]); assert(fdot[2] == fdot[2]); }
void cnbint( int i, const double pos[][3], const double vel[][3], const double mass[], int nnb, int list[], double f[3], double fdot[3]){ const int NBMAX = 512; assert(nnb <= NBMAX); double xbuf[NBMAX] __attribute__ ((aligned(16))); double ybuf[NBMAX] __attribute__ ((aligned(16))); double zbuf[NBMAX] __attribute__ ((aligned(16))); float vxbuf[NBMAX] __attribute__ ((aligned(16))); float vybuf[NBMAX] __attribute__ ((aligned(16))); float vzbuf[NBMAX] __attribute__ ((aligned(16))); float mbuf[NBMAX] __attribute__ ((aligned(16))); for(int k=0; k<nnb; k++){ int j = list[k]; xbuf[k] = pos[j][0]; ybuf[k] = pos[j][1]; zbuf[k] = pos[j][2]; vxbuf[k] = vel[j][0]; vybuf[k] = vel[j][1]; vzbuf[k] = vel[j][2]; mbuf[k] = mass[j]; } for(int k=nnb; k%4; k++){ xbuf[k] = 16.0; ybuf[k] = 16.0; zbuf[k] = 16.0; vxbuf[k] = 0.0f; vybuf[k] = 0.0f; vzbuf[k] = 0.0f; mbuf[k] = 0.0f; } v4df xi(pos[i][0]); v4df yi(pos[i][1]); v4df zi(pos[i][2]); v4sf vxi(vel[i][0]); v4sf vyi(vel[i][1]); v4sf vzi(vel[i][2]); v4df ax(0.0), ay(0.0), az(0.0); v4sf jx(0.0), jy(0.0), jz(0.0); for(int k=0; k<nnb; k+=4){ v4df xj(xbuf + k); v4df yj(ybuf + k); v4df zj(zbuf + k); v4sf vxj(vxbuf + k); v4sf vyj(vybuf + k); v4sf vzj(vzbuf + k); v4sf mj(mbuf + k); v4sf dx = v4sf::_v4sf(xj - xi); v4sf dy = v4sf::_v4sf(yj - yi); v4sf dz = v4sf::_v4sf(zj - zi); v4sf dvx = vxj - vxi; v4sf dvy = vyj - vyi; v4sf dvz = vzj - vzi; v4sf r2 = dx*dx + dy*dy + dz*dz; v4sf rv = dx*dvx + dy*dvy + dz*dvz; rv *= v4sf(-3.0f); // v4sf rinv1 = r2.rsqrt() & v4sf(mask); v4sf rinv1 = r2.rsqrt(); v4sf rinv2 = rinv1 * rinv1; rv *= rinv2; v4sf rinv3 = mj * rinv1 * rinv2; dx *= rinv3; ax += v4df(dx); dy *= rinv3; ay += v4df(dy); dz *= rinv3; az += v4df(dz); dvx *= rinv3; jx += dvx; dvy *= rinv3; jy += dvy; dvz *= rinv3; jz += dvz; dx *= rv; jx += dx; dy *= rv; jy += dy; dz *= rv; jz += dz; } f[0] = ax.sum(); f[1] = ay.sum(); f[2] = az.sum(); fdot[0] = (v4df(jx)).sum(); fdot[1] = (v4df(jy)).sum(); fdot[2] = (v4df(jz)).sum(); assert(f[0] == f[0]); assert(f[1] == f[1]); assert(f[2] == f[2]); assert(fdot[0] == fdot[0]); assert(fdot[1] == fdot[1]); assert(fdot[2] == fdot[2]); }