В настоящее время у меня есть следующий код для поддержки расширенных 10-байтовых значений, сохраненных в двоичных файлах из Win32, и загрузки их на другие платформы. Однако для Android (то есть ARM, а не INTEL) мне нужен код для преобразования в 10-байтовый формат IEEE и из него в 10-байтовой памяти и тип "Extended" в компиляторе (который на самом деле 8 -byte Double).
TYPE
TExtended = TExtended80Rec;
{$IFDEF INTEL64 }
PROCEDURE ExtendedToIEEE(VAR D : Extended ; VAR E : TExtended); ASSEMBLER;
ASM
FLD QWORD PTR [RCX]
FSTP TBYTE PTR [RDX]
FWAIT
END;
PROCEDURE IEEEToExtended(CONST E : TExtended ; VAR D : Extended); ASSEMBLER;
ASM
FLD TBYTE PTR [RCX]
FSTP QWORD PTR [RDX]
FWAIT
END;
{$ELSE }
PROCEDURE ExtendedToIEEE(D : Extended ; VAR E : TExtended);
BEGIN
{$IF SizeOf(Extended)=SizeOf(TExtended) }
MOVE(D,E,SizeOf(Extended))
{$ELSE }
!! MISSING !!
{$ENDIF }
END;
PROCEDURE IEEEToExtended(CONST E : TExtended ; VAR D : Extended);
BEGIN
{$IF SizeOf(Extended)=SizeOf(TExtended) }
MOVE(E,D,SizeOf(Extended))
{$ELSE }
!! MISSING !!
{$ENDIF }
END;
{$ENDIF }
Если возможно, я также хотел бы иметь возможность конвертировать в / из 16-байтового типа "Extended" из MacOS / Linux (если только не 16-байтовый размер "просто" выравнивание, ie. 10 байт дополняются до 16).