Marc Weustink wrote:

At 16:38 13-10-2004, Jonas Maebe wrote:

On 12 okt 2004, at 22:12, Marc Weustink wrote:

M:> Is a sigbus catchable so that you can read the data and continue as if nothing happened (or is that something at OS level)


That is normally possible, yes. But as Florian said, it's quite a bit of work and also extremely slow (you get 4 context switches per unaligned access, + the work to load the value).


Yes I do realize that there is a penalty for doing unaligned access.

It's not a penalty, it's death regarding speed ;) A solution I could imagine is that packed records are accessed correctly, i.e. shifting and oring but catching sigbus is too much imo and will cause serious performance problems.


BTW: Does anybody have TP 5.5 for m68k and can test what it does :)?

gpc accesses packed records correctly but it doesn't allow to take the address of a field of a packed record.

gpc example:

program test;

procedure p(var i : integer);
  begin
  end;

var
  r : packed record
    c : char;
    i : integer;
  end;

begin
  r.i:=1; <--- works
  p(r.i); <--- test.p:15: packed fields may not be used as `var' parameters
end.

This will throw away all advantages away form pascal (like strong typing etc).
And if you forget to make it aligned, you get all kinds of errors.


I hope I got this all wrong, otherwise I would be better of using a C compiler for this (then I've the ability to use macros to get around this)


FPC always tries to do the best of both worlds, I guess you don't want the gpc behaviour either :)



_______________________________________________ fpc-devel maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to