static void send_snm_req(n2n_sn_t *sss, n2n_sock_t *sn, int req_communities, snm_comm_name_t *communities, int communities_num) { uint8_t pktbuf[N2N_PKT_BUF_SIZE]; size_t idx; n2n_sock_str_t sockbuf; snm_hdr_t hdr = { SNM_TYPE_REQ_LIST_MSG, 0, ++sss->seq_num }; n2n_SNM_REQ_t req = { 0, NULL }; if (sn_is_loopback(sn, sss->sn_port)) return; SET_S(hdr.flags); if (req_communities) { SET_C(hdr.flags); } else if (communities) { SET_N(hdr.flags); req.comm_num = communities_num & 0xFFFF; req.comm_ptr = communities; } idx = 0; encode_SNM_REQ(pktbuf, &idx, &hdr, &req); traceEvent(TRACE_INFO, "send SNM_REQ to %s", sock_to_cstr(sockbuf, sn)); sendto_sock(sss->sn_sock, sn, pktbuf, idx); }
static void opCVTS(void) { float val1=u2f(GETREG(GET1)); SET_OV(0); SET_Z((val1==0.0)?1:0); SET_S((val1<0.0)?1:0); SETREG(GET2,(INT32)val1); }
static void opCVTW(void) { //TODO: CY float val1=GETREG(GET1); SET_OV(0); SET_Z((val1==0.0)?1:0); SET_S((val1<0.0)?1:0); SETREG(GET2,f2u(val1)); }
static void opCMPF(void) { float val1=u2f(GETREG(GET1)); float val2=u2f(GETREG(GET2)); SET_OV(0); SET_CY((val2<val1)?1:0); val2-=val1; SET_Z((val2==0.0)?1:0); SET_S((val2<0.0)?1:0); }
static void opMULF(void) { //TODO: CY float val1=u2f(GETREG(GET1)); float val2=u2f(GETREG(GET2)); SET_OV(0); val2*=val1; SET_Z((val2==0.0)?1:0); SET_S((val2<0.0)?1:0); SETREG(GET2,f2u(val2)); }
static void opDIVF(void) { //TODO: CY float val1=u2f(GETREG(GET1)); float val2=u2f(GETREG(GET2)); SET_OV(0); if(val1!=0) val2/=val1; SET_Z((val2==0.0)?1:0); SET_S((val2<0.0)?1:0); SETREG(GET2,f2u(val2)); }
static UINT32 opXORI(void) // xori imm16,r1,r2 { UINT32 op1=GETREG(GET1); UINT32 op2=R_OP(PC); PC+=2; op2=UI16(op2); op2^=op1; CHECK_ZS(op2); SET_OV(0); SET_S(0); SETREG(GET2,op2); return clkIF; }