Hello, At first, thanks and congratulations for Free Pascal.
I am trying to convert all my libraries (big integers, big floats, etc) from Delphi 5 to Free Pascal 1.9.4. As a total newbie with Free Pascal, I have some questions. 1) In an assembler routine, is the direction flag managed like in Delphi, i.e., should a routine always restore DF=0? 2) " end [ {$IFNDEF REGCALL} 'eax','ecx', {$ENDIF} 'edi']; " Is the previous line meaningful? (See the routine below) 3) When P is a PUI32 (PUI32 = ^Longword), I use Inc(P,Count) to increment P by Count (Count > 1). It compiles fine but there is the message "Conversion between ordinals and pointers are not not portable". What does it mean? Portable towards what? (I am compiling with {$MODE OBJFPC}) 4) "Internal error 200310221". Let's say I have one program (set as primary file) and one unit. The only way to compile (and to build) both of them is to activate the unit window and to "build" from there. In all other cases, "compile" and "build" stop with this internal error. I suppose I didn't correctly configure something (?) (Windows 98, AMD 2600+) Thanks in advance for your time. -- mm http://www.ellipsa.net/ type TUI32 = Longword; PUI32 = ^TUI32; //============================================================================== // Fill P^ with Count 32-bit words equal to Value // Require: Count >= 0 //============================================================================== {$IFDEF NX_NOASMCODE} procedure nx_fill(P: PUI32; Count: Longint; Value: TUI32); var i : Longint; begin Assert(Count >= 0); for i := 1 to Count do begin P^ := Value; Inc(P); end; end; {$ELSE} // NX_NOASMCODE {$IFDEF NX_DEBUG} procedure nx_fill_debug(P: PUI32; Count: Longint; Value: TUI32); {$ELSE} procedure nx_fill(P: PUI32; Count: Longint; Value: TUI32); {$ENDIF} assembler; asm {$IFNDEF REGCALL} mov edi, P mov eax, Value mov ecx, Count {$ELSE} // re-ordering the procedure parameters could avoid 2 "mov" but // f(Value,P,Count) is less 'coherent' than f(P,Count,Value) mov edi, eax mov eax, ecx mov ecx, edx {$ENDIF} rep stosd end [ {$IFNDEF REGCALL} 'eax','ecx', {$ENDIF} 'edi']; {$IFDEF NX_DEBUG} procedure nx_fill(P: PUI32; Count: Longint; Value: TUI32); begin Assert(Count >= 0); nx_fill_debug(P,Count,Value); end; {$ENDIF} {$ENDIF} // NX_NOASMCODE _______________________________________________ fpc-pascal maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-pascal