Commit 4017190e2d75882a0e9dbc40f403e584e0ab46c4
1 parent
0bb3602c
Add SuperSPARC MMU breakpoint registers (Robert Reif)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6125 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
45 additions
and
1 deletions
target-sparc/cpu.h
target-sparc/op_helper.c
... | ... | @@ -953,6 +953,28 @@ uint64_t helper_ld_asi(target_ulong addr, int asi, int size, int sign) |
953 | 953 | case 0x39: /* data cache diagnostic register */ |
954 | 954 | ret = 0; |
955 | 955 | break; |
956 | + case 0x38: /* SuperSPARC MMU Breakpoint Control Registers */ | |
957 | + { | |
958 | + int reg = (addr >> 8) & 3; | |
959 | + | |
960 | + switch(reg) { | |
961 | + case 0: /* Breakpoint Value (Addr) */ | |
962 | + ret = env->mmubpregs[reg]; | |
963 | + break; | |
964 | + case 1: /* Breakpoint Mask */ | |
965 | + ret = env->mmubpregs[reg]; | |
966 | + break; | |
967 | + case 2: /* Breakpoint Control */ | |
968 | + ret = env->mmubpregs[reg]; | |
969 | + break; | |
970 | + case 3: /* Breakpoint Status */ | |
971 | + ret = env->mmubpregs[reg]; | |
972 | + env->mmubpregs[reg] = 0ULL; | |
973 | + break; | |
974 | + } | |
975 | + DPRINTF_MMU("read breakpoint reg[%d] 0x%016llx\n", reg, ret); | |
976 | + } | |
977 | + break; | |
956 | 978 | case 8: /* User code access, XXX */ |
957 | 979 | default: |
958 | 980 | do_unassigned_access(addr, 0, 0, asi, size); |
... | ... | @@ -1283,9 +1305,30 @@ void helper_st_asi(target_ulong addr, uint64_t val, int asi, int size) |
1283 | 1305 | // descriptor diagnostic |
1284 | 1306 | case 0x36: /* I-cache flash clear */ |
1285 | 1307 | case 0x37: /* D-cache flash clear */ |
1286 | - case 0x38: /* breakpoint diagnostics */ | |
1287 | 1308 | case 0x4c: /* breakpoint action */ |
1288 | 1309 | break; |
1310 | + case 0x38: /* SuperSPARC MMU Breakpoint Control Registers*/ | |
1311 | + { | |
1312 | + int reg = (addr >> 8) & 3; | |
1313 | + | |
1314 | + switch(reg) { | |
1315 | + case 0: /* Breakpoint Value (Addr) */ | |
1316 | + env->mmubpregs[reg] = (val & 0xfffffffffULL); | |
1317 | + break; | |
1318 | + case 1: /* Breakpoint Mask */ | |
1319 | + env->mmubpregs[reg] = (val & 0xfffffffffULL); | |
1320 | + break; | |
1321 | + case 2: /* Breakpoint Control */ | |
1322 | + env->mmubpregs[reg] = (val & 0x7fULL); | |
1323 | + break; | |
1324 | + case 3: /* Breakpoint Status */ | |
1325 | + env->mmubpregs[reg] = (val & 0xfULL); | |
1326 | + break; | |
1327 | + } | |
1328 | + DPRINTF_MMU("write breakpoint reg[%d] 0x%016llx\n", reg, | |
1329 | + env->mmuregs[reg]); | |
1330 | + } | |
1331 | + break; | |
1289 | 1332 | case 8: /* User code access, XXX */ |
1290 | 1333 | case 9: /* Supervisor code access, XXX */ |
1291 | 1334 | default: | ... | ... |