[fpc-devel] FPC_REQUIRES_PROPER_ALIGNMENT

Florian Klaempfl F.Klaempfl at gmx.de
Thu Oct 14 00:15:18 CEST 2004


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 :)





More information about the fpc-devel mailing list