MMInt64.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Fax.: +49(0)351-8037944               =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/index.html               =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 17.09.98 - 15:55:48 $                                        =}
  24. {========================================================================}
  25. unit MMInt64;
  26. {$I COMPILER.INC}
  27. interface
  28. {$IFNDEF DELPHI4}
  29. uses MMUtils;
  30. {$ENDIF}
  31. function int64x64(Param1,Param2: int64): int64;
  32. function int64Div32(Dividend: int64; Divisor: Cardinal): Cardinal;
  33. function int64Mod32(Dividend: int64; Divisor: Cardinal): Cardinal;
  34. implementation
  35. {$IFDEF WIN32}
  36. {$IFNDEF DELPHI4}
  37. { 64-bit Integer helper routines - recycling C++ RTL routines }
  38. {$L MMINT6432.OBJ}
  39. procedure __llmul;      external;
  40. procedure __lldiv;      external;
  41. procedure __llmod;      external;
  42. procedure __llmulo;     external;
  43. procedure __lldivo;     external;
  44. procedure __llmodo;     external;
  45. procedure __llshl;      external;
  46. procedure __llushr;     external;
  47. procedure __llumod;     external;
  48. procedure __lludiv;     external;
  49. {$ENDIF}
  50. {$ENDIF}
  51. {==============================================================================}
  52. function int64x64(Param1,Param2: int64): int64;
  53. {$IFDEF WIN32}
  54. {$IFNDEF DELPHI4}
  55. asm
  56.    push  ebp
  57.    push  edx
  58.    push  eax
  59.    mov   eax, dword ptr Param1[0]
  60.    mov   edx, dword ptr Param2[4]
  61.    call  __llmul
  62.    pop   ebp
  63. {$ELSE}
  64. begin
  65.    Result := Param1*Param2;
  66. {$ENDIF}
  67. {$ELSE}
  68. begin
  69.    Result := Param1*Param2;
  70. {$ENDIF}
  71. end;
  72. {==============================================================================}
  73. function int64Div32(Dividend: int64; Divisor: Cardinal): Cardinal;
  74. {$IFDEF WIN32}
  75. {$IFNDEF DELPHI4}
  76. asm
  77.    push  ebp
  78.    xor   edx, edx
  79.    push  edx
  80.    push  eax
  81.    mov   eax, dword ptr Dividend[0]
  82.    mov   edx, dword ptr Dividend[4]
  83.    call  __lldiv
  84.    pop   ebp
  85. {$ELSE}
  86. begin
  87.    Result := Dividend div Divisor;
  88. {$ENDIF}
  89. {$ELSE}
  90. begin
  91.    Result := 0;
  92. {$ENDIF}
  93. end;
  94. {==============================================================================}
  95. function int64Mod32(Dividend: int64; Divisor: Cardinal): Cardinal;
  96. {$IFDEF WIN32}
  97. {$IFNDEF DELPHI4}
  98. asm
  99.    push  ebp
  100.    xor   edx, edx
  101.    push  edx
  102.    push  eax
  103.    mov   eax, dword ptr Dividend[0]
  104.    mov   edx, dword ptr Dividend[4]
  105.    call  __llmod
  106.    pop   ebp
  107. {$ELSE}
  108. begin
  109.    Result := Dividend mod Divisor;
  110. {$ENDIF}
  111. {$ELSE}
  112. begin
  113.    Result := 0;
  114. {$ENDIF}
  115. end;
  116. end.