target-xtensa: implement JX/RET0/CALLX
Group SNM0 (indirect jumps and calls). Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
bd57fb91ae
commit
5da4a6a8c5
|
@ -248,6 +248,49 @@ static void disas_xtensa_insn(DisasContext *dc)
|
||||||
|
|
||||||
switch (RRR_R) {
|
switch (RRR_R) {
|
||||||
case 0: /*SNM0*/
|
case 0: /*SNM0*/
|
||||||
|
switch (CALLX_M) {
|
||||||
|
case 0: /*ILL*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: /*reserved*/
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: /*JR*/
|
||||||
|
switch (CALLX_N) {
|
||||||
|
case 0: /*RET*/
|
||||||
|
case 2: /*JX*/
|
||||||
|
gen_jump(dc, cpu_R[CALLX_S]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: /*RETWw*/
|
||||||
|
HAS_OPTION(XTENSA_OPTION_WINDOWED_REGISTER);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: /*reserved*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: /*CALLX*/
|
||||||
|
switch (CALLX_N) {
|
||||||
|
case 0: /*CALLX0*/
|
||||||
|
{
|
||||||
|
TCGv_i32 tmp = tcg_temp_new_i32();
|
||||||
|
tcg_gen_mov_i32(tmp, cpu_R[CALLX_S]);
|
||||||
|
tcg_gen_movi_i32(cpu_R[0], dc->next_pc);
|
||||||
|
gen_jump(dc, tmp);
|
||||||
|
tcg_temp_free(tmp);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: /*CALLX4w*/
|
||||||
|
case 2: /*CALLX8w*/
|
||||||
|
case 3: /*CALLX12w*/
|
||||||
|
HAS_OPTION(XTENSA_OPTION_WINDOWED_REGISTER);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /*MOVSPw*/
|
case 1: /*MOVSPw*/
|
||||||
|
|
Reference in New Issue