This is the mail archive of the frysk@sourceware.org mailing list for the frysk 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: ISA checks for factories


Phil,

unfortunate timing, we crossed e-mails during the night,

Phil Muldoon wrote:
I've written several factories to decide what class to instantiate depending on the ISA. These usually end up as hacks, probably because I do not understand something quite right, or there is no real decent "What ISA does this task/proc belong" discovery.

I can instance check an ISA with:

Isa isa = proc.getIsa();
There is now also:
ISA isa = task.getISA()
which returns a frysk.isa.ISA, which looks smells and behaves like an ENUM. This new ISA just the following attributes:
- family (i386, x8664, PPC)
- word size (4, 8)
- byte order (little, big)
leading to the combinations: IA32, X8664, PPC32LE, PPC32BE, PPC64LE, PPC64BE.


if (isa instanceof IsaIA32) ....

It can then be used as either:


   if (isa == ISA.IA32)
     ..
   else if (isa = ISA.X8664)
     ..

or better?:

  ISAMap map = new ISAMap("why am I here")
      .put(ISA.IA32, new My(IA32))
      .put(ISA.X8664, new My(X8664))
      ;
  ...
      // Throws a RuntimeException if ISA missing
      My o = (My) map.get(task.getISA);

which could easily be wrapped up in a factory.

Andrew



and so on, but that will not work for 32 on 64 ISAs. For example, on a 32 bit process on a 64 bit system, the instance returned would be


LinuxIa32On64

And those cannot be instance checked as they are package private, while the "native" ISAs are public.

So what is the solution here? Open the scope of the xxOnxx ISAs? I get the feeling that instanceof checks tell me that we need to work on a better solution anyway. Reverting to reflection screams hack to me.

Regards

Phil


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