mirror of https://gitee.com/openkylin/qemu.git
sparc64: improve ldf and stf insns
- implemented block load/store primary/secondary with user privilege Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko@gmail.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
b219094ace
commit
0e2fa9cab9
|
@ -3163,6 +3163,20 @@ void helper_ldf_asi(target_ulong addr, int asi, int size, int rd)
|
||||||
addr += 4;
|
addr += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
case 0x70: // Block load primary, user privilege
|
||||||
|
case 0x71: // Block load secondary, user privilege
|
||||||
|
if (rd & 7) {
|
||||||
|
raise_exception(TT_ILL_INSN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
helper_check_align(addr, 0x3f);
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
*(uint32_t *)&env->fpr[rd++] = helper_ld_asi(addr, asi & 0x1f, 4,
|
||||||
|
0);
|
||||||
|
addr += 4;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -3209,6 +3223,20 @@ void helper_stf_asi(target_ulong addr, int asi, int size, int rd)
|
||||||
addr += 4;
|
addr += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
case 0x70: // Block store primary, user privilege
|
||||||
|
case 0x71: // Block store secondary, user privilege
|
||||||
|
if (rd & 7) {
|
||||||
|
raise_exception(TT_ILL_INSN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
helper_check_align(addr, 0x3f);
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
val = *(uint32_t *)&env->fpr[rd++];
|
||||||
|
helper_st_asi(addr, val, asi & 0x1f, 4);
|
||||||
|
addr += 4;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue