-#define zgzh(r,a,b) r=(a)> (b)
-#define zgzezh(r,a,b) r=(a)>=(b)
-#define zezezh(r,a,b) r=(a)==(b)
-#define zszezh(r,a,b) r=(a)!=(b)
-#define zlzh(r,a,b) r=(a)< (b)
-#define zlzezh(r,a,b) r=(a)<=(b)
-
-#define gtWordzh(r,a,b) r=(a)> (b)
-#define geWordzh(r,a,b) r=(a)>=(b)
-#define eqWordzh(r,a,b) r=(a)==(b)
-#define neWordzh(r,a,b) r=(a)!=(b)
-#define ltWordzh(r,a,b) r=(a)< (b)
-#define leWordzh(r,a,b) r=(a)<=(b)
-
-#define gtAddrzh(r,a,b) r=(a)> (b)
-#define geAddrzh(r,a,b) r=(a)>=(b)
-#define eqAddrzh(r,a,b) r=(a)==(b)
-#define neAddrzh(r,a,b) r=(a)!=(b)
-#define ltAddrzh(r,a,b) r=(a)< (b)
-#define leAddrzh(r,a,b) r=(a)<=(b)
-
-#define gtFloatzh(r,a,b) r=(a)> (b)
-#define geFloatzh(r,a,b) r=(a)>=(b)
-#define eqFloatzh(r,a,b) r=(a)==(b)
-#define neFloatzh(r,a,b) r=(a)!=(b)
-#define ltFloatzh(r,a,b) r=(a)< (b)
-#define leFloatzh(r,a,b) r=(a)<=(b)
+#define zgzh(r,a,b) r=((I_)(a))> ((I_)(b))
+#define zgzezh(r,a,b) r=((I_)(a))>=((I_)(b))
+#define zezezh(r,a,b) r=((I_)(a))==((I_)(b))
+#define zszezh(r,a,b) r=((I_)(a))!=((I_)(b))
+#define zlzh(r,a,b) r=((I_)(a))< ((I_)(b))
+#define zlzezh(r,a,b) r=((I_)(a))<=((I_)(b))
+
+#define gtWordzh(r,a,b) r=((W_)(a))> ((W_)(b))
+#define geWordzh(r,a,b) r=((W_)(a))>=((W_)(b))
+#define eqWordzh(r,a,b) r=((W_)(a))==((W_)(b))
+#define neWordzh(r,a,b) r=((W_)(a))!=((W_)(b))
+#define ltWordzh(r,a,b) r=((W_)(a))< ((W_)(b))
+#define leWordzh(r,a,b) r=((W_)(a))<=((W_)(b))
+
+#define gtAddrzh(r,a,b) r=((A_)(a))> ((A_)(b))
+#define geAddrzh(r,a,b) r=((A_)(a))>=((A_)(b))
+#define eqAddrzh(r,a,b) r=((A_)(a))==((A_)(b))
+#define neAddrzh(r,a,b) r=((A_)(a))!=((A_)(b))
+#define ltAddrzh(r,a,b) r=((A_)(a))< ((A_)(b))
+#define leAddrzh(r,a,b) r=((A_)(a))<=((A_)(b))
+
+#define gtFloatzh(r,a,b) r=((StgFloat)(a))> ((StgFloat)(b))
+#define geFloatzh(r,a,b) r=((StgFloat)(a))>=((StgFloat)(b))
+#define eqFloatzh(r,a,b) r=((StgFloat)(a))==((StgFloat)(b))
+#define neFloatzh(r,a,b) r=((StgFloat)(a))!=((StgFloat)(b))
+#define ltFloatzh(r,a,b) r=((StgFloat)(a))< ((StgFloat)(b))
+#define leFloatzh(r,a,b) r=((StgFloat)(a))<=((StgFloat)(b))