This is the mail archive of the cgen@sourceware.org mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Simulator: base_insn and insn in decode.c


Ronald Hecht wrote:

I switched to the SID framework. I found it easier to create a new target. The disassemby works better as it calls this disassembler code in src/opcodes. But I'm still in trouble with decode.cxx. It looks the same as in sim. I'n my opinion the entire_insn should alwasy be left aligned and not right_aligned as it is now. Base_insn should have the same alignment. I think this way it is easier to support variable sized instructions.

I've been looking at what other ports do and it seems that most are able to pass the same value base_insn and entire_insn because the opcode bits are scattered throughout the insns. The ones which aren't so lucky do one of two things:

1) Write some ugly code which examines the base_insn bits in order to decide how to position entire_insn.

2) Set base-insn-bitsize in the define-isa of the .cpu file to be the size of the largest insn. For SID, base_insn and entire_insn can then be passed identically as the insn bits aligned at the 'base-insn-bitsize' bit. For example, in your case, the max insn length appears to be 24, so you could simply read 3 bytes individually (to avoid endianness problems) and place them sequentially in the low order bytes of base_insn and entire_insn.

Barring some redesign of the interface as has been discussed, I don't see any other options for you.

Dave


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]