___PPC_RS(a) | ___PPC_RB(s))
 #define PPC_SRW(d, a, s)       EMIT(PPC_INST_SRW | ___PPC_RA(d) |            \
                                     ___PPC_RS(a) | ___PPC_RB(s))
+#define PPC_RLWINM(d, a, i, mb, me)    EMIT(PPC_INST_RLWINM | ___PPC_RA(d) | \
+                                       ___PPC_RS(a) | __PPC_SH(i) |          \
+                                       __PPC_MB(mb) | __PPC_ME(me))
+#define PPC_RLDICR(d, a, i, me)                EMIT(PPC_INST_RLDICR | ___PPC_RA(d) | \
+                                       ___PPC_RS(a) | __PPC_SH(i) |          \
+                                       __PPC_ME64(me) | (((i) & 0x20) >> 4))
+
 /* slwi = rlwinm Rx, Ry, n, 0, 31-n */
-#define PPC_SLWI(d, a, i)      EMIT(PPC_INST_RLWINM | ___PPC_RA(d) |         \
-                                    ___PPC_RS(a) | __PPC_SH(i) |             \
-                                    __PPC_MB(0) | __PPC_ME(31-(i)))
+#define PPC_SLWI(d, a, i)      PPC_RLWINM(d, a, i, 0, 31-(i))
 /* srwi = rlwinm Rx, Ry, 32-n, n, 31 */
-#define PPC_SRWI(d, a, i)      EMIT(PPC_INST_RLWINM | ___PPC_RA(d) |         \
-                                    ___PPC_RS(a) | __PPC_SH(32-(i)) |        \
-                                    __PPC_MB(i) | __PPC_ME(31))
+#define PPC_SRWI(d, a, i)      PPC_RLWINM(d, a, 32-(i), i, 31)
 /* sldi = rldicr Rx, Ry, n, 63-n */
-#define PPC_SLDI(d, a, i)      EMIT(PPC_INST_RLDICR | ___PPC_RA(d) |         \
-                                    ___PPC_RS(a) | __PPC_SH(i) |             \
-                                    __PPC_MB(63-(i)) | (((i) & 0x20) >> 4))
+#define PPC_SLDI(d, a, i)      PPC_RLDICR(d, a, i, 63-(i))
+
 #define PPC_NEG(d, a)          EMIT(PPC_INST_NEG | ___PPC_RT(d) | ___PPC_RA(a))
 
 /* Long jump; (unconditional 'branch') */