// There is no verification on the validity of the ID. uint64 PINContextHandler::getFlagValue(uint64 TritFlagID) const { uint64 rflags; REG reg = safecast(PINConverter::convertTritonReg2DBIReg(ID_RFLAGS)); if (!REG_valid(reg)) throw std::runtime_error("Error: getFlagValue() - Invalid PIN register id."); rflags = PIN_GetContextReg(this->_ctx, reg); switch (TritFlagID){ case ID_AF: return (rflags >> 4) & 1; case ID_CF: return (rflags & 1); case ID_DF: return (rflags >> 10) & 1; case ID_IF: return (rflags >> 9) & 1; case ID_OF: return (rflags >> 11) & 1; case ID_PF: return (rflags >> 2) & 1; case ID_SF: return (rflags >> 7) & 1; case ID_TF: return (rflags >> 8) & 1; case ID_ZF: return (rflags >> 6) & 1; default: throw std::runtime_error("Error: getFlagValue() - Invalid Flag id."); } return 0; }
void F77_FUNC(mpix_comm_update,MPIX_COMM_UPDATE)(MPI_Fint * comm, MPI_Fint * optimize, MPI_Fint * ierr) { MPI_Comm mycomm = MPI_Comm_f2c(*comm); int myoptimize = -1; safecast(*optimize, &myoptimize); *ierr = (MPI_Fint)MPIX_Comm_update(mycomm, myoptimize); return; }
// There is no verification on the validity of the ID. uint64 PINContextHandler::getRegisterValue(uint64 TritRegID) const { REG reg = safecast(PINConverter::convertTritonReg2DBIReg(TritRegID)); if (!REG_valid(reg) || (TritRegID >= ID_XMM0 && TritRegID <= ID_XMM15)) throw std::runtime_error("Error: getRegisterValue() - Invalid PIN register id."); return PIN_GetContextReg(this->_ctx, reg); }
void F77_FUNC(mpix_comm_rank2global,MPIX_COMM_RANK2GLOBAL)(MPI_Fint * comm, MPI_Fint * crank, MPI_Fint * grank, MPI_Fint * ierr) { MPI_Comm mycomm = MPI_Comm_f2c(*comm); int mycrank = -1, mygrank = -1; safecast(*crank, &mycrank); *ierr = (MPI_Fint)MPIX_Comm_rank2global(mycomm, mycrank, &mygrank); *grank = (MPI_Fint)mygrank; return; }
// There is no verification on the validity of the ID. void PINContextHandler::setRegisterValue(uint64 TritRegID, uint64 value) const { REG reg = safecast(PINConverter::convertTritonReg2DBIReg(TritRegID)); if (!REG_valid(reg) || (TritRegID >= ID_XMM0 && TritRegID <= ID_XMM15)) throw std::runtime_error("Error: setRegisterValue() - Invalid PIN register id."); PIN_SetContextReg(this->_ctx, reg, value); PIN_ExecuteAt(this->_ctx); }
// There is no verification on the validity of the ID. uint128 PINContextHandler::getSSERegisterValue(uint64 TritRegID) const { REG reg = safecast(PINConverter::convertTritonReg2DBIReg(TritRegID)); uint128 value = 0; PIN_REGISTER tmp; if (!REG_valid(reg) || !(TritRegID >= ID_XMM0 && TritRegID <= ID_XMM15)) throw std::runtime_error("Error: getSSERegisterValue() - Invalid PIN register id."); PIN_GetContextRegval(this->_ctx, reg, reinterpret_cast<uint8 *>(&tmp)); value = *reinterpret_cast<uint128*>(&tmp); return value; }
// There is no verification on the validity of the ID. void PINContextHandler::setSSERegisterValue(uint64 TritRegID, uint128 value) const { REG reg = safecast(PINConverter::convertTritonReg2DBIReg(TritRegID)); unsigned char *tmp = (unsigned char*)malloc(16); if (tmp == nullptr) throw std::runtime_error("Error: setSSERegisterValue() - Not enough memory."); if (!REG_valid(reg) || !(TritRegID >= ID_XMM0 && TritRegID <= ID_XMM15)) throw std::runtime_error("Error: setSSERegisterValue() - Invalid PIN register id."); *(uint128 *)tmp = value; PIN_SetContextRegval(this->_ctx, reg, tmp); PIN_ExecuteAt(this->_ctx); free(tmp); }
void F77_FUNC(mpix_rank2torus,MPIX_RANK2TORUS)(MPI_Fint * rank, MPI_Fint * coords, MPI_Fint * ierr) { int torusdim = -1; int rc = MPIX_Torus_ndims(&torusdim); if (rc!=MPI_SUCCESS) { *ierr = (MPI_Fint)rc; return; } int myrank = -1; safecast(*rank, &myrank); int * mycoords = malloc(torusdim*sizeof(int)); *ierr = (MPI_Fint)MPIX_Rank2torus(myrank, mycoords); for (int i=0; i<torusdim; i++) coords[i] = (MPI_Fint)mycoords[i]; free(mycoords); return; }
void F77_FUNC(mpix_torus2rank,MPIX_TORUS2RANK)(MPI_Fint * coords, MPI_Fint * rank, MPI_Fint * ierr) { int torusdim = -1; int rc = MPIX_Torus_ndims(&torusdim); if (rc!=MPI_SUCCESS) { *ierr = (MPI_Fint)rc; return; } int * mycoords = malloc(torusdim*sizeof(int)); for (int i=0; i<torusdim; i++) safecast(mycoords[i], &(mycoords[i]) ); int myrank = -1; *ierr = (MPI_Fint)MPIX_Torus2rank(mycoords, &myrank); *rank = (MPI_Fint)myrank; free(mycoords); return; }