Am 11.01.21 um 19:10 schrieb Sven Barth via fpc-devel:
Hello together!

Considering that jamie philbrook has given up on his feature request ( https://bugs.freepascal.org/view.php?id=38341 ) rather quickly and that it had been my idea for him to open that bug report I'd like to discuss this here.

So the idea is to add support for ROL/ROR with Carry support as the current Rol*/Ror* functions don't support that. Florian then said that he's open to suggestions under some restrictions. Considering that the current Rol*/Ror* intrinsics aren't available for all platforms as intrinsics either, but as functions then, this could be done to support CPUs without suitable Carry support as well. And the code snippet that jamie showed would be a nice base:

=== code begin ===

Function ROLByteWithCarry(Const AByte:Byte; Var ACarry:Boolean):Byte;Inline;
var
   LocalIn:Boolean;
  Begin
   LocalIN := Acarry;
   ACarry := ShortInt(Abyte) < 0;
   Result := (AByte shl 1);
   IF LocalIn then Result := Result or 1;
  End;

=== code end ===

Am I missing something?



The question is what one wants to achieve. The performance of rcl/rcr is not really exiting either (throughput 4 times lower than that of shl/shr). Can someone please provide an algorithm which uses ROLByteWithCarry?
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to