OpenCores
URL https://opencores.org/ocsvn/zipcpu/zipcpu/trunk

Subversion Repositories zipcpu

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /zipcpu/trunk/sw
    from Rev 125 to Rev 126
    Reverse comparison

Rev 125 → Rev 126

/zasm/asmdata.cpp
461,6 → 461,33
in = zp.op_lod(m_cond, imm, m_opb, m_opa);
in = zp.op_lod(m_cond, -1, zp.ZIP_SP, zp.ZIP_PC);
break;
case OP_MPY:
if ((m_opb == zp.ZIP_PC)||(m_opb == zp.ZIP_CC)
||(m_opa == zp.ZIP_PC)||(m_opa == zp.ZIP_CC))
yyerror("MPY does not support PC or CC register operands or results");
else if (m_opb == zp.ZIP_Rnone)
in = zp.op_mpy(m_cond, imm, m_opa);
else
in = zp.op_mpy(m_cond, imm, m_opb, m_opa);
break;
case OP_MPYUHI:
if ((m_opb == zp.ZIP_PC)||(m_opb == zp.ZIP_CC)
||(m_opa == zp.ZIP_PC)||(m_opa == zp.ZIP_CC))
yyerror("MPY does not support PC or CC register operands or results");
else if (m_opb == zp.ZIP_Rnone)
in = zp.op_mpyuhi(m_cond, imm, m_opa);
else
in = zp.op_mpyuhi(m_cond, imm, m_opb, m_opa);
break;
case OP_MPYSHI:
if ((m_opb == zp.ZIP_PC)||(m_opb == zp.ZIP_CC)
||(m_opa == zp.ZIP_PC)||(m_opa == zp.ZIP_CC))
yyerror("MPY does not support PC or CC register operands or results");
else if (m_opb == zp.ZIP_Rnone)
in = zp.op_mpyshi(m_cond, imm, m_opa);
else
in = zp.op_mpyshi(m_cond, imm, m_opb, m_opa);
break;
case OP_HALT: in = zp.op_halt(m_cond); break;
case OP_RTU: in = zp.op_rtu(m_cond); break;
case OP_BUSY: in = zp.op_busy(m_cond); break;
/zasm/asmdata.h
57,6 → 57,8
OP_CMP, OP_TST, OP_MOV, OP_LDIHI, OP_LDILO, OP_MPYU, OP_MPYS, OP_ROL,
OP_SUB, OP_AND, OP_ADD, OP_OR, OP_XOR,
OP_LSL, OP_ASR, OP_LSR,
// New multiplies
OP_MPY, OP_MPYSHI, OP_MPYUHI,
// New bit-wise operations
OP_BREV, OP_POPC,
// New divide instruction
/zasm/zasm.l
151,6 → 151,9
(?i:fpdiv) { yylval.u_op = OP_FPDIV; return DUALOP; }
(?i:fpcvt) { yylval.u_op = OP_FPCVT; return DUALOP; }
(?i:fpint) { yylval.u_op = OP_FPINT; return DUALOP; }
(?i:mpyshi) { yylval.u_op = OP_MPYSHI; return DUALOP; }
(?i:mpyuhu) { yylval.u_op = OP_MPYUHI; return DUALOP; }
(?i:mpy) { yylval.u_op = OP_MPY; return DUALOP; }
(?i:equ) { return EQU; }
(?i:fill) { return FILL; }
(?i:word) { return WORD; }
/zasm/zparser.cpp
60,6 → 60,17
|((CND&0x07)<<19)|(1<<18)|((B&0x0f)<<14) \
| (IMM & 0x03fff))
 
#define LONG_MPY
 
ZPARSER::ZIPIMM ZPARSER::brev(ZIPIMM v) const {
unsigned r=0, b;
 
for(b=0; b<32; b++, v>>=1)
r = (r<<1)|(v&1);
 
return r;
}
 
ZIPI ZPARSER::op_cmp(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const {
return DBLREGOP(ZIPO_CMP, cnd, imm, b, a);
}
118,10 → 129,22
return 0x76800000;
}
 
#ifdef LONG_MPY
ZIPI ZPARSER::op_mpy(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const {
return DBLREGOP(ZIPO_MPY, cnd, imm, b, a);
} ZIPI ZPARSER::op_mpy(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const {
return IMMOP(ZIPO_MPY, cnd, imm, a);
} ZIPI ZPARSER::op_ldihi(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const {
ZIPI in = IMMOP(ZIPO_BREV, cnd, brev(imm)&0x0ffff, a);
return in;
}
#else
ZIPI ZPARSER::op_ldihi(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const {
ZIPI in = IMMOP(ZIPO_LDIHI, cnd, (imm & 0x0ffff), a);
return in;
} ZIPI ZPARSER::op_ldilo(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const {
}
#endif
ZIPI ZPARSER::op_ldilo(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const {
ZIPI in = IMMOP(ZIPO_LDILO, cnd, (imm & 0x0ffff), a);
return in;
}
/zasm/zparser.h
79,7 → 79,12
ZIPO_FPCVT, ZIPO_FPINT, // 5'h1110x
} ZIPOP;
 
#define ZIPO_MPY ZIPO_LDIHI
#define ZIPO_MPYSHI ZIPO_MPYS
#define ZIPO_MPYUHI ZIPO_MPYU
 
ZIPIMM brev(ZIPIMM) const;
 
ZIPI op_cmp(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const;
ZIPI op_cmp(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;
ZIPI op_cmp(ZIPIMM imm, ZIPREG b, ZIPREG a) const
110,10 → 115,13
ZIPI op_break(void) const;
ZIPI op_lock(void) const;
 
ZIPI op_mpy(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;
ZIPI op_mpy(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const;
//
ZIPI op_ldihi(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;
ZIPI op_ldilo(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;
ZIPI op_ldihi(ZIPIMM imm, ZIPREG a) const
{ return op_ldihi(ZIPC_ALWAYS, imm, a); }
ZIPI op_ldilo(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;
ZIPI op_ldilo(ZIPIMM imm, ZIPREG a) const
{ return op_ldilo(ZIPC_ALWAYS, imm, a); }
 
123,6 → 131,11
{ return op_mpyu(ZIPC_ALWAYS, imm, b, a); }
ZIPI op_mpyu(ZIPIMM imm, ZIPREG a) const
{ return op_mpyu(ZIPC_ALWAYS, imm, a); }
//
ZIPI op_mpyuhi(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const
{ return op_mpyu(cnd,imm,b,a); }
ZIPI op_mpyuhi(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const
{ return op_mpyu(cnd,imm,a); }
 
ZIPI op_mpys(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const;
ZIPI op_mpys(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;
130,6 → 143,11
{ return op_mpys(ZIPC_ALWAYS, imm, b, a); }
ZIPI op_mpys(ZIPIMM imm, ZIPREG a) const
{ return op_mpys(ZIPC_ALWAYS, imm, a); }
//
ZIPI op_mpyshi(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const
{ return op_mpys(cnd,imm,b,a); }
ZIPI op_mpyshi(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const
{ return op_mpys(cnd,imm,a); }
 
ZIPI op_rol(ZIPCOND cnd, ZIPIMM imm, ZIPREG b, ZIPREG a) const;
ZIPI op_rol(ZIPCOND cnd, ZIPIMM imm, ZIPREG a) const;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.