[ulib][ddk] Rewrite set_bit*/clear_bit* macros in terms of read*/write* macros

Change-Id: I4087c5b11cea02c9f15f6a2b3875ea2d04e97200
diff --git a/system/ulib/ddk/include/hw/reg.h b/system/ulib/ddk/include/hw/reg.h
index 4431970..0170246 100644
--- a/system/ulib/ddk/include/hw/reg.h
+++ b/system/ulib/ddk/include/hw/reg.h
@@ -22,20 +22,20 @@
 
 #define writeb(v, a) (*REG8(a) = (v))
 #define readb(a) (*REG8(a))
-#define set_bitsb(v, a) (*REG8(a) |= (v))
-#define clr_bitsb(v, a) (*REG8(a) &= (~(v)))
+#define set_bitsb(v, a) writeb(readb(a) | (v), (a))
+#define clr_bitsb(v, a) writeb(readb(a) & ~(v), (a))
 
 #define writew(v, a) (*REG16(a) = (v))
 #define readw(a) (*REG16(a))
-#define set_bitsw(v, a) (*REG16(a) |= (v))
-#define clr_bitsw(v, a) (*REG16(a) &= (~(v)))
+#define set_bitsw(v, a) writew(readw(a) | (v), (a))
+#define clr_bitsw(v, a) writew(readw(a) & ~(v), (a))
 
 #define writel(v, a) (*REG32(a) = (v))
 #define readl(a) (*REG32(a))
-#define set_bitsl(v, a) (*REG32(a) |= (v))
-#define clr_bitsl(v, a) (*REG32(a) &= (~(v)))
+#define set_bitsl(v, a) writel(readl(a) | (v), (a))
+#define clr_bitsl(v, a) writel(readl(a) & ~(v), (a))
 
 #define writell(v, a) (*REG64(a) = (v))
 #define readll(a) (*REG64(a))
-#define set_bitsll(v, a) (*REG64(a) |= (v))
-#define clr_bitsll(v, a) (*REG64(a) &= (~(v)))
+#define set_bitsll(v, a) writell(readll(a) | (v), (a))
+#define clr_bitsll(v, a) writell(readll(a) & ~(v), (a))