Hi,

In Lazarus i just committed the following code:

   if Alignment <> FDataLink.Field.Alignment then
     Alignment := FDataLink.Field.Alignment;

but i could do also:

  Alignment := FDataLink.Field.Alignment;

The setter property of Alignment already checks if the passed value is equal:

procedure TCustomEdit.SetAlignment(const AValue: TAlignment);
begin
 if FAlignment = AValue then
   exit;
 FAlignment := AValue;
 if HandleAllocated then
   TWSCustomEditClass(WidgetSetClass).SetAlignment(Self, FAlignment);
end;

Most of the time the condition Alignment <> FDataLink.Field.Alignment will evaluate to false.

Removing this check would make the code smaller.

Here is the generated code:

With the check:

[78] if Alignment <> FDataLink.Field.Alignment then
   movl    12(%ebx),%eax
   movl    24(%eax),%eax
   movl    44(%eax),%eax
   cmpl    8(%ebx),%eax
   je    .Lj35
# [79] Alignment := FDataLink.Field.Alignment;
   movl    12(%ebx),%eax
   movl    24(%eax),%eax
   movl    44(%eax),%edx
   movl    %ebx,%eax
   call    P$ASMCHECKBEFOREASSIGNMENT_TMYDBEDIT_$__SETALIGNMENT$TALIGNMENT

Without the check:

# [79] Alignment := FDataLink.Field.Alignment;
   movl    12(%ebx),%eax
   movl    24(%eax),%eax
   movl    44(%eax),%edx
   movl    %ebx,%eax
   call    P$ASMCHECKBEFOREASSIGNMENT_TMYDBEDIT_$__SETALIGNMENT$TALIGNMENT

Is worth removing the check?
The cost of not doing the call compensates the extra code added by the check?

PS: this specific case is not speed sensitive. It was used more as an example.

Luiz
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to