637,638c637,639
< if ((inUser && !entry->user) ||
< (mode == Write && !entry->writable)) {
---
> CR0 cr0 = tc->readMiscRegNoEffect(MISCREG_CR0);
> bool badWrite = (!entry->writable && (inUser || cr0.wp));
> if ((inUser && !entry->user) || (mode == Write && badWrite)) {
644c645
< if (storeCheck && !entry->writable) {
---
> if (storeCheck && badWrite) {