亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? alpha_tru64_process.cc

?? linux下基于c++的處理器仿真平臺。具有處理器流水線
?? CC
?? 第 1 頁 / 共 5 頁
字號:
	    break;	  default:	    warn("setsysinfo: unknown op %d\n", op);	    break;	}	return 0;    }    /// Target fnctl() handler.    static SyscallReturn    fcntlFunc(SyscallDesc *desc, int callnum, Process *process,	      ExecContext *xc)    {	int fd = xc->getSyscallArg(0);	if (fd < 0 || process->sim_fd(fd) < 0)	    return -EBADF;	int cmd = xc->getSyscallArg(1);	switch (cmd) {	  case 0: // F_DUPFD	    // if we really wanted to support this, we'd need to do it	    // in the target fd space.	    warn("fcntl(%d, F_DUPFD) not supported, error returned\n", fd);	    return -EMFILE;	  case 1: // F_GETFD (get close-on-exec flag)	  case 2: // F_SETFD (set close-on-exec flag)	    return 0;		  case 3: // F_GETFL (get file flags)	  case 4: // F_SETFL (set file flags)	    // not sure if this is totally valid, but we'll pass it through	    // to the underlying OS	    warn("fcntl(%d, %d) passed through to host\n", fd, cmd);	    return fcntl(process->sim_fd(fd), cmd);	    // return 0;	  case 7: // F_GETLK  (get lock)	  case 8: // F_SETLK  (set lock)	  case 9: // F_SETLKW (set lock and wait)	    // don't mess with file locking... just act like it's OK	    warn("File lock call (fcntl(%d, %d)) ignored.\n", fd, cmd);	    return 0;	  default:	    warn("Unknown fcntl command %d\n", cmd);	    return 0;	}    }        /// Target getdirentries() handler.    static SyscallReturn    getdirentriesFunc(SyscallDesc *desc, int callnum, Process *process,		      ExecContext *xc)    {#ifdef __CYGWIN__        panic("getdirent not implemented on cygwin!");#else	int fd = process->sim_fd(xc->getSyscallArg(0));	Addr tgt_buf = xc->getSyscallArg(1);	int tgt_nbytes = xc->getSyscallArg(2);	Addr tgt_basep = xc->getSyscallArg(3);	char * const host_buf = new char[tgt_nbytes];	// just pass basep through uninterpreted.	TypedBufferArg<int64_t> basep(tgt_basep);	basep.copyIn(xc->mem);	long host_basep = (off_t)*basep;	int host_result = getdirentries(fd, host_buf, tgt_nbytes, &host_basep);	// check for error	if (host_result < 0) {	    delete [] host_buf;	    return -errno;	}	// no error: copy results back to target space	Addr tgt_buf_ptr = tgt_buf;	char *host_buf_ptr = host_buf;	char *host_buf_end = host_buf + host_result;	while (host_buf_ptr < host_buf_end) {	    global_dirent *host_dp = (global_dirent *)host_buf_ptr;	    int namelen = strlen(host_dp->d_name);	    // Actual size includes padded string rounded up for alignment.	    // Subtract 256 for dummy char array in Tru64::dirent definition.	    // Add 1 to namelen for terminating null char.	    int tgt_bufsize = sizeof(Tru64::dirent) - 256 + RoundUp(namelen+1, 8);	    TypedBufferArg<Tru64::dirent> tgt_dp(tgt_buf_ptr, tgt_bufsize);	    tgt_dp->d_ino = host_dp->d_ino;	    tgt_dp->d_reclen = tgt_bufsize;	    tgt_dp->d_namlen = namelen;	    strcpy(tgt_dp->d_name, host_dp->d_name);	    tgt_dp.copyOut(xc->mem);	    tgt_buf_ptr += tgt_bufsize;	    host_buf_ptr += host_dp->d_reclen;	}	delete [] host_buf;	*basep = host_basep;	basep.copyOut(xc->mem);	return tgt_buf_ptr - tgt_buf;#endif    }    /// Target sigreturn() handler.    static SyscallReturn    sigreturnFunc(SyscallDesc *desc, int callnum, Process *process,		  ExecContext *xc)    {	RegFile *regs = &xc->regs;	TypedBufferArg<Tru64::sigcontext> sc(xc->getSyscallArg(0));	sc.copyIn(xc->mem);	// Restore state from sigcontext structure.	// Note that we'll advance PC <- NPC before the end of the cycle,	// so we need to restore the desired PC into NPC.	// The current regs->pc will get clobbered.	regs->npc = sc->sc_pc;	for (int i = 0; i < 31; ++i) {	    regs->intRegFile[i] = sc->sc_regs[i];	    regs->floatRegFile.q[i] = sc->sc_fpregs[i];	}	regs->miscRegs.fpcr = sc->sc_fpcr;	return 0;    }    /// Target table() handler.    static SyscallReturn    tableFunc(SyscallDesc *desc, int callnum, Process *process,	      ExecContext *xc)    {	int id = xc->getSyscallArg(0);		// table ID	int index = xc->getSyscallArg(1);	// index into table	// arg 2 is buffer pointer; type depends on table ID	int nel = xc->getSyscallArg(3);		// number of elements	int lel = xc->getSyscallArg(4);		// expected element size	switch (id) {	  case Tru64::TBL_SYSINFO: {	      if (index != 0 || nel != 1 || lel != sizeof(Tru64::tbl_sysinfo))		  return -EINVAL;	      TypedBufferArg<Tru64::tbl_sysinfo> elp(xc->getSyscallArg(2));	      const int clk_hz = one_million;	      elp->si_user = curTick / (Clock::Frequency / clk_hz);	      elp->si_nice = 0;	      elp->si_sys = 0;	      elp->si_idle = 0;	      elp->wait = 0;	      elp->si_hz = clk_hz;	      elp->si_phz = clk_hz;	      elp->si_boottime = seconds_since_epoch; // seconds since epoch?	      elp->si_max_procs = process->numCpus();	      elp.copyOut(xc->mem);	      return 0;	  }	  default:	    cerr << "table(): id " << id << " unknown." << endl;	    return -EINVAL;	}    }    /// Array of syscall descriptors, indexed by call number.    static SyscallDesc syscallDescs[];    /// Number of syscalls in syscallDescs[].    static const int Num_Syscall_Descs;    /// Max supported syscall number.    static const int Max_Syscall_Desc;    //    // Mach syscalls -- identified by negated syscall numbers    //    /// Create a stack region for a thread.    static SyscallReturn    stack_createFunc(SyscallDesc *desc, int callnum, Process *process,		     ExecContext *xc)    {	TypedBufferArg<Tru64::vm_stack> argp(xc->getSyscallArg(0));	argp.copyIn(xc->mem);	// if the user chose an address, just let them have it.  Otherwise	// pick one for them.	if (argp->address == 0) {	    argp->address = process->next_thread_stack_base;	    int stack_size = (argp->rsize + argp->ysize + argp->gsize);	    process->next_thread_stack_base -= stack_size;	    argp.copyOut(xc->mem);	}	return 0;    }    /// NXM library version stamp.    static    const int NXM_LIB_VERSION = 301003;    /// This call sets up the interface between the user and kernel    /// schedulers by creating a shared-memory region.  The shared memory    /// region has several structs, some global, some per-RAD, some per-VP.    static SyscallReturn    nxm_task_initFunc(SyscallDesc *desc, int callnum, Process *process,		      ExecContext *xc)    {	TypedBufferArg<Tru64::nxm_task_attr> attrp(xc->getSyscallArg(0));	TypedBufferArg<Addr> configptr_ptr(xc->getSyscallArg(1));	attrp.copyIn(xc->mem);	if (attrp->nxm_version != NXM_LIB_VERSION) {	    cerr << "nxm_task_init: thread library version mismatch! "		 << "got " << attrp->nxm_version		 << ", expected " << NXM_LIB_VERSION << endl;	    abort();	}	if (attrp->flags != Tru64::NXM_TASK_INIT_VP) {	    cerr << "nxm_task_init: bad flag value " << attrp->flags		 << " (expected " << Tru64::NXM_TASK_INIT_VP << ")" << endl;	    abort();	}	const Addr base_addr = 0x12000; // was 0x3f0000000LL;	Addr cur_addr = base_addr; // next addresses to use	// first comes the config_info struct	Addr config_addr = cur_addr;	cur_addr += sizeof(Tru64::nxm_config_info);	// next comes the per-cpu state vector	Addr slot_state_addr = cur_addr;	int slot_state_size =	    process->numCpus() * sizeof(Tru64::nxm_slot_state_t);	cur_addr += slot_state_size;	// now the per-RAD state struct (we only support one RAD)	cur_addr = 0x14000;	// bump up addr for alignment	Addr rad_state_addr = cur_addr;	int rad_state_size =	    (sizeof(Tru64::nxm_shared)	     + (process->numCpus()-1) * sizeof(Tru64::nxm_sched_state));	cur_addr += rad_state_size;	// now initialize a config_info struct and copy it out to user space	TypedBufferArg<Tru64::nxm_config_info> config(config_addr);	config->nxm_nslots_per_rad = process->numCpus();	config->nxm_nrads = 1;	// only one RAD in our system!	config->nxm_slot_state = slot_state_addr;	config->nxm_rad[0] = rad_state_addr;	config.copyOut(xc->mem);	// initialize the slot_state array and copy it out	TypedBufferArg<Tru64::nxm_slot_state_t> slot_state(slot_state_addr,							   slot_state_size);	for (int i = 0; i < process->numCpus(); ++i) {	    // CPU 0 is bound to the calling process; all others are available	    slot_state[i] =		(i == 0) ? Tru64::NXM_SLOT_BOUND : Tru64::NXM_SLOT_AVAIL;	}	slot_state.copyOut(xc->mem);	// same for the per-RAD "shared" struct.  Note that we need to	// allocate extra bytes for the per-VP array which is embedded at	// the end.	TypedBufferArg<Tru64::nxm_shared> rad_state(rad_state_addr,						    rad_state_size);	rad_state->nxm_callback = attrp->nxm_callback;	rad_state->nxm_version = attrp->nxm_version;	rad_state->nxm_uniq_offset = attrp->nxm_uniq_offset;	for (int i = 0; i < process->numCpus(); ++i) {	    Tru64::nxm_sched_state *ssp = &rad_state->nxm_ss[i];	    ssp->nxm_u.sigmask = 0;	    ssp->nxm_u.sig = 0;	    ssp->nxm_u.flags = 0;	    ssp->nxm_u.cancel_state = 0;	    ssp->nxm_u.nxm_ssig = 0;	    ssp->nxm_bits = 0;	    ssp->nxm_quantum = attrp->nxm_quantum;	    ssp->nxm_set_quantum = attrp->nxm_quantum;	    ssp->nxm_sysevent = 0;	    if (i == 0) {		uint64_t uniq = xc->regs.miscRegs.uniq;		ssp->nxm_u.pth_id = uniq + attrp->nxm_uniq_offset;		ssp->nxm_u.nxm_active = uniq | 1;	    }	    else {		ssp->nxm_u.pth_id = 0;		ssp->nxm_u.nxm_active = 0;	    }	}	rad_state.copyOut(xc->mem);	//	// copy pointer to shared config area out to user	//	*configptr_ptr = config_addr;	configptr_ptr.copyOut(xc->mem);	// Register this as a valid address range with the process	process->nxm_start = base_addr;	process->nxm_end = cur_addr;	return 0;    }    /// Initialize execution context.    static void    init_exec_context(ExecContext *ec,		      Tru64::nxm_thread_attr *attrp, uint64_t uniq_val)    {	memset(&ec->regs, 0, sizeof(ec->regs));	ec->regs.intRegFile[ArgumentReg0] = attrp->registers.a0;	ec->regs.intRegFile[27/*t12*/] = attrp->registers.pc;	ec->regs.intRegFile[StackPointerReg] = attrp->registers.sp;	ec->regs.miscRegs.uniq = uniq_val;	ec->regs.pc = attrp->registers.pc;	ec->regs.npc = attrp->registers.pc + sizeof(MachInst);	ec->activate();    }    /// Create thread.    static SyscallReturn    nxm_thread_createFunc(SyscallDesc *desc, int callnum, Process *process,			  ExecContext *xc)    {	TypedBufferArg<Tru64::nxm_thread_attr> attrp(xc->getSyscallArg(0));	TypedBufferArg<uint64_t> kidp(xc->getSyscallArg(1));	int thread_index = xc->getSyscallArg(2);	// get attribute args	attrp.copyIn(xc->mem);	if (attrp->version != NXM_LIB_VERSION) {	    cerr << "nxm_thread_create: thread library version mismatch! "		 << "got " << attrp->version		 << ", expected " << NXM_LIB_VERSION << endl;	    abort();	}	if (thread_index < 0 | thread_index > process->numCpus()) {	    cerr << "nxm_thread_create: bad thread index " << thread_index		 << endl;	    abort();	}	// On a real machine, the per-RAD shared structure is in	// shared memory, so both the user and kernel can get at it.	// We don't have that luxury, so we just copy it in and then	// back out again.	int rad_state_size =	    (sizeof(Tru64::nxm_shared) +	     (process->numCpus()-1) * sizeof(Tru64::nxm_sched_state));	TypedBufferArg<Tru64::nxm_shared> rad_state(0x14000,						    rad_state_size);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情综合色丁香一区二区| 亚洲欧洲www| 日韩av网站免费在线| 伊人一区二区三区| 91福利在线观看| 亚洲国产日韩a在线播放性色| 免费成人av在线播放| 91精品福利在线一区二区三区 | 男女激情视频一区| 欧美一区二区大片| 精品一区二区免费在线观看| 久久久精品免费免费| 亚洲国产一区二区视频| 欧美一区二区三区免费在线看| 91精品国产综合久久婷婷香蕉 | 欧美一区二区福利在线| 精品一区免费av| 国产精品沙发午睡系列990531| 开心九九激情九九欧美日韩精美视频电影 | 一区二区三区精品| 欧美午夜精品久久久| 精品中文av资源站在线观看| 欧美经典一区二区三区| 色欧美片视频在线观看 | 欧美日韩国产成人在线91| 日本美女视频一区二区| 亚洲国产成人在线| 粗大黑人巨茎大战欧美成人| 亚洲精品成人悠悠色影视| 欧美一区二区网站| av电影天堂一区二区在线观看| 国产欧美视频在线观看| 欧美在线一区二区三区| 精品在线免费观看| 一区二区三区四区不卡在线| 精品国产乱码久久久久久1区2区| 看国产成人h片视频| 亚洲欧美色图小说| 欧美成人vps| 欧美日韩一级大片网址| 成人动漫精品一区二区| 麻豆国产精品视频| 一区二区三区丝袜| 中文字幕欧美国产| 93久久精品日日躁夜夜躁欧美| 国产精品久久久久久久久动漫 | 丁香天五香天堂综合| 亚洲成人免费影院| 欧美大片一区二区| 国产一区激情在线| 亚洲伊人伊色伊影伊综合网| 中文字幕不卡在线观看| 欧美大片在线观看一区二区| 国产精品一区二区久久不卡| 视频一区二区不卡| 亚洲美女淫视频| 国产精品丝袜91| 国产亚洲福利社区一区| 欧美一区二区三区在线视频| 91福利国产成人精品照片| 日韩精品欧美精品| 久久九九久精品国产免费直播| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲国产精品一区二区久久 | 日韩一区和二区| 欧美日韩精品三区| 欧美性受xxxx黑人xyx| 91看片淫黄大片一级| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日本一区二区成人| 久久久久国色av免费看影院| 精品国产免费视频| 99久久久精品| 99久久婷婷国产| 99视频精品免费视频| a4yy欧美一区二区三区| 99精品1区2区| 色综合久久久网| 久久国产人妖系列| 久久精品国产精品亚洲精品| 日本在线不卡视频| 美国欧美日韩国产在线播放| 看电视剧不卡顿的网站| 国产一区二区三区综合| 国产乱理伦片在线观看夜一区| 一区二区三区四区不卡在线| 亚洲一二三级电影| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品理论片在线观看| 国产精品传媒在线| 亚洲五月六月丁香激情| 日韩国产欧美在线观看| 捆绑调教美女网站视频一区| 国产精品亚洲第一 | 日韩理论在线观看| 亚洲综合视频网| 五月激情综合色| 久久99国内精品| 午夜精品久久久久久久久久 | 亚洲一区二区三区四区的| 亚洲国产精品久久艾草纯爱| 国产精品理论在线观看| 26uuu成人网一区二区三区| 久久亚洲私人国产精品va媚药| 欧美精品日韩精品| 在线观看日韩一区| 制服丝袜一区二区三区| 欧美sm极限捆绑bd| 国产精品久久久久9999吃药| 久久在线观看免费| 欧美一级欧美三级| 久久综合久久99| 日韩欧美123| 日韩精品在线一区| 中文字幕在线不卡一区| 首页亚洲欧美制服丝腿| 这里是久久伊人| 国产日韩欧美一区二区三区综合| 日韩美女视频一区二区在线观看| 欧美吻胸吃奶大尺度电影| 日韩女优制服丝袜电影| 亚洲丝袜自拍清纯另类| 国产精品国产三级国产| 国产精品免费视频网站| 视频在线观看一区二区三区| 国产成人精品三级麻豆| 成人美女视频在线看| 制服.丝袜.亚洲.另类.中文| 国产精品久久久久7777按摩| 琪琪一区二区三区| 色综合久久综合网欧美综合网| 91看片淫黄大片一级| 欧美刺激午夜性久久久久久久| 精品久久久网站| 久久久精品tv| 日韩一区精品视频| 捆绑调教一区二区三区| 欧美亚洲综合一区| 国产精品久久久爽爽爽麻豆色哟哟| 中文字幕日韩精品一区| 久久精品国产99国产精品| 欧美性一区二区| 亚洲色图在线播放| 国产99久久久国产精品潘金网站| 成人视屏免费看| 精品久久久久久无| 天堂va蜜桃一区二区三区漫画版| 蜜桃久久久久久久| 欧美日韩激情一区| 亚洲免费资源在线播放| 日韩专区欧美专区| 在线视频你懂得一区| 最新国产成人在线观看| 粉嫩av一区二区三区在线播放 | 欧美一区国产二区| 午夜视黄欧洲亚洲| 欧美午夜片在线观看| 亚洲精品国产一区二区精华液 | 国产一区二区精品在线观看| 911精品产国品一二三产区| 亚洲制服丝袜在线| 色婷婷精品久久二区二区蜜臀av| 91精品国产91久久综合桃花| 亚洲超碰精品一区二区| 欧美特级限制片免费在线观看| 欧美大尺度电影在线| 美女视频黄免费的久久| 欧美刺激脚交jootjob| 久久精品理论片| 亚洲精品一区二区三区福利| 韩国午夜理伦三级不卡影院| 精品人在线二区三区| 夜夜亚洲天天久久| 国产毛片精品国产一区二区三区| 欧美主播一区二区三区美女| 一区二区在线观看免费| 国产福利91精品一区二区三区| 欧洲精品一区二区三区在线观看| 精品免费99久久| 韩国毛片一区二区三区| 久久精品一区二区| 成人美女在线观看| 精品国内二区三区| 亚洲成人精品一区二区| 欧美一区二区在线免费观看| 最新欧美精品一区二区三区| 色偷偷久久一区二区三区| 国产日韩视频一区二区三区| 蜜臀av一区二区在线免费观看| 91美女片黄在线观看| 亚洲永久免费av| 欧美一区二区三区播放老司机| 亚洲欧美国产77777| 国产成人免费在线观看不卡| 一区在线观看视频| 欧美日韩亚洲综合一区二区三区 | 91麻豆高清视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产麻豆精品视频| 狠狠色丁香婷婷综合|