Simplifying TAMPI's emulator code
This commit is contained in:
		
							parent
							
								
									5e2409f69f
								
							
						
					
					
						commit
						345bb7e98a
					
				
							
								
								
									
										119
									
								
								emu_tampi.c
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								emu_tampi.c
									
									
									
									
									
								
							@ -63,9 +63,8 @@ hook_init_tampi(struct ovni_emu *emu)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* --------------------------- pre ------------------------------- */
 | 
					/* --------------------------- pre ------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
pre_send(struct ovni_emu *emu)
 | 
					pre_tampi_mode(struct ovni_emu *emu, int state)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ovni_ethread *th;
 | 
						struct ovni_ethread *th;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -74,110 +73,10 @@ pre_send(struct ovni_emu *emu)
 | 
				
			|||||||
	switch(emu->cur_ev->header.value)
 | 
						switch(emu->cur_ev->header.value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		case '[':
 | 
							case '[':
 | 
				
			||||||
			chan_push(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_SEND);
 | 
								chan_push(&th->chan[CHAN_TAMPI_MODE], state);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case ']':
 | 
							case ']':
 | 
				
			||||||
			chan_pop(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_SEND);
 | 
								chan_pop(&th->chan[CHAN_TAMPI_MODE], state);
 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			  abort();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
pre_recv(struct ovni_emu *emu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct ovni_ethread *th;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	th = emu->cur_thread;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch(emu->cur_ev->header.value)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		case '[':
 | 
					 | 
				
			||||||
			chan_push(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_RECV);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case ']':
 | 
					 | 
				
			||||||
			chan_pop(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_RECV);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			  abort();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
pre_isend(struct ovni_emu *emu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct ovni_ethread *th;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	th = emu->cur_thread;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch(emu->cur_ev->header.value)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		case '[':
 | 
					 | 
				
			||||||
			chan_push(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_ISEND);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case ']':
 | 
					 | 
				
			||||||
			chan_pop(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_ISEND);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			  abort();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
pre_irecv(struct ovni_emu *emu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct ovni_ethread *th;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	th = emu->cur_thread;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch(emu->cur_ev->header.value)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		case '[':
 | 
					 | 
				
			||||||
			chan_push(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_IRECV);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case ']':
 | 
					 | 
				
			||||||
			chan_pop(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_IRECV);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			  abort();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
pre_wait(struct ovni_emu *emu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct ovni_ethread *th;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	th = emu->cur_thread;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch(emu->cur_ev->header.value)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		case '[':
 | 
					 | 
				
			||||||
			chan_push(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_WAIT);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case ']':
 | 
					 | 
				
			||||||
			chan_pop(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_WAIT);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			  abort();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
pre_waitall(struct ovni_emu *emu)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct ovni_ethread *th;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	th = emu->cur_thread;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	switch(emu->cur_ev->header.value)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		case '[':
 | 
					 | 
				
			||||||
			chan_push(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_WAITALL);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case ']':
 | 
					 | 
				
			||||||
			chan_pop(&th->chan[CHAN_TAMPI_MODE], ST_TAMPI_WAITALL);
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			  abort();
 | 
								  abort();
 | 
				
			||||||
@ -191,12 +90,12 @@ hook_pre_tampi(struct ovni_emu *emu)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	switch(emu->cur_ev->header.category)
 | 
						switch(emu->cur_ev->header.category)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		case 'S': pre_send(emu); break;
 | 
							case 'S': pre_tampi_mode(emu, ST_TAMPI_SEND); break;
 | 
				
			||||||
		case 'R': pre_recv(emu); break;
 | 
							case 'R': pre_tampi_mode(emu, ST_TAMPI_RECV); break;
 | 
				
			||||||
		case 's': pre_isend(emu); break;
 | 
							case 's': pre_tampi_mode(emu, ST_TAMPI_ISEND); break;
 | 
				
			||||||
		case 'r': pre_irecv(emu); break;
 | 
							case 'r': pre_tampi_mode(emu, ST_TAMPI_IRECV); break;
 | 
				
			||||||
		case 'V': pre_wait(emu); break;
 | 
							case 'V': pre_tampi_mode(emu, ST_TAMPI_WAIT); break;
 | 
				
			||||||
		case 'W': pre_waitall(emu); break;
 | 
							case 'W': pre_tampi_mode(emu, ST_TAMPI_WAITALL); break;
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user