void RSP_VNAND(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t result = rsp_vnand(LOAD_VS(), LOAD_VT()); write_acc_lo(acc, result); STORE_RESULT(); }
Nd4jStatus LegacyScalarOp::validateAndExecute(Context &block) { auto x = INPUT_VARIABLE(0); int offset = 0; auto z = OUTPUT_VARIABLE(0); int opNum = block.opNum() < 0 ? this->_opNum : block.opNum(); if (block.width() > 1) { auto y = INPUT_VARIABLE(1); y->printIndexedBuffer("scalar"); // FIXME NativeOpExcutioner::execScalar(opNum, x->getBuffer(), x->getShapeInfo(), z->getBuffer(), z->getShapeInfo(), y->buffer(), y->shapeInfo(), block.getTArguments()->data()); } else if (block.getTArguments()->size() > 0) { auto y = NDArrayFactory::create(x->dataType(), T_ARG(0), block.getWorkspace()); offset++; // FIXME NativeOpExcutioner::execScalar(opNum, x->getBuffer(), x->getShapeInfo(), z->getBuffer(), z->getShapeInfo(), y.buffer(), y.shapeInfo(), block.getTArguments()->data() + offset); } else { // FIXME NativeOpExcutioner::execScalar(opNum, x->getBuffer(), x->getShapeInfo(), z->getBuffer(), z->getShapeInfo(), _scalar.buffer(), _scalar.shapeInfo(), block.getTArguments()->data()); } STORE_RESULT(*z); return Status::OK(); }
// // VMOV // void RSP_VMOV(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; unsigned de = vs & 0x7; write_acc_lo(acc, LOAD_VT()); __m128i result = rsp_vmov(rsp, vt, e, vd, de); STORE_RESULT(); }
static void rlf(void) { R.ALU = GET_REGFILE(ADDR); R.ALU <<= 1; if (R.STATUS & C_FLAG) R.ALU |= 1; if (GET_REGFILE(ADDR) & 0x80) SET(C_FLAG); else CLR(C_FLAG); STORE_RESULT(ADDR, R.ALU); }
static void rrf(void) { R.ALU = GET_REGFILE(ADDR); R.ALU >>= 1; if (R.STATUS & C_FLAG) R.ALU |= 0x80; if (GET_REGFILE(ADDR) & 1) SET(C_FLAG); else CLR(C_FLAG); STORE_RESULT(ADDR, R.ALU); }
static void subwf(void) { old_data = GET_REGFILE(ADDR); R.ALU = old_data - R.W; STORE_RESULT(ADDR, R.ALU); CALCULATE_Z_FLAG(); CALCULATE_SUB_CARRY(); CALCULATE_SUB_DIGITCARRY(); }
void pic16c62x_device::subwf() { m_old_data = GET_REGFILE(ADDR); m_ALU = m_old_data - m_W; STORE_RESULT(ADDR, m_ALU); CALCULATE_Z_FLAG(); CALCULATE_SUB_CARRY(); CALCULATE_SUB_DIGITCARRY(); }
void pic16c62x_device::rrf() { m_ALU = GET_REGFILE(ADDR); m_ALU >>= 1; if (STATUS & C_FLAG) m_ALU |= 0x80; if (GET_REGFILE(ADDR) & 1) SET(STATUS, C_FLAG); else CLR(STATUS, C_FLAG); STORE_RESULT(ADDR, m_ALU); }
static void addwf(void) { old_data = GET_REGFILE(ADDR); R.ALU = old_data + R.W; STORE_RESULT(ADDR, R.ALU); CALCULATE_Z_FLAG(); CALCULATE_ADD_CARRY(); CALCULATE_ADD_DIGITCARRY(); }
void pic16c62x_device::incfsz() { m_ALU = GET_REGFILE(ADDR) + 1; STORE_RESULT(ADDR, m_ALU); if (m_ALU == 0) { m_PC++ ; PCL = m_PC & 0xff; m_inst_cycles += 1; /* Add NOP cycles */ } }
// // VADDC // void RSP_VADDC(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t sn; rsp_vect_t result = rsp_vaddc(LOAD_VS(), LOAD_VT(), rsp_vzero(), &sn); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); // TODO: Confirm. write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, sn); write_acc_lo(acc, result); STORE_RESULT(); }
static void incfsz(void) { R.ALU = GET_REGFILE(ADDR) + 1; STORE_RESULT(ADDR, R.ALU); if (R.ALU == 0) { R.PC++ ; R.PCL = R.PC & 0xff; inst_cycles += cycles_000_other[0]; /* Add NOP cycles */ } }
void RSP_VRSQ(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; unsigned de = vs & 0x7; e &= 0x7; write_acc_lo(acc, LOAD_VT()); rsp->cp2.dp_flag = 0; rsp_vect_t result = rsp_vrcp_vrsq<true>(rsp, 0, vt, e, vd, de); STORE_RESULT(); }
void RSP_VMULU(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t acc_lo, acc_md, acc_hi, result; result = rsp_vmulf_vmulu<true>(LOAD_VS(), LOAD_VT(), rsp_vzero(), &acc_lo, &acc_md, &acc_hi); write_acc_lo(acc, acc_lo); write_acc_md(acc, acc_md); write_acc_hi(acc, acc_hi); STORE_RESULT(); }
// // VMRG // void RSP_VMRG(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t le; le = read_vcc_lo(rsp->cp2.flags[RSP::RSP_VCC].e); rsp_vect_t result = rsp_vmrg(LOAD_VS(), LOAD_VT(), le); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_acc_lo(acc, result); STORE_RESULT(); }
// // VSUBC // void RSP_VSUBC(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t eq, sn; rsp_vect_t result = rsp_vsubc(LOAD_VS(), LOAD_VT(), rsp_vzero(), &eq, &sn); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, eq); write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, sn); write_acc_lo(acc, result); STORE_RESULT(); }
// // VADD // void RSP_VADD(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t carry, acc_lo; carry = read_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e); rsp_vect_t result = rsp_vadd(LOAD_VS(), LOAD_VT(), carry, &acc_lo); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_acc_lo(acc, acc_lo); STORE_RESULT(); }
void RSP_VRSQH(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; unsigned de = vs & 0x7; e &= 0x7; write_acc_lo(acc, LOAD_VT()); // Specify double-precision for VRCPL on the next pass. rsp->cp2.dp_flag = 1; rsp_vect_t result = rsp_vdivh(rsp, vt, e, vd, de); STORE_RESULT(); }
// // VSAR // void RSP_VSAR(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t result; switch (e) { case 8: result = read_acc_hi(acc); break; case 9: result = read_acc_md(acc); break; case 10: result = read_acc_lo(acc); break; default: result = rsp_vzero(); break; } STORE_RESULT(); }
// // VMACF // VMACU // void RSP_VMACF(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t acc_lo, acc_md, acc_hi, result; acc_lo = read_acc_lo(acc); acc_md = read_acc_md(acc); acc_hi = read_acc_hi(acc); result = rsp_vmacf_vmacu<false>(LOAD_VS(), LOAD_VT(), rsp_vzero(), &acc_lo, &acc_md, &acc_hi); write_acc_lo(acc, acc_lo); write_acc_md(acc, acc_md); write_acc_hi(acc, acc_hi); STORE_RESULT(); }
// // VCH // void RSP_VCH(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t ge, le, sign, eq, vce; rsp_vect_t result = rsp_vch(LOAD_VS(), LOAD_VT(), rsp_vzero(), &ge, &le, &eq, &sign, &vce); write_vcc_hi(rsp->cp2.flags[RSP::RSP_VCC].e, ge); write_vcc_lo(rsp->cp2.flags[RSP::RSP_VCC].e, le); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, eq); write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, sign); write_vce (rsp->cp2.flags[RSP::RSP_VCE].e, vce); write_acc_lo(acc, result); STORE_RESULT(); }
Nd4jStatus LegacyPairwiseTransformOp::validateAndExecute(Context &block) { auto x = INPUT_VARIABLE(0); auto y = INPUT_VARIABLE(1); auto z = OUTPUT_VARIABLE(0); if (!x->isSameShape(y)) { std::string sx = ShapeUtils::shapeAsString(x); std::string sy = ShapeUtils::shapeAsString(y); REQUIRE_TRUE(x->isSameShape(y) || y->isScalar(), 0, "Node_%i: For Pairwise transforms shapes of both operands should be equal but got %s vs %s", block.getNodeId(), sx.c_str(), sy.c_str()); } int opNum = block.opNum() < 0 ? this->_opNum : block.opNum(); NativeOpExcutioner::execPairwiseTransform(opNum, x->getBuffer(), x->getShapeInfo(), y->getBuffer(), y->getShapeInfo(), z->getBuffer(), z->getShapeInfo(), block.getTArguments()->data()); STORE_RESULT(*z); return ND4J_STATUS_OK; }
// // VCR // void RSP_VCR(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t ge, le; rsp_vect_t result = rsp_vcr(LOAD_VS(), LOAD_VT(), rsp_vzero(), &ge, &le); #ifdef INTENSE_DEBUG for (unsigned i = 0; i < 8; i++) fprintf(stderr, "VD[%d] = %d\n", i, reinterpret_cast<int16_t*>(&result)[i]); #endif write_vcc_hi(rsp->cp2.flags[RSP::RSP_VCC].e, ge); write_vcc_lo(rsp->cp2.flags[RSP::RSP_VCC].e, le); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_vce (rsp->cp2.flags[RSP::RSP_VCE].e, rsp_vzero()); write_acc_lo(acc, result); STORE_RESULT(); }
// // VCL // void RSP_VCL(RSP::CPUState *rsp, unsigned vd, unsigned vs, unsigned vt, unsigned e) { uint16_t *acc = rsp->cp2.acc.e; rsp_vect_t ge, le, eq, sign, vce; ge = read_vcc_hi(rsp->cp2.flags[RSP::RSP_VCC].e); le = read_vcc_lo(rsp->cp2.flags[RSP::RSP_VCC].e); eq = read_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e); sign = read_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e); vce = read_vce(rsp->cp2.flags[RSP::RSP_VCE].e); rsp_vect_t result = rsp_vcl(LOAD_VS(), LOAD_VT(), rsp_vzero(), &ge, &le, eq, sign, vce); write_vcc_hi(rsp->cp2.flags[RSP::RSP_VCC].e, ge); write_vcc_lo(rsp->cp2.flags[RSP::RSP_VCC].e, le); write_vco_hi(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_vco_lo(rsp->cp2.flags[RSP::RSP_VCO].e, rsp_vzero()); write_vce (rsp->cp2.flags[RSP::RSP_VCE].e, rsp_vzero()); write_acc_lo(acc, result); STORE_RESULT(); }
void pic16c62x_device::xorwf() { m_ALU = GET_REGFILE(ADDR) ^ m_W; STORE_RESULT(ADDR, m_ALU); CALCULATE_Z_FLAG(); }
void pic16c62x_device::swapf() { m_ALU = ((GET_REGFILE(ADDR) << 4) & 0xf0); m_ALU |= ((GET_REGFILE(ADDR) >> 4) & 0x0f); STORE_RESULT(ADDR, m_ALU); }
static void swapf(void) { R.ALU = ((GET_REGFILE(ADDR) << 4) & 0xf0); R.ALU |= ((GET_REGFILE(ADDR) >> 4) & 0x0f); STORE_RESULT(ADDR, R.ALU); }
static void xorwf(void) { R.ALU = GET_REGFILE(ADDR) ^ R.W; STORE_RESULT(ADDR, R.ALU); CALCULATE_Z_FLAG(); }
void pic16c62x_device::comf() { m_ALU = (UINT8)(~(GET_REGFILE(ADDR))); STORE_RESULT(ADDR, m_ALU); CALCULATE_Z_FLAG(); }
void pic16c62x_device::incf() { m_ALU = GET_REGFILE(ADDR) + 1; STORE_RESULT(ADDR, m_ALU); CALCULATE_Z_FLAG(); }