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();
}
Example #4
0
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);
}
Example #5
0
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);
}
Example #6
0
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();
}
Example #7
0
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();
}
Example #8
0
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);
}
Example #9
0
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();
}
Example #10
0
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();
}
Example #12
0
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();
}
Example #25
0
void pic16c62x_device::xorwf()
{
	m_ALU = GET_REGFILE(ADDR) ^ m_W;
	STORE_RESULT(ADDR, m_ALU);
	CALCULATE_Z_FLAG();
}
Example #26
0
void pic16c62x_device::swapf()
{
	m_ALU  = ((GET_REGFILE(ADDR) << 4) & 0xf0);
	m_ALU |= ((GET_REGFILE(ADDR) >> 4) & 0x0f);
	STORE_RESULT(ADDR, m_ALU);
}
Example #27
0
static void swapf(void)
{
	R.ALU  = ((GET_REGFILE(ADDR) << 4) & 0xf0);
	R.ALU |= ((GET_REGFILE(ADDR) >> 4) & 0x0f);
	STORE_RESULT(ADDR, R.ALU);
}
Example #28
0
static void xorwf(void)
{
	R.ALU = GET_REGFILE(ADDR) ^ R.W;
	STORE_RESULT(ADDR, R.ALU);
	CALCULATE_Z_FLAG();
}
Example #29
0
void pic16c62x_device::comf()
{
	m_ALU = (UINT8)(~(GET_REGFILE(ADDR)));
	STORE_RESULT(ADDR, m_ALU);
	CALCULATE_Z_FLAG();
}
Example #30
0
void pic16c62x_device::incf()
{
	m_ALU = GET_REGFILE(ADDR) + 1;
	STORE_RESULT(ADDR, m_ALU);
	CALCULATE_Z_FLAG();
}