Index: /trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp
===================================================================
--- /trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp	(revision 88321)
+++ /trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp	(revision 88322)
@@ -526,6 +526,6 @@
     uint64_t const fRoBits   = uCurReg & ~fRwMask;      /* Preserve current read-only and reserved bits. */
     uint64_t const fRwBits   = uReg & fRwMask;          /* Merge newly written read/write bits. */
-    uint64_t const fRw1cBits = ~(fRw1cMask & uReg);     /* Clear newly written RW1C bits. */
-    uint64_t const uNewReg   = (fRoBits | fRwBits) & fRw1cBits;
+    uint64_t const fRw1cBits = uReg & fRw1cMask;        /* Clear 1s written to RW1C bits. */
+    uint64_t const uNewReg   = (fRoBits | fRwBits) & ~fRw1cBits;
 
     /* Write new value to the 64-bit register. */
@@ -552,6 +552,6 @@
     uint32_t const fRoBits   = uCurReg & ~fRwMask;      /* Preserve current read-only and reserved bits. */
     uint32_t const fRwBits   = uReg & fRwMask;          /* Merge newly written read/write bits. */
-    uint32_t const fRw1cBits = ~(fRw1cMask & uReg);     /* Clear newly written RW1C bits. */
-    uint32_t const uNewReg   = (fRoBits | fRwBits) & fRw1cBits;
+    uint32_t const fRw1cBits = uReg & fRw1cMask;        /* Clear 1s written to RW1C bits. */
+    uint32_t const uNewReg   = (fRoBits | fRwBits) & ~fRw1cBits;
 
     /* Write new value to the 32-bit register. */
