--- /dev/null
+/*
+ * tests for bit operations' instruction relaxation
+ *
+ * Author: libin
+ */
+
+.include "relaxation_macro.h"
+
+.macro _bit_op_pattern insn insn1
+ insn_32 "\insn r0, r0, 0"
+ insn_32 "\insn r0, r0, 0x1f"
+ insn_32 "\insn r15, r15, 0"
+ insn_32 "\insn r15, r15, 0x1f"
+
+ tran_16_32 "\insn! r0,0", "\insn r0,r0,0"
+
+ /* shouldn't alter */
+ insn_32 "\insn1 r0, r0, 0"
+ insn_32 "\insn r16, r16, 0"
+ insn_32 "\insn r16, r16, 0x1f"
+.endm
+
+.text
+/*
+ * bitclr rD,rA,BN5 -> bitclr! rD,BN5
+ * bitset rD,rA,BN5 -> bitset! rD,BN5
+ * bittgl rD,rA,BN5 -> bittgl! rD,BN5
+ */
+_bit_op_pattern "bitclr", "bitclr.c"
+_bit_op_pattern "bitset", "bitset.c"
+_bit_op_pattern "bittgl", "bittgl.c"
+
+/* bittst.c rA,BN5 <-> bittst! rD,BN5" */
+insn_32 "bittst.c r0, 0"
+insn_32 "bittst.c r0, 0x1f"
+insn_32 "bittst.c r15, 0"
+insn_32 "bittst.c r15, 0x1f"
+
+tran_16_32 "bittst! r0,0", "bittst.c r0,0"
+
+/* shouldn't alter */
+insn_32 "bittst.c r16, 0"
+insn_32 "bittst.c r16, 0x1f"