# HG changeset patch # User Windel Bouwman # Date 1374319084 -7200 # Node ID 90637d1bbfad3ac0ffae2e234ffedc561e538f10 # Parent 81752b0f85a581c44913ddea7b7744c91f87e3cf Added test sequence 2 diff -r 81752b0f85a5 -r 90637d1bbfad python/cortexm3.py --- a/python/cortexm3.py Wed Jul 17 22:31:54 2013 +0200 +++ b/python/cortexm3.py Sat Jul 20 13:18:04 2013 +0200 @@ -345,19 +345,14 @@ class movregreg_ins(ArmInstruction): """ mov Rd, Rm """ mnemonic = 'mov' - operands = (RegOp, RegOp) + operands = (Reg8Op, Reg8Op) def __init__(self, rd, rm): self.rd = rd self.rm = rm def encode(self): rd = self.rd.num - D = (rd & 0x8) >> 3 - assert D < 2 - rd = rd & 0x7 rm = self.rm.num - assert rm < 16 - opcode = self.opcode - h = (1 << 14) | (3 << 9) | (D << 7) | (rm << 3) | rd + h = 0 | (rm << 3) | rd return u16(h) @@ -461,6 +456,11 @@ # Jumping: +def wrap_negative(x, bits): + b = struct.unpack('> 1 - h = (0b11100 << 11) | imm11 | 1 # 1 to enable thumb mode + imm11 = wrap_negative(self.offset >> 1, 11) + h = (0b11100 << 11) | imm11 # | 1 # 1 to enable thumb mode return u16(h) class cond_base_ins(jumpBase_ins): def encode(self): - imm8 = 0 + imm8 = wrap_negative(self.offset >> 1, 8) h = (0b1101 << 12) | (self.cond << 8) | imm8 return u16(h) diff -r 81752b0f85a5 -r 90637d1bbfad python/testasm.py --- a/python/testasm.py Wed Jul 17 22:31:54 2013 +0200 +++ b/python/testasm.py Sat Jul 20 13:18:04 2013 +0200 @@ -257,6 +257,20 @@ self.feed('loop: add r6, r4, 7') self.feed('cmp r6, 5') self.check('0325 2c1c e61d 052e') + def testSequence2(self): + self.feed('henkie:') + self.feed('push {r1,r4,r5}') + self.feed('add r5, r2, r4') + self.feed('cmp r4, r2') + self.feed('ldr r0, [sp + 4]') + self.feed('str r3, [sp + 16]') + self.feed('pop {r1, r4, r5}') + self.feed('lsl r3, r4') + self.feed('cmp r3, r5') + self.feed('beq henkie') + self.feed('bne henkie') + self.feed('b henkie') + self.check('32b41519 94420198 049332bc a340ab42 f6d0f5d1 f4e7') if __name__ == '__main__': #cProfile.run('unittest.main()') diff -r 81752b0f85a5 -r 90637d1bbfad python/zcc.py --- a/python/zcc.py Wed Jul 17 22:31:54 2013 +0200 +++ b/python/zcc.py Sat Jul 20 13:18:04 2013 +0200 @@ -42,7 +42,7 @@ outs.dump() code_bytes = outs.sections['code'].to_bytes() - print('bytes:', code_bytes) + #print('bytes:', code_bytes) if args.output: output_filename = args.output else: