+ def case_cror_regression(self):
+ """another bad hack!
+ """
+ dis = ["cror 28, 5, 11"]
+ lst = bytes([0x83, 0x5b, 0x75, 0x4f]) # 4f855b83
+ cr = 0x35055058
+ p = Program(lst, bigendian)
+ p.assembly = '\n'.join(dis)+'\n'
+ self.add_case(p, initial_cr=cr)
+
+ def case_mfocrf_regression(self):
+ """bit of a bad hack. comes from microwatt 1.bin instruction 0x106d0
+ as the mask is non-standard, gnu-as barfs. so we fake it up directly
+ from the binary
+ """
+ mask = 0b10000111
+ dis = [f"mfocrf 2, {mask}"]
+ lst = bytes([0x26, 0x78, 0xb8, 0x7c]) # 0x7cb87826
+ cr = 0x5F9E080E
+ p = Program(lst, bigendian)
+ p.assembly = '\n'.join(dis)+'\n'
+ self.add_case(p, initial_cr=cr)
+
+ def case_mtocrf_regression(self):
+ """microwatt 1.bin regression, same hack as above.
+ 106b4: 21 d9 96 7d .long 0x7d96d921 # mtocrf 12, 0b01101101
+ """
+ mask = 0b01101101
+ dis = [f"mtocrf 12, {mask}"]
+ lst = bytes([0x21, 0xd9, 0x96, 0x7d]) # 0x7d96d921
+ cr = 0x529e08fe
+ initial_regs = [0] * 32
+ initial_regs[12] = 0xffffffffffffffff
+ p = Program(lst, bigendian)
+ p.assembly = '\n'.join(dis)+'\n'
+ self.add_case(p, initial_regs=initial_regs, initial_cr=cr)
+
+ def case_mtocrf_regression_2(self):
+ """microwatt 1.bin regression, zero fxm
+ mtocrf 0,16 14928: 21 09 10 7e .long 0x7e100921
+ """
+ dis = ["mtocrf 16, 0"]
+ lst = bytes([0x21, 0x09, 0x10, 0x7e]) # 0x7e100921
+ cr = 0x3F089F7F
+ initial_regs = [0] * 32
+ initial_regs[16] = 0x0001C020
+ p = Program(lst, bigendian)
+ p.assembly = '\n'.join(dis)+'\n'
+ self.add_case(p, initial_regs=initial_regs, initial_cr=cr)
+
+ def case_mfocrf_1(self):
+ lst = [f"mfocrf 2, 1"]
+ cr = 0x1234
+ self.add_case(Program(lst, bigendian), initial_cr=cr)
+