view python/ppci/target/msp430/msp430.py @ 342:86b02c98a717 devel

Moved target directory
author Windel Bouwman
date Sat, 01 Mar 2014 15:40:31 +0100
parents python/target/msp430.py@4d204f6f7d4e
children b4882ff0ed06
line wrap: on
line source

import struct
import types
from ..basetarget import Register, Instruction, Target
from ppci.asmnodes import ASymbol, ANumber
from ppci import CompilerError
from .registers import r10, r11, r12, r13, r14, r15
from .instructions import Reti, Mov, Add

# Create the target class (singleton):

class Msp430Target(Target):
    def __init__(self):
        super().__init__('msp430')

        # Registers:
        self.add_keyword('r10')
        self.add_keyword('r11')
        self.add_keyword('r12')
        self.add_keyword('r13')
        self.add_keyword('r14')
        self.add_keyword('r15')
        self.add_rule('reg', ['r10'], lambda rhs: r10)
        self.add_rule('reg', ['r11'], lambda rhs: r11)
        self.add_rule('reg', ['r12'], lambda rhs: r12)
        self.add_rule('reg', ['r13'], lambda rhs: r13)
        self.add_rule('reg', ['r14'], lambda rhs: r14)
        self.add_rule('reg', ['r15'], lambda rhs: r15)

        # Instructions rules:
        self.add_keyword('mov')
        self.add_instruction(['mov', 'reg', ',', 'reg'],
            lambda rhs: Mov(rhs[1], rhs[3]))
        self.add_instruction(['mov', 'imm16', ',', 'reg'],
            lambda rhs: Mov(rhs[1], rhs[3]))

        self.add_keyword('add')
        self.add_instruction(['add', 'reg', ',', 'reg'],
            lambda rhs: Add(rhs[1], rhs[3]))

        self.add_keyword('reti')
        self.add_instruction(['reti'], lambda rhs: Reti())

        # Constants:
        self.add_rule('imm32', ['val32'], lambda x: x[0].val)
        self.add_rule('imm32', ['imm16'], lambda x: x[0])
        self.add_rule('imm16', ['val16'], lambda x: x[0].val)
        self.add_rule('imm16', ['imm8'], lambda x: x[0])
        self.add_rule('imm8', ['val8'], lambda x: x[0].val)
        self.add_rule('imm8', ['imm5'], lambda x: x[0])
        self.add_rule('imm5', ['val5'], lambda x: x[0].val)
        self.add_rule('imm5', ['imm3'], lambda x: x[0])
        self.add_rule('imm3', ['val3'], lambda x: x[0].val)


msp430target = Msp430Target()


# Target description for the MSP430 processor


msp430target.registers.append(r10)
msp430target.registers.append(r11)
msp430target.registers.append(r12)
msp430target.registers.append(r13)
msp430target.registers.append(r14)
msp430target.registers.append(r15)