added the Register class so we can do allocation