Reconfigurable Architectures and Instruction Sets: Programmability, Code Generation, and Program Execution