ExceptionObjects: array[0..MAX_NESTED_EXCEPTIONS-1] of TRaisedException;
function _ReallocMem(var P: Pointer; NewSize: Integer): Pointer;
asm
MOV ECX,[EAX]
TEST ECX,ECX
JE @@alloc
TEST EDX,EDX
JE @@free
@@resize:
PUSH EAX
MOV EAX,ECX
CALL MemoryManager.ReallocMem
POP ECX
OR EAX,EAX
JE @@allocError
MOV [ECX],EAX
RET
@@freeError:
MOV AL,reInvalidPtr
JMP Error
@@free:
MOV [EAX],EDX
MOV EAX,ECX
CALL MemoryManager.FreeMem
OR EAX,EAX
JNE @@freeError
RET
@@allocError:
MOV AL,reOutOfMemory
JMP Error
@@alloc:
TEST EDX,EDX
JE @@exit
PUSH EAX
MOV EAX,EDX
CALL MemoryManager.GetMem
POP ECX
OR EAX,EAX
JE @@allocError
MOV [ECX],EAX
@@exit:
end;
//function _Pow10(val: Extended; Power: Integer): Extended;
procedure _Pow10;
asm
// -> FST(0) val
// -> EAX Power
// <- FST(0) val * 10**Power
// This routine generates 10**power with no more than two
// floating point multiplications. Up to 10**31, no multiplications
// are needed.
PUSH EBX
{$IFDEF PIC}
PUSH EAX
CALL GetGOT
MOV EBX,EAX
POP EAX
{$ELSE}
XOR EBX,EBX
{$ENDIF}
TEST EAX,EAX
JL @@neg
JE @@exit
CMP EAX,5120
JGE @@inf
MOV EDX,EAX
AND EDX,01FH
LEA EDX,[EDX+EDX*4]
FLD tbyte ptr @@tab0[EBX+EDX*2]
FMULP
SHR EAX,5
JE @@exit
MOV EDX,EAX
AND EDX,0FH
JE @@skip2ndMul
LEA EDX,[EDX+EDX*4]
FLD tbyte ptr @@tab1-10[EBX+EDX*2]
FMULP
@@skip2ndMul:
SHR EAX,4
JE @@exit
LEA E