/* bfs: do bfs. the times of bfs has to equal to ttl * return unvisited node number */ int bfs(int pos, int ttl) { int times, sum; Node *pt; sum = numnode; /* no such node */ if (pos == -1) return sum; /* init visited array, queue tag and graph[pos] times */ memset(visited, FALSE, MAXNODE * sizeof(int)); front = end = graph[pos].times = 0; visited[pos] = TRUE; sum--; if (graph[pos].times == ttl) return sum; addq(pos); while (front != end) { pos = deleteq(); for (times = graph[pos].times + 1, pt = graph[pos].next; pt; pt = pt->next) { pos = pt->field.pos; if (!visited[pos]) { visited[pos] = TRUE; sum--; graph[pos].times = times; if (times < ttl) addq(pos); } } } return sum; }
/* * wait for an ACK(FAh), RESEND(FEh), or RESET_FAIL(FCh) from the aux device. * queue anything else. */ static int wait_for_aux_ack(struct atkbdc_softc *kbdc) { int retry; int f; int b; /* CPU will stay inside the loop for 200msec at most */ retry = kbdc->retry * 2; while (retry-- > 0) { if ((f = read_status(kbdc)) & KBDS_ANY_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); b = read_data(kbdc); if ((f & KBDS_BUFFER_FULL) == KBDS_AUX_BUFFER_FULL) { if ((b == PSM_ACK) || (b == PSM_RESEND) || (b == PSM_RESET_FAIL)) return b; addq(&kbdc->aux, b); } else if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { addq(&kbdc->kbd, b); } } DELAY(KBDC_DELAYTIME); } return -1; }
int main(int argc,char** argv) { int i; que=createqueue(); for(i=0;i<100;i++){ element e; e.key=100+i; addq(e); } for(i=0;i<50;i++){ element e; e.key=100+i; delq(e); } for(i=0;i<100;i++){ element e; e.key=100-i; addq(e); } element e=queuefront(); printf("the front element is %d\n",e.key); int num=rear-front; for(i=front+1;i<=rear;i++){ printf("the number of position %d is %d\n",i,que[i].key); } return 0; }
//层序遍历 void level_order(tree_pointer ptr) { int front = rear = 0; tree_pointer queue[MAX]; //if empty tree if(!ptr) return; addq(fron,&rear,ptr); while(1) { ptr = deleteq(&&front,rear); if(ptr) { printf("%d",ptr->data); if(ptr->left_child) { addq(front,&rear,ptr->left_child); } if(ptr->right_child) { addq(front,&rear,ptr->right_child); } else break; } } }
int main() { Queue *p = (Queue *)malloc(sizeof(Node)*5); Queue *q = (Queue *)malloc(sizeof(Node)*5); int sx = 100; addq(p, q, sx); addq(p, q, sx); printf(":%d\n", deleteq(p)); return 0; }
/** * Method entry for static native methods: * int java.util.zip.CRC32.updateBytes(int crc, byte[] b, int off, int len) * int java.util.zip.CRC32.updateByteBuffer(int crc, long buf, int off, int len) */ address TemplateInterpreterGenerator::generate_CRC32_updateBytes_entry(AbstractInterpreter::MethodKind kind) { if (UseCRC32Intrinsics) { address entry = __ pc(); // rbx,: Method* // r13: senderSP must preserved for slow path, set SP to it on fast path Label slow_path; // If we need a safepoint check, generate full interpreter entry. ExternalAddress state(SafepointSynchronize::address_of_state()); __ cmp32(ExternalAddress(SafepointSynchronize::address_of_state()), SafepointSynchronize::_not_synchronized); __ jcc(Assembler::notEqual, slow_path); // We don't generate local frame and don't align stack because // we call stub code and there is no safepoint on this path. // Load parameters const Register crc = c_rarg0; // crc const Register buf = c_rarg1; // source java byte array address const Register len = c_rarg2; // length const Register off = len; // offset (never overlaps with 'len') // Arguments are reversed on java expression stack // Calculate address of start element if (kind == Interpreter::java_util_zip_CRC32_updateByteBuffer) { __ movptr(buf, Address(rsp, 3*wordSize)); // long buf __ movl2ptr(off, Address(rsp, 2*wordSize)); // offset __ addq(buf, off); // + offset __ movl(crc, Address(rsp, 5*wordSize)); // Initial CRC } else { __ movptr(buf, Address(rsp, 3*wordSize)); // byte[] array __ addptr(buf, arrayOopDesc::base_offset_in_bytes(T_BYTE)); // + header size __ movl2ptr(off, Address(rsp, 2*wordSize)); // offset __ addq(buf, off); // + offset __ movl(crc, Address(rsp, 4*wordSize)); // Initial CRC } // Can now load 'len' since we're finished with 'off' __ movl(len, Address(rsp, wordSize)); // Length __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, StubRoutines::updateBytesCRC32()), crc, buf, len); // result in rax // _areturn __ pop(rdi); // get return address __ mov(rsp, r13); // set sp to sender sp __ jmp(rdi); // generate a vanilla native entry as the slow path __ bind(slow_path); __ jump_to_entry(Interpreter::entry_for_kind(Interpreter::native)); return entry; } return NULL; }
void Level_traversal(treePointer ptr) { if(!ptr)return; addq(ptr); for(;;) { ptr = deleteq(); if(ptr) { printf("%s ",ptr->data); if(ptr->leftchild) addq(ptr->leftchild); if(ptr->rightchild) addq(ptr->rightchild); } else break; } }
void main() { int ch,item; struct queue q1; q1.front=q1.rear=-1; do{ printf("\n------main menu------\n"); printf("1. add to queue\n2. delete from queue\n3. exit\npress:"); scanf("%d",&ch); switch(ch) { case 1: printf("\nenter value to add"); scanf("%d",&item); addq(&q1,item); break; case 2: item=delq(&q1); if(item!=-10) printf("\ndeleted value is %d",item); break; case 3: break; default: printf("\nincorrect entry"); } }while(ch!=3); }
/* read one byte from the keyboard, but return immediately if * no data is waiting */ int read_kbd_data_no_wait(KBDC p) { int f; #if KBDIO_DEBUG >= 2 if (++call > 2000) { call = 0; log(LOG_DEBUG, "kbdc: kbd q: %d calls, max %d chars, " "aux q: %d calls, max %d chars\n", kbdcp(p)->kbd.call_count, kbdcp(p)->kbd.max_qcount, kbdcp(p)->aux.call_count, kbdcp(p)->aux.max_qcount); } #endif if (availq(&kbdcp(p)->kbd)) return removeq(&kbdcp(p)->kbd); f = read_status(kbdcp(p)) & KBDS_BUFFER_FULL; if (f == KBDS_AUX_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); addq(&kbdcp(p)->aux, read_data(kbdcp(p))); f = read_status(kbdcp(p)) & KBDS_BUFFER_FULL; } if (f == KBDS_KBD_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); return read_data(kbdcp(p)); } return -1; /* no data */ }
/*wakeup:休眠状態のタスクを実行可能状態にする*/ void wakeup(int ch){ TASK_ID_TYPE wake_task; wake_task = removeq(&semaphore[ch].task_list); //printf("wakeup ::%d\n",wake_task); addq(&ready,wake_task); return ; }
void addql(SnmpMgmtQueryList *ql, RFC1157VarBindList *vbl, UINT vb, UINT v) { UINT q; // index into query list // make sure that the type is correct if ((ql->type != ASN_RFC1157_SETREQUEST) && (vbl->list[vb].value.asnType != ASN_NULL)) { SNMPDBG(( SNMP_LOG_TRACE, "SNMP: PDU: forcing asnType to NULL (asnType=%d).\n", (DWORD)(BYTE)vbl->list[vb].value.asnType )); // force the asn type to be null vbl->list[vb].value.asnType = ASN_NULL; } // process existing queries for (q=0; q < ql->len; q++) { // compare existing extension agent addresses if (ql->query[q].addr == extAgents[vl[v]].queryAddr) { // add to existing query addq(&ql->query[q], &vbl->list[vb], vb, v); return; } } SNMPDBG((SNMP_LOG_TRACE, "SNMP: PDU: creating query for %s (0x%08lx).\n", extAgents[vl[v]].pathName, extAgents[vl[v]].queryAddr)); ql->len++; // add new query to end of list ql->query = (SnmpMgmtQuery *)SnmpUtilMemReAlloc(ql->query, (ql->len * sizeof(SnmpMgmtQuery))); ql->query[q].xlat = NULL; ql->query[q].addr = extAgents[vl[v]].queryAddr; ql->query[q].vbl.len = 0; ql->query[q].vbl.list = NULL; // add to newly created query addq(&ql->query[q], &vbl->list[vb], vb, v); } // end addql()
/** * Method entry for static native methods: * int java.util.zip.CRC32C.updateBytes(int crc, byte[] b, int off, int end) * int java.util.zip.CRC32C.updateByteBuffer(int crc, long address, int off, int end) */ address TemplateInterpreterGenerator::generate_CRC32C_updateBytes_entry(AbstractInterpreter::MethodKind kind) { if (UseCRC32CIntrinsics) { address entry = __ pc(); // Load parameters const Register crc = c_rarg0; // crc const Register buf = c_rarg1; // source java byte array address const Register len = c_rarg2; const Register off = c_rarg3; // offset const Register end = len; // Arguments are reversed on java expression stack // Calculate address of start element if (kind == Interpreter::java_util_zip_CRC32C_updateDirectByteBuffer) { __ movptr(buf, Address(rsp, 3 * wordSize)); // long buf __ movl2ptr(off, Address(rsp, 2 * wordSize)); // offset __ addq(buf, off); // + offset __ movl(crc, Address(rsp, 5 * wordSize)); // Initial CRC // Note on 5 * wordSize vs. 4 * wordSize: // * int java.util.zip.CRC32C.updateByteBuffer(int crc, long address, int off, int end) // 4 2,3 1 0 // end starts at SP + 8 // The Java(R) Virtual Machine Specification Java SE 7 Edition // 4.10.2.3. Values of Types long and double // "When calculating operand stack length, values of type long and double have length two." } else { __ movptr(buf, Address(rsp, 3 * wordSize)); // byte[] array __ addptr(buf, arrayOopDesc::base_offset_in_bytes(T_BYTE)); // + header size __ movl2ptr(off, Address(rsp, 2 * wordSize)); // offset __ addq(buf, off); // + offset __ movl(crc, Address(rsp, 4 * wordSize)); // Initial CRC } __ movl(end, Address(rsp, wordSize)); // end __ subl(end, off); // end - off __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, StubRoutines::updateBytesCRC32C()), crc, buf, len); // result in rax // _areturn __ pop(rdi); // get return address __ mov(rsp, r13); // set sp to sender sp __ jmp(rdi); return entry; } return NULL; }
void main( ) { struct queue a ; int i ; clrscr( ) ; initqueue ( &a ) ; addq ( &a, 11 ) ; addq ( &a, -8 ) ; addq ( &a, 23 ) ; addq ( &a, 19 ) ; addq ( &a, 15 ) ; addq ( &a, 16 ) ; addq ( &a, 28 ) ; i = delq ( &a ) ; printf ( "\nItem extracted: %d", i ) ; i = delq ( &a ) ; printf ( "\nItem extracted: %d", i ) ; i = delq ( &a ) ; printf ( "\nItem extracted: %d", i ) ; delqueue ( &a ) ; getch( ) ; }
/** * breadth first traversal of a graph, starting with node v * the global array visited is initialized to 0, the queue * operations are similar to those described in Chapter 4 */ void bfs(int v) { node_pointer w; queue_pointer front, rear; front = rear = NULL; printf("%5d", v); visited[v] = TRUE; addq(&front, &rear, v); while(front){ v = deleteq(&front); for(w = graph[v]; w; w = w->link) if(!visited[w->vertex]){ printf("%5d",w->vertex); addq(&front, &rear, w->vertex); visited[w->vertex] = TRUE; } } }
void graph_bfs(fsnode **graph, int vert) { fsnode *w; visited[vert] = TRUE; printf("%5d", vert); addq(vert); while (front != FSNODE_N - 1) { vert = deleteq(); for (w = graph[vert]; w != NULL; w = w->link) { if (visited[w->vert] == FALSE) { printf("%5d", w->vert); addq(w->vert); visited[w->vert] = TRUE; } } } }
main(){ element test; test.key=1; int i=0; for(i=0;i<7;i++){ addq(test); } for(i=0;i<3;i++){ deleteq(test); } for(i=0;i<3;i++){ addq(test); } printf("front:%d\n",front); printf("rear:%d\n",rear); }
/* * device I/O routines */ static int wait_while_controller_busy(struct atkbdc_softc *kbdc) { int retry; int f; /* CPU will stay inside the loop for 100msec at most */ retry = kbdc->retry; while ((f = read_status(kbdc)) & KBDS_INPUT_BUFFER_FULL) { if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); addq(&kbdc->kbd, read_data(kbdc)); } else if ((f & KBDS_BUFFER_FULL) == KBDS_AUX_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); addq(&kbdc->aux, read_data(kbdc)); } DELAY(KBDC_DELAYTIME); if (--retry < 0) return FALSE; } return TRUE; }
void level_order(tree_ptr ptr) { int front=rear=0; tree_ptr queue[MAX]; if(ptr == NULL) return; addq(&front,&rear,ptr); for( ; ; ) { ptr=deleteq(&front,&rear); if(ptr!=NULL) { printf("\n"); printf("%5c",ptr->data); if(ptr->left_child) addq(&front,&rear,ptr->left_child); if(ptr->right_child) addq(&front,&rear,ptr->right_child); } else break; } }
/* read one byte from the aux device, but return immediately if * no data is waiting */ int read_aux_data_no_wait(KBDC p) { int f; if (availq(&kbdcp(p)->aux)) return removeq(&kbdcp(p)->aux); f = read_status(kbdcp(p)) & KBDS_BUFFER_FULL; if (f == KBDS_KBD_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); addq(&kbdcp(p)->kbd, read_data(kbdcp(p))); f = read_status(kbdcp(p)) & KBDS_BUFFER_FULL; } if (f == KBDS_AUX_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); return read_data(kbdcp(p)); } return -1; /* no data */ }
/*引数:ユーザタスク関数へのポインタ(タスク関数の先頭番地)*/ void set_task(void *task_ad){ int i; //printf("set_task %d\n",(unsigned int)task_ad); /*空きスロットのidをnew_taskに代入する*/ for(i=1;i<=NUMTASK;i++){ if(task_tab[i].status!=TCB_USED){ new_task=i; break; } } /*TCBにtask_addr,statusの登録*/ task_tab[new_task].task_addr = task_ad; task_tab[new_task].status = TCB_USED; /*ユーザタスク用スタックの初期化*/ task_tab[new_task].stack_ptr = init_stack(new_task); /*readyキューへnew_taskの登録*/ addq(&ready,new_task); }
/* wait for data from the aux device */ static int wait_for_aux_data(struct atkbdc_softc *kbdc) { int retry; int f; /* CPU will stay inside the loop for 200msec at most */ retry = kbdc->retry * 2; while ((f = read_status(kbdc) & KBDS_BUFFER_FULL) != KBDS_AUX_BUFFER_FULL) { if (f == KBDS_KBD_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); addq(&kbdc->kbd, read_data(kbdc)); } DELAY(KBDC_DELAYTIME); if (--retry < 0) return 0; } DELAY(KBDD_DELAYTIME); return f; }
/* discard data from the aux device */ void empty_aux_buffer(KBDC p, int wait) { int t; int b; int f; #if KBDIO_DEBUG >= 2 int c1 = 0; int c2 = 0; #endif int delta = 2; for (t = wait; t > 0; ) { if ((f = read_status(kbdcp(p))) & KBDS_ANY_BUFFER_FULL) { DELAY(KBDD_DELAYTIME); b = read_data(kbdcp(p)); if ((f & KBDS_BUFFER_FULL) == KBDS_KBD_BUFFER_FULL) { addq(&kbdcp(p)->kbd, b); #if KBDIO_DEBUG >= 2 ++c1; } else { ++c2; #endif } t = wait; } else { t -= delta; } DELAY(delta*1000); } #if KBDIO_DEBUG >= 2 if ((c1 > 0) || (c2 > 0)) log(LOG_DEBUG, "kbdc: %d:%d char read (empty_aux_buffer)\n", c1, c2); #endif emptyq(&kbdcp(p)->aux); }
int main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); #endif scanf("%d",&n); { memset(fe,-1,sizeof(fe)); memset(fq,-1,sizeof(fq)); memset(fnq,-1,sizeof(fnq)); memset(vis,0,sizeof(vis)); cnte=cntq=cntnq=0; for(int i=1;i<=n;i++) { int tmp;scanf("%d",&tmp); mx[i]=mn[i]=tmp; up[i]=dw[i]=0; } for(int i=1;i<n;i++) { int x,y; scanf("%d %d",&x,&y); addedge(x,y); } scanf("%d",&q); for(int i=0;i<q;i++) { int x,y; scanf("%d %d",&x,&y); addq(x,y,i); } lca(1,-1); for(int i=0;i<q;i++) printf("%d\n",ans[i]); } return 0; }
int main(int argc, char const *argv[]) { char choice; while(1) { int i; element item; printf("There are some oparetions: \n"); printf("a) add d) delete\n"); printf("Your choice: "); scanf("%c",&choice); switch(choice) { case 'a': printf("Please enter an integer: "); scanf("%d",&item.key); addq(&rear,item); break; case 'd': deleteq(&front,rear); break; } /*消除 \n */ while(getchar() != '\n') continue; if(rear>=0) { for(i=0;i<=rear;i++) { printf("%d->",queue[i].key); } } printf("\n"); } return 0; }
void MacroAssembler::fast_exp(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) { Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2; Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2; Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2; Label L_2TAG_PACKET_12_0_2, B1_3, B1_5, start; assert_different_registers(tmp, eax, ecx, edx); jmp(start); address cv = (address)_cv; address Shifter = (address)_shifter; address mmask = (address)_mmask; address bias = (address)_bias; address Tbl_addr = (address)_Tbl_addr; address ALLONES = (address)_ALLONES; address ebias = (address)_ebias; address XMAX = (address)_XMAX; address XMIN = (address)_XMIN; address INF = (address)_INF; address ZERO = (address)_ZERO; address ONE_val = (address)_ONE_val; bind(start); subq(rsp, 24); movsd(Address(rsp, 8), xmm0); unpcklpd(xmm0, xmm0); movdqu(xmm1, ExternalAddress(cv)); // 0x652b82feUL, 0x40571547UL, 0x652b82feUL, 0x40571547UL movdqu(xmm6, ExternalAddress(Shifter)); // 0x00000000UL, 0x43380000UL, 0x00000000UL, 0x43380000UL movdqu(xmm2, ExternalAddress(16+cv)); // 0xfefa0000UL, 0x3f862e42UL, 0xfefa0000UL, 0x3f862e42UL movdqu(xmm3, ExternalAddress(32+cv)); // 0xbc9e3b3aUL, 0x3d1cf79aUL, 0xbc9e3b3aUL, 0x3d1cf79aUL pextrw(eax, xmm0, 3); andl(eax, 32767); movl(edx, 16527); subl(edx, eax); subl(eax, 15504); orl(edx, eax); cmpl(edx, INT_MIN); jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2); mulpd(xmm1, xmm0); addpd(xmm1, xmm6); movapd(xmm7, xmm1); subpd(xmm1, xmm6); mulpd(xmm2, xmm1); movdqu(xmm4, ExternalAddress(64+cv)); // 0xe3289860UL, 0x3f56c15cUL, 0x555b9e25UL, 0x3fa55555UL mulpd(xmm3, xmm1); movdqu(xmm5, ExternalAddress(80+cv)); // 0xc090cf0fUL, 0x3f811115UL, 0x55548ba1UL, 0x3fc55555UL subpd(xmm0, xmm2); movdl(eax, xmm7); movl(ecx, eax); andl(ecx, 63); shll(ecx, 4); sarl(eax, 6); movl(edx, eax); movdqu(xmm6, ExternalAddress(mmask)); // 0xffffffc0UL, 0x00000000UL, 0xffffffc0UL, 0x00000000UL pand(xmm7, xmm6); movdqu(xmm6, ExternalAddress(bias)); // 0x0000ffc0UL, 0x00000000UL, 0x0000ffc0UL, 0x00000000UL paddq(xmm7, xmm6); psllq(xmm7, 46); subpd(xmm0, xmm3); lea(tmp, ExternalAddress(Tbl_addr)); movdqu(xmm2, Address(ecx,tmp)); mulpd(xmm4, xmm0); movapd(xmm6, xmm0); movapd(xmm1, xmm0); mulpd(xmm6, xmm6); mulpd(xmm0, xmm6); addpd(xmm5, xmm4); mulsd(xmm0, xmm6); mulpd(xmm6, ExternalAddress(48+cv)); // 0xfffffffeUL, 0x3fdfffffUL, 0xfffffffeUL, 0x3fdfffffUL addsd(xmm1, xmm2); unpckhpd(xmm2, xmm2); mulpd(xmm0, xmm5); addsd(xmm1, xmm0); por(xmm2, xmm7); unpckhpd(xmm0, xmm0); addsd(xmm0, xmm1); addsd(xmm0, xmm6); addl(edx, 894); cmpl(edx, 1916); jcc (Assembler::above, L_2TAG_PACKET_1_0_2); mulsd(xmm0, xmm2); addsd(xmm0, xmm2); jmp (B1_5); bind(L_2TAG_PACKET_1_0_2); xorpd(xmm3, xmm3); movdqu(xmm4, ExternalAddress(ALLONES)); // 0xffffffffUL, 0xffffffffUL, 0xffffffffUL, 0xffffffffUL movl(edx, -1022); subl(edx, eax); movdl(xmm5, edx); psllq(xmm4, xmm5); movl(ecx, eax); sarl(eax, 1); pinsrw(xmm3, eax, 3); movdqu(xmm6, ExternalAddress(ebias)); // 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x3ff00000UL psllq(xmm3, 4); psubd(xmm2, xmm3); mulsd(xmm0, xmm2); cmpl(edx, 52); jcc(Assembler::greater, L_2TAG_PACKET_2_0_2); pand(xmm4, xmm2); paddd(xmm3, xmm6); subsd(xmm2, xmm4); addsd(xmm0, xmm2); cmpl(ecx, 1023); jcc(Assembler::greaterEqual, L_2TAG_PACKET_3_0_2); pextrw(ecx, xmm0, 3); andl(ecx, 32768); orl(edx, ecx); cmpl(edx, 0); jcc(Assembler::equal, L_2TAG_PACKET_4_0_2); movapd(xmm6, xmm0); addsd(xmm0, xmm4); mulsd(xmm0, xmm3); pextrw(ecx, xmm0, 3); andl(ecx, 32752); cmpl(ecx, 0); jcc(Assembler::equal, L_2TAG_PACKET_5_0_2); jmp(B1_5); bind(L_2TAG_PACKET_5_0_2); mulsd(xmm6, xmm3); mulsd(xmm4, xmm3); movdqu(xmm0, xmm6); pxor(xmm6, xmm4); psrad(xmm6, 31); pshufd(xmm6, xmm6, 85); psllq(xmm0, 1); psrlq(xmm0, 1); pxor(xmm0, xmm6); psrlq(xmm6, 63); paddq(xmm0, xmm6); paddq(xmm0, xmm4); movl(Address(rsp,0), 15); jmp(L_2TAG_PACKET_6_0_2); bind(L_2TAG_PACKET_4_0_2); addsd(xmm0, xmm4); mulsd(xmm0, xmm3); jmp(B1_5); bind(L_2TAG_PACKET_3_0_2); addsd(xmm0, xmm4); mulsd(xmm0, xmm3); pextrw(ecx, xmm0, 3); andl(ecx, 32752); cmpl(ecx, 32752); jcc(Assembler::aboveEqual, L_2TAG_PACKET_7_0_2); jmp(B1_5); bind(L_2TAG_PACKET_2_0_2); paddd(xmm3, xmm6); addpd(xmm0, xmm2); mulsd(xmm0, xmm3); movl(Address(rsp,0), 15); jmp(L_2TAG_PACKET_6_0_2); bind(L_2TAG_PACKET_8_0_2); cmpl(eax, 2146435072); jcc(Assembler::aboveEqual, L_2TAG_PACKET_9_0_2); movl(eax, Address(rsp,12)); cmpl(eax, INT_MIN); jcc(Assembler::aboveEqual, L_2TAG_PACKET_10_0_2); movsd(xmm0, ExternalAddress(XMAX)); // 0xffffffffUL, 0x7fefffffUL mulsd(xmm0, xmm0); bind(L_2TAG_PACKET_7_0_2); movl(Address(rsp,0), 14); jmp(L_2TAG_PACKET_6_0_2); bind(L_2TAG_PACKET_10_0_2); movsd(xmm0, ExternalAddress(XMIN)); // 0x00000000UL, 0x00100000UL mulsd(xmm0, xmm0); movl(Address(rsp,0), 15); jmp(L_2TAG_PACKET_6_0_2); bind(L_2TAG_PACKET_9_0_2); movl(edx, Address(rsp,8)); cmpl(eax, 2146435072); jcc(Assembler::above, L_2TAG_PACKET_11_0_2); cmpl(edx, 0); jcc(Assembler::notEqual, L_2TAG_PACKET_11_0_2); movl(eax, Address(rsp,12)); cmpl(eax, 2146435072); jcc(Assembler::notEqual, L_2TAG_PACKET_12_0_2); movsd(xmm0, ExternalAddress(INF)); // 0x00000000UL, 0x7ff00000UL jmp(B1_5); bind(L_2TAG_PACKET_12_0_2); movsd(xmm0, ExternalAddress(ZERO)); // 0x00000000UL, 0x00000000UL jmp(B1_5); bind(L_2TAG_PACKET_11_0_2); movsd(xmm0, Address(rsp, 8)); addsd(xmm0, xmm0); jmp(B1_5); bind(L_2TAG_PACKET_0_0_2); movl(eax, Address(rsp, 12)); andl(eax, 2147483647); cmpl(eax, 1083179008); jcc(Assembler::aboveEqual, L_2TAG_PACKET_8_0_2); movsd(Address(rsp, 8), xmm0); addsd(xmm0, ExternalAddress(ONE_val)); // 0x00000000UL, 0x3ff00000UL jmp(B1_5); bind(L_2TAG_PACKET_6_0_2); movq(Address(rsp, 16), xmm0); bind(B1_3); movq(xmm0, Address(rsp, 16)); bind(B1_5); addq(rsp, 24); }
/*sleep:タスクを休眠状態にしてタスクスイッチをする*/ void sleep(int ch){ addq(&semaphore[ch].task_list,curr_task); sched(); swtch(); return ; }
int main() { int i,j,n,item,count=0; printf("enter no. of nodes"); scanf("%d",&n); int a[n][n]; int color[n]; int parent[n]; // int out[n]; for(i=0;i<n;i++) { color[i]=-1; parent[i]=-1; } printf("enter adjacency matrix\n"); for(i=0;i<n;i++) { printf("\nenter adjacency matrix value for node %d\n",i); for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } printf("\nmatrix\n"); for(i=0;i<n;i++) printf("\t%d",i); for(i=0;i<n;i++) { printf("\n%d\t",i); for(j=0;j<n;j++) { printf("%d\t",a[i][j]); } } printf("\nenter starting node"); scanf("%d",&item); //printf("hello"); struct queue q1; q1.front=-1; q1.rear=-1; addq(&q1,item); color[item]=0; //printf("hello"); while(1) { item=delq(&q1); if(item==-10) { printf("NULL\n"); break; } else printf("%d(%d,%d)->",item,count,parent[item]); for(i=0;i<n;i++) { if(a[item][i]==1&&color[i]==-1) { addq(&q1,i); color[i]=0; parent[i]=item; } } // out[count]=item; color[item]=1; count++; } /* for(i=0;i<n;i++) printf("%d|%d\t",i,color[i]); */ // for(i=0;i<n;i++) // printf("%d,%d->",out[i],i); return 0; }
/* \fcnfh Read abundances and pressure for each isotope and radius @returns number of radius point */ int readatmfile(FILE *fp, /* File */ struct transit *tr, /* transit info */ struct atm_data *at, /* atmosphere info */ prop_samp *rads, /* radius sampling */ int nrad) /* number of allocated radii, note that is not returned updated */ { //find abundance related quantities for each radius int lines=at->begline; PREC_NREC r=0; PREC_RES tmp; char rc; float allowq=1-tr->allowrq; double sumq; char line[maxline],*lp,*lp2; prop_isov *isov=at->isov; int *isoeq=at->isoeq; struct isotopes *iso=tr->ds.iso; enum isodo *isodo=at->isodo; int i,neiso=iso->n_e; fseek(fp,at->begpos,SEEK_SET); while(1){ //reallocate if necessary if(r==nrad){ nrad<<=1; rads->v=(PREC_ATM *)realloc(rads->v,nrad*sizeof(PREC_ATM)); at->atm.t= (PREC_ATM *)realloc(at->atm.t,nrad*sizeof(PREC_ATM)); at->atm.p= (PREC_ATM *)realloc(at->atm.p,nrad*sizeof(PREC_ATM)); at->mm=(double *)realloc(at->mm,nrad*sizeof(double)); for(i=0;i<neiso;i++){ isov[i].d=(PREC_ATM *)realloc(isov[i].d, nrad*sizeof(PREC_ATM)); isov[i].q=(PREC_ATM *)realloc(isov[i].q, nrad*sizeof(PREC_ATM)); isov[i].n=nrad; } } //Skip comments and read next line while((rc=fgetupto_err(lp=line,maxline,fp,&atmerr,atmfilename,lines++)) =='#'||rc=='\n'); //if it is end of file, stop loop if(!rc) break; tmp=rads->v[r]=strtod(lp,&lp2)+zerorad; checkposvalue(tmp,1,lines); if(lp==lp2) invalidfield(line, lines, 1, "radius"); tmp=at->atm.p[r]=strtod(lp2,&lp); checkposvalue(tmp,2,lines); if(lp==lp2) invalidfield(line, lines, 2, "pressure"); tmp=at->atm.t[r]=strtod(lp,&lp2); checkposvalue(tmp,3,lines); if(lp==lp2) invalidfield(line, lines, 3, "temperature"); //variables to be used by factor (except ieq which is general) int ieq, feq; double ref; _Bool otherfct[neiso]; memset(otherfct,0,sizeof(otherfct)); //now read abundances for every isotope, but don't process //factorized elements. Because they might be proportional to a fixed //element which is set below. for(i=0;i<at->n_aiso;i++){ ieq=isoeq[i]; switch(isodo[i]){ case fixed: if(!r){ isov[ieq].q[0]=askforposd(" %s abundance for isotope %s: " ,at->mass?"Mass":"Number" ,iso->isof[ieq].n); if(isov[ieq].q[0]>=1){ fprintf(stderr," Abundance for any single isotope has to be" " less than one\n Try Again!\n"); i--; } } else isov[ieq].q[r]=isov[ieq].q[0]; break; case factor: //don't process yet those that will use whatever abundance is left //to complete unity feq=ieq; ieq=isoprop[feq].eq; if(strcasecmp(isoprop[feq].t,"other")==0){ otherfct[ieq]=1; continue; } //find the reference value ref=findfactq(isoprop[feq].t,iso->isof,isov,neiso,r); isov[ieq].q[r]=isoprop[feq].f*ref; break; default: transiterror(TERR_CRITICAL, "Trying to read isotope in readatmfile() which is\n" "not 'fixed', 'atmfile', 'ignored', nor 'factor'.\n" ); exit(EXIT_FAILURE); break; case atmfile: case ignore: transitASSERT(ieq<0 || (isodo[i]==ignore&&ieq>=nfonly) || (isodo[i]!=ignore&&ieq>=iso->n_e), "Assertion failed in file %s, line %i: %i!=[0,%i].\n" " Fonly: %i\n" ,__FILE__, __LINE__, isoeq[i], isodo[i]==ignore?nfonly:iso->n_e-1, isodo[i]==ignore); //Read the abundance of the new element. There are two ways: //If processing one of the factor only elements if(isodo[i]==ignore) tmp=fonly[ieq].q=strtod(lp2,&lp); //otherwise if this element is going to be considered else tmp=isov[ieq].q[r]=strtod(lp2,&lp); checkposvalue(tmp, i+4, lines); if(lp==lp2) invalidfield(line, lines, 4+i, "isotope abundance"); lp2=lp; break; } } //process factorized elements that will take care of the rest of the //atmosphere ref=1-addq(isov,iso->isodo,otherfct,neiso,r); for(i=0;i<at->n_aiso;i++) if(isodo[i]==factor){ feq=isoeq[i]; ieq=isoprop[feq].eq; if(otherfct[ieq]) isov[ieq].q[r]=isoprop[feq].f*ref; } //calculate mean molecular mass and check whether abundances add up //correctly, up to round off error of course sumq=checkaddmm(at->mm+r,r,isov,iso->isof,neiso,at->mass,iso->isodo); if((int)(sumq*ROUNDOFF+0.5)<(int)(allowq*ROUNDOFF+0.5)) transiterror(TERR_WARNING, "In radius %g(%i: %g in file), abundances\n" "don't add up to 1: %.9g\n" ,at->rads.v[r],r,at->rads.v[r]-zerorad,sumq); //Calculate densities for(i=0;i<neiso;i++) isov[i].d[r]=stateeqnford(at->mass, isov[i].q[r], at->mm[r], iso->isof[i].m, at->atm.p[r]*at->atm.pfct, at->atm.t[r]*at->atm.tfct); r++; } //reduce array to the right number of radii rads->n=nrad=r; rads->v=(PREC_ATM *)realloc(rads->v,nrad*sizeof(PREC_ATM)); at->atm.t= (PREC_ATM *)realloc(at->atm.t,nrad*sizeof(PREC_ATM)); at->atm.p= (PREC_ATM *)realloc(at->atm.p,nrad*sizeof(PREC_ATM)); at->mm=(double *)realloc(at->mm,nrad*sizeof(double)); for(i=0;i<neiso;i++){ isov[i].d=(PREC_ATM *)realloc(isov[i].d, nrad*sizeof(PREC_ATM)); isov[i].q=(PREC_ATM *)realloc(isov[i].q, nrad*sizeof(PREC_ATM)); isov[i].n=nrad; } //free arrays that were used only to get the factorizing elements free(fonly); return nrad; }
int main(int argc, char **argv) { char *prog = argv[0]; int port; int serverd; /* socket descriptor for receiving new connections */ int ret; //return value int request_id; request_id = 0; pthread_t tHandles[NUMTHREADS + 1]; work_queue.start = 0; work_queue.end = &work_queue.start; pthread_mutex_init(&qMutex, NULL); pthread_mutex_init(&lMutex, NULL); pthread_cond_init(&qEmpty, NULL); int id[NUMTHREADS]; int i; for (i = 0; i < NUMTHREADS; i++) { id[i] = i; } FILE *logFile; logFile = fopen("log.txt", "a"); if (argc < 2) { printf("Usage: %s port\n", prog); return 1; } port = atoi(argv[1]); if ((serverd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("%s ", prog); perror("socket()"); return 1; } struct sockaddr_in sa; sa.sin_family = AF_INET; sa.sin_port = htons(port); sa.sin_addr.s_addr = INADDR_ANY; if (bind(serverd, (struct sockaddr*) &sa, sizeof(sa)) < 0) { printf("%s ", prog); perror("bind()"); return 1; } if (listen(serverd, 5) < 0) { printf("%s ", prog); perror("listen()"); return 1; } for (i = 0; i < 1; i++) { pthread_create(&tHandles[i], NULL, process_requests, (void *)&id[i]); } struct sockaddr_in ca; int size = sizeof(struct sockaddr); int clientd; while(true) { printf("Waiting for a incoming connection...\n"); if ((clientd = accept(serverd, (struct sockaddr*) &ca, &size)) < 0) { perror("accept()"); printf("error in accept\n"); return NULL; } request_id++; struct tdata td = {clientd, request_id, logFile, NULL}; addq(&td); } for (i = 0; i < NUMTHREADS + 1; i++) { printf("Joining thread number %d\n", i); pthread_join(tHandles[i], NULL); } if ((ret = close(serverd)) < 0) { printf("%s ", prog); perror("close(serverd)"); return 1; } pthread_mutex_destroy(&lMutex); pthread_mutex_destroy(&qMutex); pthread_cond_destroy(&qEmpty); fclose(logFile); return 0; }
void MacroAssembler::fast_log(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp1, Register tmp2) { Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2; Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2; Label L_2TAG_PACKET_8_0_2; Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start; assert_different_registers(tmp1, tmp2, eax, ecx, edx); jmp(start); address L_tbl = (address)_L_tbl; address log2 = (address)_log2; address coeff = (address)_coeff; bind(start); subq(rsp, 24); movsd(Address(rsp, 0), xmm0); mov64(rax, 0x3ff0000000000000); movdq(xmm2, rax); mov64(rdx, 0x77f0000000000000); movdq(xmm3, rdx); movl(ecx, 32768); movdl(xmm4, rcx); mov64(tmp1, 0xffffe00000000000); movdq(xmm5, tmp1); movdqu(xmm1, xmm0); pextrw(eax, xmm0, 3); por(xmm0, xmm2); movl(ecx, 16352); psrlq(xmm0, 27); lea(tmp2, ExternalAddress(L_tbl)); psrld(xmm0, 2); rcpps(xmm0, xmm0); psllq(xmm1, 12); pshufd(xmm6, xmm5, 228); psrlq(xmm1, 12); subl(eax, 16); cmpl(eax, 32736); jcc(Assembler::aboveEqual, L_2TAG_PACKET_0_0_2); bind(L_2TAG_PACKET_1_0_2); paddd(xmm0, xmm4); por(xmm1, xmm3); movdl(edx, xmm0); psllq(xmm0, 29); pand(xmm5, xmm1); pand(xmm0, xmm6); subsd(xmm1, xmm5); mulpd(xmm5, xmm0); andl(eax, 32752); subl(eax, ecx); cvtsi2sdl(xmm7, eax); mulsd(xmm1, xmm0); movq(xmm6, ExternalAddress(log2)); // 0xfefa3800UL, 0x3fa62e42UL movdqu(xmm3, ExternalAddress(coeff)); // 0x92492492UL, 0x3fc24924UL, 0x00000000UL, 0xbfd00000UL subsd(xmm5, xmm2); andl(edx, 16711680); shrl(edx, 12); movdqu(xmm0, Address(tmp2, edx)); movdqu(xmm4, ExternalAddress(16 + coeff)); // 0x3d6fb175UL, 0xbfc5555eUL, 0x55555555UL, 0x3fd55555UL addsd(xmm1, xmm5); movdqu(xmm2, ExternalAddress(32 + coeff)); // 0x9999999aUL, 0x3fc99999UL, 0x00000000UL, 0xbfe00000UL mulsd(xmm6, xmm7); movddup(xmm5, xmm1); mulsd(xmm7, ExternalAddress(8 + log2)); // 0x93c76730UL, 0x3ceef357UL mulsd(xmm3, xmm1); addsd(xmm0, xmm6); mulpd(xmm4, xmm5); mulpd(xmm5, xmm5); movddup(xmm6, xmm0); addsd(xmm0, xmm1); addpd(xmm4, xmm2); mulpd(xmm3, xmm5); subsd(xmm6, xmm0); mulsd(xmm4, xmm1); pshufd(xmm2, xmm0, 238); addsd(xmm1, xmm6); mulsd(xmm5, xmm5); addsd(xmm7, xmm2); addpd(xmm4, xmm3); addsd(xmm1, xmm7); mulpd(xmm4, xmm5); addsd(xmm1, xmm4); pshufd(xmm5, xmm4, 238); addsd(xmm1, xmm5); addsd(xmm0, xmm1); jmp(B1_5); bind(L_2TAG_PACKET_0_0_2); movq(xmm0, Address(rsp, 0)); movq(xmm1, Address(rsp, 0)); addl(eax, 16); cmpl(eax, 32768); jcc(Assembler::aboveEqual, L_2TAG_PACKET_2_0_2); cmpl(eax, 16); jcc(Assembler::below, L_2TAG_PACKET_3_0_2); bind(L_2TAG_PACKET_4_0_2); addsd(xmm0, xmm0); jmp(B1_5); bind(L_2TAG_PACKET_5_0_2); jcc(Assembler::above, L_2TAG_PACKET_4_0_2); cmpl(edx, 0); jcc(Assembler::above, L_2TAG_PACKET_4_0_2); jmp(L_2TAG_PACKET_6_0_2); bind(L_2TAG_PACKET_3_0_2); xorpd(xmm1, xmm1); addsd(xmm1, xmm0); movdl(edx, xmm1); psrlq(xmm1, 32); movdl(ecx, xmm1); orl(edx, ecx); cmpl(edx, 0); jcc(Assembler::equal, L_2TAG_PACKET_7_0_2); xorpd(xmm1, xmm1); movl(eax, 18416); pinsrw(xmm1, eax, 3); mulsd(xmm0, xmm1); movdqu(xmm1, xmm0); pextrw(eax, xmm0, 3); por(xmm0, xmm2); psrlq(xmm0, 27); movl(ecx, 18416); psrld(xmm0, 2); rcpps(xmm0, xmm0); psllq(xmm1, 12); pshufd(xmm6, xmm5, 228); psrlq(xmm1, 12); jmp(L_2TAG_PACKET_1_0_2); bind(L_2TAG_PACKET_2_0_2); movdl(edx, xmm1); psrlq(xmm1, 32); movdl(ecx, xmm1); addl(ecx, ecx); cmpl(ecx, -2097152); jcc(Assembler::aboveEqual, L_2TAG_PACKET_5_0_2); orl(edx, ecx); cmpl(edx, 0); jcc(Assembler::equal, L_2TAG_PACKET_7_0_2); bind(L_2TAG_PACKET_6_0_2); xorpd(xmm1, xmm1); xorpd(xmm0, xmm0); movl(eax, 32752); pinsrw(xmm1, eax, 3); mulsd(xmm0, xmm1); movl(Address(rsp, 16), 3); jmp(L_2TAG_PACKET_8_0_2); bind(L_2TAG_PACKET_7_0_2); xorpd(xmm1, xmm1); xorpd(xmm0, xmm0); movl(eax, 49136); pinsrw(xmm0, eax, 3); divsd(xmm0, xmm1); movl(Address(rsp, 16), 2); bind(L_2TAG_PACKET_8_0_2); movq(Address(rsp, 8), xmm0); bind(B1_3); movq(xmm0, Address(rsp, 8)); bind(B1_5); addq(rsp, 24); }