Consider the following InstructionDefinitions, with IT_T1 being the generic InstructionDefinition and the rest being specialized cases (instruction behavior removed, not needed for this discussion):
These instructions compile fine, but during initialization ETISS terminates with the following fatal error: "OverlappedNode delegate must not be a plain Node", in file Instruction.cpp. Using all specialized instructions without IT_T1 works fine, as well as up to two specialized instructions together with IT_T1. Three or more specialized instructions cause the above error.
Background why this is needed: ARMv7M has certain instructions which are "specialized" cases of "generic" instructions, where e.g. if a specific register is used certain behavior will be different. Additionally, the reference manual calls these instructions differently. Some of these special cases can be encoded with conditionals inside one InstructionDefinition, others like the example above get very cumbersome if encoded that way.
Consider the following
InstructionDefinitions
, with IT_T1 being the genericInstructionDefinition
and the rest being specialized cases (instruction behavior removed, not needed for this discussion):These instructions compile fine, but during initialization ETISS terminates with the following fatal error: "OverlappedNode delegate must not be a plain Node", in file Instruction.cpp. Using all specialized instructions without IT_T1 works fine, as well as up to two specialized instructions together with IT_T1. Three or more specialized instructions cause the above error.
Background why this is needed: ARMv7M has certain instructions which are "specialized" cases of "generic" instructions, where e.g. if a specific register is used certain behavior will be different. Additionally, the reference manual calls these instructions differently. Some of these special cases can be encoded with conditionals inside one
InstructionDefinition
, others like the example above get very cumbersome if encoded that way.