|
@@ -84,11 +84,10 @@ void raise_exception_sync_internal(CPUTriCoreState *env, uint32_t class, int tin
|
|
ICR.IE and ICR.CCPN are saved */
|
|
ICR.IE and ICR.CCPN are saved */
|
|
|
|
|
|
/* PCXI.PIE = ICR.IE */
|
|
/* PCXI.PIE = ICR.IE */
|
|
- env->PCXI = ((env->PCXI & ~MASK_PCXI_PIE_1_3) +
|
|
|
|
- ((env->ICR & MASK_ICR_IE_1_3) << 15));
|
|
|
|
|
|
+ pcxi_set_pie(env, icr_get_ie(env));
|
|
|
|
+
|
|
/* PCXI.PCPN = ICR.CCPN */
|
|
/* PCXI.PCPN = ICR.CCPN */
|
|
- env->PCXI = (env->PCXI & 0xffffff) +
|
|
|
|
- ((env->ICR & MASK_ICR_CCPN) << 24);
|
|
|
|
|
|
+ pcxi_set_pcpn(env, icr_get_ccpn(env));
|
|
/* Update PC using the trap vector table */
|
|
/* Update PC using the trap vector table */
|
|
env->PC = env->BTV | (class << 5);
|
|
env->PC = env->BTV | (class << 5);
|
|
|
|
|
|
@@ -2448,6 +2447,8 @@ void helper_call(CPUTriCoreState *env, uint32_t next_pc)
|
|
}
|
|
}
|
|
/* PSW.CDE = 1;*/
|
|
/* PSW.CDE = 1;*/
|
|
psw |= MASK_PSW_CDE;
|
|
psw |= MASK_PSW_CDE;
|
|
|
|
+ psw_write(env, psw);
|
|
|
|
+
|
|
/* tmp_FCX = FCX; */
|
|
/* tmp_FCX = FCX; */
|
|
tmp_FCX = env->FCX;
|
|
tmp_FCX = env->FCX;
|
|
/* EA = {FCX.FCXS, 6'b0, FCX.FCXO, 6'b0}; */
|
|
/* EA = {FCX.FCXS, 6'b0, FCX.FCXO, 6'b0}; */
|
|
@@ -2461,13 +2462,11 @@ void helper_call(CPUTriCoreState *env, uint32_t next_pc)
|
|
save_context_upper(env, ea);
|
|
save_context_upper(env, ea);
|
|
|
|
|
|
/* PCXI.PCPN = ICR.CCPN; */
|
|
/* PCXI.PCPN = ICR.CCPN; */
|
|
- env->PCXI = (env->PCXI & 0xffffff) +
|
|
|
|
- ((env->ICR & MASK_ICR_CCPN) << 24);
|
|
|
|
|
|
+ pcxi_set_pcpn(env, icr_get_ccpn(env));
|
|
/* PCXI.PIE = ICR.IE; */
|
|
/* PCXI.PIE = ICR.IE; */
|
|
- env->PCXI = ((env->PCXI & ~MASK_PCXI_PIE_1_3) +
|
|
|
|
- ((env->ICR & MASK_ICR_IE_1_3) << 15));
|
|
|
|
|
|
+ pcxi_set_pie(env, icr_get_ie(env));
|
|
/* PCXI.UL = 1; */
|
|
/* PCXI.UL = 1; */
|
|
- env->PCXI |= MASK_PCXI_UL;
|
|
|
|
|
|
+ pcxi_set_ul(env, 1);
|
|
|
|
|
|
/* PCXI[19: 0] = FCX[19: 0]; */
|
|
/* PCXI[19: 0] = FCX[19: 0]; */
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
@@ -2506,7 +2505,7 @@ void helper_ret(CPUTriCoreState *env)
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CSU, GETPC());
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CSU, GETPC());
|
|
}
|
|
}
|
|
/* if (PCXI.UL == 0) then trap(CTYP); */
|
|
/* if (PCXI.UL == 0) then trap(CTYP); */
|
|
- if ((env->PCXI & MASK_PCXI_UL) == 0) {
|
|
|
|
|
|
+ if (pcxi_get_ul(env) == 0) {
|
|
/* CTYP trap */
|
|
/* CTYP trap */
|
|
cdc_increment(&psw); /* restore to the start of helper */
|
|
cdc_increment(&psw); /* restore to the start of helper */
|
|
psw_write(env, psw);
|
|
psw_write(env, psw);
|
|
@@ -2516,8 +2515,8 @@ void helper_ret(CPUTriCoreState *env)
|
|
env->PC = env->gpr_a[11] & 0xfffffffe;
|
|
env->PC = env->gpr_a[11] & 0xfffffffe;
|
|
|
|
|
|
/* EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0}; */
|
|
/* EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0}; */
|
|
- ea = ((env->PCXI & MASK_PCXI_PCXS) << 12) +
|
|
|
|
- ((env->PCXI & MASK_PCXI_PCXO) << 6);
|
|
|
|
|
|
+ ea = (pcxi_get_pcxs(env) << 28) |
|
|
|
|
+ (pcxi_get_pcxo(env) << 6);
|
|
/* {new_PCXI, new_PSW, A[10], A[11], D[8], D[9], D[10], D[11], A[12],
|
|
/* {new_PCXI, new_PSW, A[10], A[11], D[8], D[9], D[10], D[11], A[12],
|
|
A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
|
|
A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
|
|
restore_context_upper(env, ea, &new_PCXI, &new_PSW);
|
|
restore_context_upper(env, ea, &new_PCXI, &new_PSW);
|
|
@@ -2559,21 +2558,21 @@ void helper_bisr(CPUTriCoreState *env, uint32_t const9)
|
|
|
|
|
|
|
|
|
|
/* PCXI.PCPN = ICR.CCPN */
|
|
/* PCXI.PCPN = ICR.CCPN */
|
|
- env->PCXI = (env->PCXI & 0xffffff) +
|
|
|
|
- ((env->ICR & MASK_ICR_CCPN) << 24);
|
|
|
|
|
|
+ pcxi_set_pcpn(env, icr_get_ccpn(env));
|
|
/* PCXI.PIE = ICR.IE */
|
|
/* PCXI.PIE = ICR.IE */
|
|
- env->PCXI = ((env->PCXI & ~MASK_PCXI_PIE_1_3) +
|
|
|
|
- ((env->ICR & MASK_ICR_IE_1_3) << 15));
|
|
|
|
|
|
+ pcxi_set_pie(env, icr_get_ie(env));
|
|
/* PCXI.UL = 0 */
|
|
/* PCXI.UL = 0 */
|
|
- env->PCXI &= ~(MASK_PCXI_UL);
|
|
|
|
|
|
+ pcxi_set_ul(env, 0);
|
|
|
|
+
|
|
/* PCXI[19: 0] = FCX[19: 0] */
|
|
/* PCXI[19: 0] = FCX[19: 0] */
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
/* FXC[19: 0] = new_FCX[19: 0] */
|
|
/* FXC[19: 0] = new_FCX[19: 0] */
|
|
env->FCX = (env->FCX & 0xfff00000) + (new_FCX & 0xfffff);
|
|
env->FCX = (env->FCX & 0xfff00000) + (new_FCX & 0xfffff);
|
|
|
|
+
|
|
/* ICR.IE = 1 */
|
|
/* ICR.IE = 1 */
|
|
- env->ICR |= MASK_ICR_IE_1_3;
|
|
|
|
|
|
+ icr_set_ie(env, 1);
|
|
|
|
|
|
- env->ICR |= const9; /* ICR.CCPN = const9[7: 0];*/
|
|
|
|
|
|
+ icr_set_ccpn(env, const9);
|
|
|
|
|
|
if (tmp_FCX == env->LCX) {
|
|
if (tmp_FCX == env->LCX) {
|
|
/* FCD trap */
|
|
/* FCD trap */
|
|
@@ -2592,7 +2591,7 @@ void helper_rfe(CPUTriCoreState *env)
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CSU, GETPC());
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CSU, GETPC());
|
|
}
|
|
}
|
|
/* if (PCXI.UL == 0) then trap(CTYP); */
|
|
/* if (PCXI.UL == 0) then trap(CTYP); */
|
|
- if ((env->PCXI & MASK_PCXI_UL) == 0) {
|
|
|
|
|
|
+ if (pcxi_get_ul(env) == 0) {
|
|
/* raise CTYP trap */
|
|
/* raise CTYP trap */
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CTYP, GETPC());
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CTYP, GETPC());
|
|
}
|
|
}
|
|
@@ -2603,14 +2602,15 @@ void helper_rfe(CPUTriCoreState *env)
|
|
}
|
|
}
|
|
env->PC = env->gpr_a[11] & ~0x1;
|
|
env->PC = env->gpr_a[11] & ~0x1;
|
|
/* ICR.IE = PCXI.PIE; */
|
|
/* ICR.IE = PCXI.PIE; */
|
|
- env->ICR = (env->ICR & ~MASK_ICR_IE_1_3)
|
|
|
|
- + ((env->PCXI & MASK_PCXI_PIE_1_3) >> 15);
|
|
|
|
|
|
+ icr_set_ie(env, pcxi_get_pie(env));
|
|
|
|
+
|
|
/* ICR.CCPN = PCXI.PCPN; */
|
|
/* ICR.CCPN = PCXI.PCPN; */
|
|
- env->ICR = (env->ICR & ~MASK_ICR_CCPN) +
|
|
|
|
- ((env->PCXI & MASK_PCXI_PCPN) >> 24);
|
|
|
|
|
|
+ icr_set_ccpn(env, pcxi_get_pcpn(env));
|
|
|
|
+
|
|
/*EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0};*/
|
|
/*EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0};*/
|
|
- ea = ((env->PCXI & MASK_PCXI_PCXS) << 12) +
|
|
|
|
- ((env->PCXI & MASK_PCXI_PCXO) << 6);
|
|
|
|
|
|
+ ea = (pcxi_get_pcxs(env) << 28) |
|
|
|
|
+ (pcxi_get_pcxo(env) << 6);
|
|
|
|
+
|
|
/*{new_PCXI, PSW, A[10], A[11], D[8], D[9], D[10], D[11], A[12],
|
|
/*{new_PCXI, PSW, A[10], A[11], D[8], D[9], D[10], D[11], A[12],
|
|
A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
|
|
A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
|
|
restore_context_upper(env, ea, &new_PCXI, &new_PSW);
|
|
restore_context_upper(env, ea, &new_PCXI, &new_PSW);
|
|
@@ -2628,11 +2628,10 @@ void helper_rfm(CPUTriCoreState *env)
|
|
{
|
|
{
|
|
env->PC = (env->gpr_a[11] & ~0x1);
|
|
env->PC = (env->gpr_a[11] & ~0x1);
|
|
/* ICR.IE = PCXI.PIE; */
|
|
/* ICR.IE = PCXI.PIE; */
|
|
- env->ICR = (env->ICR & ~MASK_ICR_IE_1_3)
|
|
|
|
- | ((env->PCXI & MASK_PCXI_PIE_1_3) >> 15);
|
|
|
|
|
|
+ icr_set_ie(env, pcxi_get_pie(env));
|
|
/* ICR.CCPN = PCXI.PCPN; */
|
|
/* ICR.CCPN = PCXI.PCPN; */
|
|
- env->ICR = (env->ICR & ~MASK_ICR_CCPN) |
|
|
|
|
- ((env->PCXI & MASK_PCXI_PCPN) >> 24);
|
|
|
|
|
|
+ icr_set_ccpn(env, pcxi_get_pcpn(env));
|
|
|
|
+
|
|
/* {PCXI, PSW, A[10], A[11]} = M(DCX, 4 * word); */
|
|
/* {PCXI, PSW, A[10], A[11]} = M(DCX, 4 * word); */
|
|
env->PCXI = cpu_ldl_data(env, env->DCX);
|
|
env->PCXI = cpu_ldl_data(env, env->DCX);
|
|
psw_write(env, cpu_ldl_data(env, env->DCX+4));
|
|
psw_write(env, cpu_ldl_data(env, env->DCX+4));
|
|
@@ -2691,13 +2690,13 @@ void helper_svlcx(CPUTriCoreState *env)
|
|
save_context_lower(env, ea);
|
|
save_context_lower(env, ea);
|
|
|
|
|
|
/* PCXI.PCPN = ICR.CCPN; */
|
|
/* PCXI.PCPN = ICR.CCPN; */
|
|
- env->PCXI = (env->PCXI & 0xffffff) +
|
|
|
|
- ((env->ICR & MASK_ICR_CCPN) << 24);
|
|
|
|
|
|
+ pcxi_set_pcpn(env, icr_get_ccpn(env));
|
|
|
|
+
|
|
/* PCXI.PIE = ICR.IE; */
|
|
/* PCXI.PIE = ICR.IE; */
|
|
- env->PCXI = ((env->PCXI & ~MASK_PCXI_PIE_1_3) +
|
|
|
|
- ((env->ICR & MASK_ICR_IE_1_3) << 15));
|
|
|
|
|
|
+ pcxi_set_pie(env, icr_get_ie(env));
|
|
|
|
+
|
|
/* PCXI.UL = 0; */
|
|
/* PCXI.UL = 0; */
|
|
- env->PCXI &= ~MASK_PCXI_UL;
|
|
|
|
|
|
+ pcxi_set_ul(env, 0);
|
|
|
|
|
|
/* PCXI[19: 0] = FCX[19: 0]; */
|
|
/* PCXI[19: 0] = FCX[19: 0]; */
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
@@ -2734,13 +2733,13 @@ void helper_svucx(CPUTriCoreState *env)
|
|
save_context_upper(env, ea);
|
|
save_context_upper(env, ea);
|
|
|
|
|
|
/* PCXI.PCPN = ICR.CCPN; */
|
|
/* PCXI.PCPN = ICR.CCPN; */
|
|
- env->PCXI = (env->PCXI & 0xffffff) +
|
|
|
|
- ((env->ICR & MASK_ICR_CCPN) << 24);
|
|
|
|
|
|
+ pcxi_set_pcpn(env, icr_get_ccpn(env));
|
|
|
|
+
|
|
/* PCXI.PIE = ICR.IE; */
|
|
/* PCXI.PIE = ICR.IE; */
|
|
- env->PCXI = ((env->PCXI & ~MASK_PCXI_PIE_1_3) +
|
|
|
|
- ((env->ICR & MASK_ICR_IE_1_3) << 15));
|
|
|
|
|
|
+ pcxi_set_pie(env, icr_get_ie(env));
|
|
|
|
+
|
|
/* PCXI.UL = 1; */
|
|
/* PCXI.UL = 1; */
|
|
- env->PCXI |= MASK_PCXI_UL;
|
|
|
|
|
|
+ pcxi_set_ul(env, 1);
|
|
|
|
|
|
/* PCXI[19: 0] = FCX[19: 0]; */
|
|
/* PCXI[19: 0] = FCX[19: 0]; */
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
env->PCXI = (env->PCXI & 0xfff00000) + (env->FCX & 0xfffff);
|
|
@@ -2764,13 +2763,15 @@ void helper_rslcx(CPUTriCoreState *env)
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CSU, GETPC());
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CSU, GETPC());
|
|
}
|
|
}
|
|
/* if (PCXI.UL == 1) then trap(CTYP); */
|
|
/* if (PCXI.UL == 1) then trap(CTYP); */
|
|
- if ((env->PCXI & MASK_PCXI_UL) != 0) {
|
|
|
|
|
|
+ if (pcxi_get_ul(env) == 1) {
|
|
/* CTYP trap */
|
|
/* CTYP trap */
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CTYP, GETPC());
|
|
raise_exception_sync_helper(env, TRAPC_CTX_MNG, TIN3_CTYP, GETPC());
|
|
}
|
|
}
|
|
/* EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0}; */
|
|
/* EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0}; */
|
|
- ea = ((env->PCXI & MASK_PCXI_PCXS) << 12) +
|
|
|
|
- ((env->PCXI & MASK_PCXI_PCXO) << 6);
|
|
|
|
|
|
+ /* EA = {PCXI.PCXS, 6'b0, PCXI.PCXO, 6'b0}; */
|
|
|
|
+ ea = (pcxi_get_pcxs(env) << 28) |
|
|
|
|
+ (pcxi_get_pcxo(env) << 6);
|
|
|
|
+
|
|
/* {new_PCXI, A[11], A[10], A[11], D[8], D[9], D[10], D[11], A[12],
|
|
/* {new_PCXI, A[11], A[10], A[11], D[8], D[9], D[10], D[11], A[12],
|
|
A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
|
|
A[13], A[14], A[15], D[12], D[13], D[14], D[15]} = M(EA, 16 * word); */
|
|
restore_context_lower(env, ea, &env->gpr_a[11], &new_PCXI);
|
|
restore_context_lower(env, ea, &env->gpr_a[11], &new_PCXI);
|