TriCore bugfixes
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCgAGBQJVac5JAAoJEArSxjlracoUiZwP/jRnAm/5kn+MVMVe4RUGBvZQ Ltb1TpAwKMJRjMS8HTjmJsRCMih2xqli29ETx7LO0+pAaujn0WF2QhOyD1Qh3dPh 22AUO3M0RT3y+lYyh28eUksUKUhQMr+xehiv5wTQzylfC0tls5QuFSGJpeQBoBW4 LJuoSZ6JnfzGxs1ep6lIczj8Zkms/Fvmlxbi2aAY2nLJPAXSYlBymBim4wWsuh70 kHlXHXEgdHZl8TiEwYWseNezuiM7k26uU5390uIZ2FCnNrPDCML6wy4pLh8s+j3O T9iQ/jMIYXnHubSktpOq8rVnBMe4RWvz9zN4MeCf018ZOPz/10y7kCKJTk7ULMO5 p2P3uMZtjXmYazhETnqRE+lhMysj7rPZUYMpJTVFRqORyzxJEZODUKIRcIoc3tgT x4OBgTUHea5f+Kp2lsVVKXaceODD4kOSa1tt91uVK1cSnIsPwBozIqmjFWjEcXhA vVYNIHxndk5nB5w+hED7/SPgMtDFUAIdPuzX0447equLivFvOU8tnIw1vdaZchYK 2E7MMd0ZZuBJ6Zls5PnBYjk2NLvEwG9tEV0wwVmIE/evmlRde+OhNXa8C0zeM1it ELkF/4PqgeJ8UyVVRclz0EKeRIbCccTD9bTkmx7jukQ9ca+J+VbByxD8bxGL9Qi3 8ZHtUZUW82eCP96PM1Oc =PvTG -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bkoppelmann/tags/pull-tricore-20150530' into staging TriCore bugfixes # gpg: Signature made Sat May 30 15:50:49 2015 BST using RSA key ID 6B69CA14 # gpg: Good signature from "Bastian Koppelmann <kbastian@mail.uni-paderborn.de>" * remotes/bkoppelmann/tags/pull-tricore-20150530: target-tricore: fix BOL_ST_H_LONGOFF using ld target-tricore: fix msub32_q producing the wrong overflow bit target-tricore: fix OPC2_32_RR_DVINIT_HU having write before use on the result Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
9657cafceb
@ -1980,17 +1980,6 @@ gen_msub32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n,
|
|||||||
tcg_gen_or_i64(t1, t1, t2);
|
tcg_gen_or_i64(t1, t1, t2);
|
||||||
tcg_gen_trunc_i64_i32(cpu_PSW_V, t1);
|
tcg_gen_trunc_i64_i32(cpu_PSW_V, t1);
|
||||||
tcg_gen_shli_tl(cpu_PSW_V, cpu_PSW_V, 31);
|
tcg_gen_shli_tl(cpu_PSW_V, cpu_PSW_V, 31);
|
||||||
/* We produce an overflow on the host if the mul before was
|
|
||||||
(0x80000000 * 0x80000000) << 1). If this is the
|
|
||||||
case, we negate the ovf. */
|
|
||||||
if (n == 1) {
|
|
||||||
tcg_gen_setcondi_tl(TCG_COND_EQ, temp, arg2, 0x80000000);
|
|
||||||
tcg_gen_setcond_tl(TCG_COND_EQ, temp2, arg2, arg3);
|
|
||||||
tcg_gen_and_tl(temp, temp, temp2);
|
|
||||||
tcg_gen_shli_tl(temp, temp, 31);
|
|
||||||
/* negate v bit, if special condition */
|
|
||||||
tcg_gen_xor_tl(cpu_PSW_V, cpu_PSW_V, temp);
|
|
||||||
}
|
|
||||||
/* Calc SV bit */
|
/* Calc SV bit */
|
||||||
tcg_gen_or_tl(cpu_PSW_SV, cpu_PSW_SV, cpu_PSW_V);
|
tcg_gen_or_tl(cpu_PSW_SV, cpu_PSW_SV, cpu_PSW_V);
|
||||||
/* Calc AV/SAV bits */
|
/* Calc AV/SAV bits */
|
||||||
@ -5287,7 +5276,7 @@ static void decode_bol_opc(CPUTriCoreState *env, DisasContext *ctx, int32_t op1)
|
|||||||
break;
|
break;
|
||||||
case OPC1_32_BOL_ST_H_LONGOFF:
|
case OPC1_32_BOL_ST_H_LONGOFF:
|
||||||
if (tricore_feature(env, TRICORE_FEATURE_16)) {
|
if (tricore_feature(env, TRICORE_FEATURE_16)) {
|
||||||
gen_offset_ld(ctx, cpu_gpr_d[r1], cpu_gpr_a[r2], address, MO_LESW);
|
gen_offset_st(ctx, cpu_gpr_d[r1], cpu_gpr_a[r2], address, MO_LESW);
|
||||||
} else {
|
} else {
|
||||||
/* raise illegal opcode trap */
|
/* raise illegal opcode trap */
|
||||||
}
|
}
|
||||||
@ -6451,8 +6440,8 @@ static void decode_rr_divide(CPUTriCoreState *env, DisasContext *ctx)
|
|||||||
/* sv */
|
/* sv */
|
||||||
tcg_gen_or_tl(cpu_PSW_SV, cpu_PSW_SV, cpu_PSW_V);
|
tcg_gen_or_tl(cpu_PSW_SV, cpu_PSW_SV, cpu_PSW_V);
|
||||||
/* write result */
|
/* write result */
|
||||||
tcg_gen_mov_tl(cpu_gpr_d[r3+1], temp3);
|
|
||||||
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r1], 16);
|
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r1], 16);
|
||||||
|
tcg_gen_mov_tl(cpu_gpr_d[r3+1], temp3);
|
||||||
tcg_temp_free(temp);
|
tcg_temp_free(temp);
|
||||||
tcg_temp_free(temp2);
|
tcg_temp_free(temp2);
|
||||||
tcg_temp_free(temp3);
|
tcg_temp_free(temp3);
|
||||||
|
Loading…
Reference in New Issue
Block a user